我正在从sklearn训练randomforest模型,并尝试通过网格搜索对模型进行微调。由于我正在进行网格搜索,因此模型具有完全相同的X和y数据以适合模型(以及随机状态)。但是奇怪的部分来了,训练第一个网格搜索模型有时大约需要13秒,有时甚至需要32秒。其余的网格搜索与第一个类似。如果网格搜索以13秒开始,则其余搜索总是比32秒开始快近两倍... 我不介意时差很小,但是花费两倍的时间使我很难进行搜索,而且毫无意义...
我现在正在做的是打开和关闭计算机,直到训练完成第一次搜索需要13秒,这样我才能将其余的搜索运行的速度比开始时的32秒快两倍。但是问题在于,从13秒开始比32秒少得多。
我的CPU是AMD threadripper 2990wx,在进行搜索时,我没有运行jupyter notebook以外的其他程序。而且所有的CPU使用率在13秒和32秒之间都达到了100%。 我不知道这是CPU问题还是sklearn。
这是代码;
def export_to_csv(n_estimators, score_list, max_features, class_weight):
for score in score_list:
print(score)
for max_F in max_features:
tic = time.time()
train_class = (y_train >= score).astype(int)
test_class = (y_test >= score).astype(int)
model = RandomForestClassifier(n_estimators=n_estimators, max_features=max_F, n_jobs = -1,random_state=729,
class_weight = class_weight,)
model.fit(X_train,train_class)
predict = model.predict(X_test)
predict = pd.DataFrame(predict, columns=["predict"])
real_ret = df.loc[y_test.index]["4month return label float"]
y_test_df = pd.concat([y_test, real_ret], axis = 1)
y_test_df = pd.DataFrame(y_test_df.reset_index())
P = pd.concat([predict, y_test_df], axis = 1)
P = P[P["predict"] == 1].sort_values("index")
P.to_csv(f"randomforest grid search\\70_77 balanced\\n_estimator {n_estimators} score {score} class_weight {class_weight} max_feature {max_F}.csv")
toc = time.time()
timelapse = toc-tic
print(int(timelapse), "seconds")
n_estimators = 1000
score_list = [71, 72, 73, 74, 75, 76, 77]
max_features = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]
class_weight = "balanced"
export_to_csv(n_estimators, score_list, max_features,class_weight)