質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

機械学習、python グリッドサーチ(leave-one-out)による計算が終わりません!

moon_light
moon_light

総合スコア23

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

3回答

0評価

0クリップ

130閲覧

投稿2018/12/17 07:41

前提・実現したいこと

gridseachCVを使わず、グリッドサーチによるパラメータのチューニングを行いたいのですが計算が終わりません。何故こんなに時間がかかるのでしょうか?

発生している問題・エラーメッセージ

エラーは出ませんが、計算が終わりません(二時間程度)

該当のソースコード

import numpy as np import pandas as pd import matplotlib.pyplot as plt import time import winsound as ws from sklearn.preprocessing import StandardScaler,MinMaxScaler from sklearn.decomposition import KernelPCA as KPCA from sklearn.linear_model import LogisticRegression from sklearn.model_selection import LeaveOneOut from sklearn.pipeline import make_pipeline from sklearn.model_selection import GridSearchCV start=time.time() #データ読み込み file_name='data_class3.xlsx' sheet_name='Sheet1' df = pd.read_excel(file_name,sheet_name=sheet_name) df=df.drop('results',axis=1) df_X=df.copy() df_Y=df.copy() features_df=df_X.drop('Target',axis=1) features_test=np.array(features_df) nan_count=0 while True: for i in range(len(features_df.columns)): col=features_df.iloc[0:44,i] q1=col.describe()['25%'] q3=col.describe()['75%'] iqr=q3-q1 outlier_min=q1-(iqr)*1.5 outlier_max=q3+(iqr)*1.5 col[col<outlier_min]=None col[col>outlier_max]=None for i in range(len(features_df.columns)): col=features_df.iloc[44:55,i] q1=col.describe()['25%'] q3=col.describe()['75%'] iqr=q3-q1 outlier_min=q1-(iqr)*1.5 outlier_max=q3+(iqr)*1.5 col[col<outlier_min]=None col[col>outlier_max]=None for i in range(len(features_df.columns)): col=features_df.iloc[55:,i] q1=col.describe()['25%'] q3=col.describe()['75%'] iqr=q3-q1 outlier_min=q1-(iqr)*1.5 outlier_max=q3+(iqr)*1.5 col[col<outlier_min]=None col[col>outlier_max]=None pre_nan_count=sum(features_df.isnull().sum())-nan_count nan_count=pre_nan_count+nan_count if pre_nan_count==0: break mod_hr_rest_avg=features_df["HR-rest"][0:44].mean() mod_hr_task_avg=features_df["HR-task"][0:44].mean() mod_hr_after_avg=features_df["HR-after"][0:44].mean() mod_hf_rest_avg=features_df["HF-rest"][0:44].mean() mod_hf_task_avg=features_df["HF-task"][0:44].mean() mod_hf_after_avg=features_df["HF-after"][0:44].mean() mod_lf_rest_avg=features_df["LH-rest"][0:44].mean() mod_lf_task_avg=features_df["LH-task"][0:44].mean() mod_lf_after_avg=features_df["LH-after"][0:44].mean() features_df["HR-rest"][0:44]=features_df["HR-rest"][0:44].fillna(mod_hr_rest_avg) features_df["HR-task"][0:44]=features_df["HR-task"][0:44].fillna(mod_hr_task_avg) features_df["HR-after"][0:44]=features_df["HR-after"][0:44].fillna(mod_hr_after_avg) features_df["HF-rest"][0:44]=features_df["HF-rest"][0:44].fillna(mod_hf_rest_avg) features_df["HF-task"][0:44]=features_df["HF-task"][0:44].fillna(mod_hf_task_avg) features_df["HF-after"][0:44]=features_df["HF-after"][0:44].fillna(mod_hf_after_avg) features_df["LH-rest"][0:44]=features_df["LH-rest"][0:44].fillna(mod_lf_rest_avg) features_df["LH-task"][0:44]=features_df["LH-task"][0:44].fillna(mod_lf_task_avg) features_df["LH-after"][0:44]=features_df["LH-after"][0:44].fillna(mod_lf_after_avg) gad_hr_rest_avg=features_df["HR-rest"][44:55].mean() gad_hr_task_avg=features_df["HR-task"][44:55].mean() gad_hr_after_avg=features_df["HR-after"][44:55].mean() gad_hf_rest_avg=features_df["HF-rest"][44:55].mean() gad_hf_task_avg=features_df["HF-task"][44:55].mean() gad_hf_after_avg=features_df["HF-after"][44:55].mean() gad_lf_rest_avg=features_df["LH-rest"][44:55].mean() gad_lf_task_avg=features_df["LH-task"][44:55].mean() gad_lf_after_avg=features_df["LH-after"][44:55].mean() features_df["HR-rest"][44:55]=features_df["HR-rest"][44:55].fillna(gad_hr_rest_avg) features_df["HR-task"][44:55]=features_df["HR-task"][44:55].fillna(gad_hr_task_avg) features_df["HR-after"][44:55]=features_df["HR-after"][44:55].fillna(gad_hr_after_avg) features_df["HF-rest"][44:55]=features_df["HF-rest"][44:55].fillna(gad_hf_rest_avg) features_df["HF-task"][44:55]=features_df["HF-task"][44:55].fillna(gad_hf_task_avg) features_df["HF-after"][44:55]=features_df["HF-after"][44:55].fillna(gad_hf_after_avg) features_df["LH-rest"][44:55]=features_df["LH-rest"][44:55].fillna(gad_lf_rest_avg) features_df["LH-task"][44:55]=features_df["LH-task"][44:55].fillna(gad_lf_task_avg) features_df["LH-after"][44:55]=features_df["LH-after"][44:55].fillna(gad_lf_after_avg) con_hr_rest_avg=features_df["HR-rest"][55:].mean() con_hr_task_avg=features_df["HR-task"][55:].mean() con_hr_after_avg=features_df["HR-after"][55:].mean() con_hf_rest_avg=features_df["HF-rest"][55:].mean() con_hf_task_avg=features_df["HF-task"][55:].mean() con_hf_after_avg=features_df["HF-after"][55:].mean() con_lf_rest_avg=features_df["LH-rest"][55:].mean() con_lf_task_avg=features_df["LH-task"][55:].mean() con_lf_after_avg=features_df["LH-after"][55:].mean() features_df["HR-rest"][55:]=features_df["HR-rest"][55:].fillna(con_hr_rest_avg) features_df["HR-task"][55:]=features_df["HR-task"][55:].fillna(con_hr_task_avg) features_df["HR-after"][55:]=features_df["HR-after"][55:].fillna(con_hr_after_avg) features_df["HF-rest"][55:]=features_df["HF-rest"][55:].fillna(con_hf_rest_avg) features_df["HF-task"][55:]=features_df["HF-task"][55:].fillna(con_hf_task_avg) features_df["HF-after"][55:]=features_df["HF-after"][55:].fillna(con_hf_after_avg) features_df["LH-rest"][55:]=features_df["LH-rest"][55:].fillna(con_lf_rest_avg) features_df["LH-task"][55:]=features_df["LH-task"][55:].fillna(con_lf_task_avg) features_df["LH-after"][55:]=features_df["LH-after"][55:].fillna(con_lf_after_avg) drop_idx=['HR-rest','HR-task','HR-after','HF-rest','HF-task','HF-after','LH-rest','LH-task','LH-after'] targets_df=df_Y.drop(drop_idx,axis=1) targets_array=np.array(targets_df) features_train=np.array(features_df) targets=np.ravel(targets_array) #グリッドサーチによるパラメータの探索 param_range_lr_c=[10**i for i in range(-5,6)] param_range_kpca_gamma=[10**(i) for i in range(-5,6)] train_index=list(range(len(features_train))) train_data=[] targets_train=[] predicted_labels_grid=[] test_score_grid_list=[] for lr_c in param_range_lr_c: for kcpa_gamma in param_range_kpca_gamma: sckit_kpca=KPCA(n_components=None,kernel='rbf',gamma=kcpa_gamma)#n_componentsは謎のパラメータ。誰か教えて for test_index in range(len(features_test)): if test_index in train_index: train_index.remove(test_index) else: pass for i in train_index: train_data.append(features_train[i]) targets_train.append(targets[i]) test_data,targets_test=np.reshape(features_test[test_index],(1,-1)),np.ravel(targets[test_index]) pipe_lr=make_pipeline(StandardScaler(),\ sckit_kpca,\ LogisticRegression(penalty="l2",\ C=lr_c,\ random_state=1,\ solver="lbfgs",\ multi_class='multinomial')) pipe_lr.fit(train_data,targets_train) test_score1_list=[] test_score1=pipe_lr.fit(train_data,targets_train).score(test_data,targets_test) test_score1_list.append(test_score1) test_score_grid=np.mean(test_score1_list) test_score_grid_list.append(test_score_grid) best_score=max(test_score_grid_list)

試したこと

デバックで回したら一回forループを回すことができました。

補足情報(FW/ツールのバージョンなど)

データの読み込み部分も一応載せておきます。見づらかったらすいません。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

tiitoi

2018/12/17 07:55

探索するパラメータ空間が多すぎるのでは? 例えば、a, b, c というパラメータがあり、これをそれぞれ 0 ~ 100 の範囲でグリッドサーチする場合、 100x100x100 = 1000000 通り試さなければなりません。 グリッドサーチした場合、合計何通り試す必要があるのか概算できると思うので、多すぎる場合は探索する範囲またはパラメータを削減してみてはどうでしょうか
moon_light

2018/12/17 08:03

param_range_lr_c=[10**i for i in range(-5,6)] param_range_kpca_gamma=[10**(i) for i in range(-5,6)] の部分で探索範囲を指定しているのですが、リストに10個づづ入っているので100通りですよね? gridsearchCVを使っていた時は、問題無い時間で終わっていたのですが…

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。