前提・実現したいこと
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/ツールのバージョンなど)
データの読み込み部分も一応載せておきます。見づらかったらすいません。
探索するパラメータ空間が多すぎるのでは?
例えば、a, b, c というパラメータがあり、これをそれぞれ 0 ~ 100 の範囲でグリッドサーチする場合、
100x100x100 = 1000000 通り試さなければなりません。
グリッドサーチした場合、合計何通り試す必要があるのか概算できると思うので、多すぎる場合は探索する範囲またはパラメータを削減してみてはどうでしょうか
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を使っていた時は、問題無い時間で終わっていたのですが…
回答3件
あなたの回答
tips
プレビュー