使用完全相同的数据和random_state训练randomforest模型花费的时间不同

时间:2019-08-24 14:12:20

标签: scikit-learn model cpu random-forest training-data

我正在从sklearn训练randomforest模型,并尝试通过网格搜索对模型进行微调。由于我正在进行网格搜索,因此模型具有完全相同的X和y数据以适合模型(以及随机状态)。但是奇怪的部分来了,训练第一个网格搜索模型有时大约需要13秒,有时甚至需要32秒。其余的网格搜索与第一个类似。如果网格搜索以13秒开始,则其余搜索总是比32秒开始快近两倍... 我不介意时差很小,但是花费两倍的时间使我很难进行搜索,而且毫无意义...

我现在正在做的是打开和关闭计算机,直到训练完成第一次搜索需要13秒,这样我才能将其余的搜索运行的速度比开始时的32秒快两倍。但是问题在于,从13秒开始比32秒少得多。

我的CPU是AMD threadripper 2990wx,在进行搜索时,我没有运行jupyter notebook以外的其他程序。而且所有的CPU使用率在13秒和32秒之间都达到了100%。 我不知道这是CPU问题还是sklearn。

fast case slow case

这是代码;

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)

0 个答案:

没有答案