前提・実現したいこと
回帰アルゴリズムのパラメーター最適化を行っています。
クロスバリデーションをleave-one-outで実行する場合のコードは出来ていますが、実行時間がかかるため、計算に複数CPUを使うようにして時間を短縮したいです。
発生している問題・エラーメッセージ
当該コードではCPU1つのみ作動。並列化を調べて試してみたが未達成。
該当のソースコード
Python
1from sklearn.model_selection import train_test_split 2from sklearn.model_selection import LeaveOneOut 3loo = LeaveOneOut() 4from sklearn.metrics import r2_score, mean_squared_error 5 6#GS関数を定義 7def set_para(model, X, y): 8 X_arr = np.array(X) 9 y_arr = np.array(y) 10 scores = [] 11 for train_val_samples, test_samples in loo.split(X_arr, y_arr): 12 X_train_val, X_test = X_arr[train_val_samples], X_arr[test_samples] 13 y_train_val, y_test = y_arr[train_val_samples], y_arr[test_samples] 14 ytests = [] 15 ypreds = [] 16 for train_samples, val_samples in loo.split(X_train_val, y_train_val): 17 X_train, X_val = X_train_val[train_samples], X_train_val[val_samples] 18 y_train, y_val = y_train_val[train_samples], y_train_val[val_samples] 19 model.fit(X_train, y_train) 20 predicts = model.predict(X_val) 21 ytests += list(y_val) 22 ypreds += list(predicts) 23 score = r2_score(ytests, ypreds) 24 scores.append(score) 25 return scores 26 27#例えばElasticnetの場合 28from sklearn.linear_model import ElasticNet 29for alpha in [0, 0.001, 0.01, 0.1, 1]: 30 for l1_ratio in [0, 0.001, 0.01, 0.1, 1]: 31 values = set_para(ElasticNet(alpha = alpha, l1_ratio = l1_ratio), X, y) 32 33 print(alpha, l1_ratio, np.mean(values)) 34
試したこと
1 GridsearchCVとcross_val_scoreでn_jobs=-1を使用
回帰の場合leave-one-outでR2を出せない
2 Joblibで並列化する(https://qiita.com/Yuhsak/items/1e8533343cf5458e2e08)
参考にしながらコードを追加したがCPU一つだけ作動
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。