# data_predicting.py from tqdm import tqdm import concurrent.futures class PredictData: def __init__(self,X_train_trans,X_test_trans,y_train,y_test): self.X_train_trans=X_train_trans self.X_test_trans=X_test_trans self.y_train=y_train self.y_test=y_test def GraForestCl_predict_data(self): def forcount(random_st): print('start') test_score=0 train_score=0 n_es=0 max=0 rate=0 for i in tqdm(range(1,3)): for j in tqdm(range(1,3)): for k in tqdm(np.arange(.01,.03,.01)): forest=GradientBoostingClassifier(random_state=random_st,n_estimators=i,max_depth=j,learning_rate=k) forest=forest.fit(self.X_train_trans,self.y_train) if forest.score(self.X_test_trans,self.y_test) > test_score: test_score=forest.score(self.X_test_trans,self.y_test) train_score=forest.score(self.X_train_trans,self.y_train) n_es=i max=j rate=k return test_score,train_score,n_es,max,rate with concurrent.futures.ProcessPoolExecutor(None) as executor: print(forcount(0)) # 正常に作動し、値(test_score,,,rate)が表示される print('開始') futures=[executor.submit(forcount,i) for i in range(2)] # ここが問題 print('途中') for future in concurrent.futures.as_completed(futures): # test_score,train_score,n_es,max,rate=future.result() # print(f'GraForestCl_Train Score n_es{n_es},max{max},rate{rate}:{train_score}') # print(f'GraForestCl_Test Score n_es{n_es},max{max},rate{rate}:{test_score}') print(future.result()) print() if __name__=='__main__': prd=PredictData(X_train_trans,X_test_trans,y_train,y_test) prd.GraForestCl_predict_data() ''' 以下実行結果 開始 途中 print(future.result())の部分で AttributeError:Can't pickle local object 'PredictData.GraForestCl_predict_data.<locals>.forcount' '''
GraForestCl_predict_data関数の中のforcount関数を並行処理したいのですが、予想ですがsubmitされておらずforcount関数が作動しません。
助言をお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/09 10:14
2021/12/09 10:22 編集
2021/12/10 13:07
2021/12/10 13:42 編集
2021/12/10 13:53
2021/12/10 15:00
2021/12/10 19:58
2021/12/11 07:28
2021/12/11 10:49
2021/12/11 11:54