Jupyter Notebook中随机森林调参For循环卡顿问题排查及无范围改动的优化方案咨询
解决随机森林n_estimators调参卡顿问题:高效实现方案
嘿,我来帮你拆解下代码卡顿的原因,再给你一个完全符合参数范围要求的高效实现方案!
你的代码为什么卡顿?
- 每次循环都从头训练全新的随机森林模型:比如当
i=50时训练50棵树,i=60时又重新训练60棵完全独立的树,之前训练的50棵树完全没有被复用。这么一来,你总共训练了50+60+70+...+500 = 12375棵树,大量重复计算直接拖慢了运行速度,导致Jupyter卡顿。
不改动参数范围的高效实现方法
核心思路是利用RandomForest的warm_start参数——它允许你在已训练好的模型基础上新增决策树,而不是从头训练整个模型。这样我们只需要训练50 + 10*44 = 490棵树(比原来少了25倍),速度会大幅提升。
修改后的代码如下:
from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score accuracy_scores = [] # 初始化模型,开启warm_start,先设置初始n_estimators=50 model_random = RandomForestClassifier( n_estimators=50, criterion="entropy", max_features=10, min_samples_leaf=50, warm_start=True # 关键参数:允许增量训练 ) # 第一次训练50棵树 model_random.fit(X_train, Y_train) Y_pred = model_random.predict(X_test) accuracy = round(accuracy_score(Y_pred, Y_test)*100, 2) accuracy_scores.append(accuracy) # 从60到500,步长10,每次只新增10棵树 for i in range(60, 500, 10): # 更新n_estimators为当前值,warm_start会自动新增(i - 当前已有树的数量)棵树 model_random.set_params(n_estimators=i) model_random.fit(X_train, Y_train) # 这里只训练新增的10棵,不是全部! Y_pred = model_random.predict(X_test) accuracy = round(accuracy_score(Y_pred, Y_test)*100, 2) accuracy_scores.append(accuracy) # 找出最优结果 max_accuracy = max(accuracy_scores) print(max_accuracy) best_n = 50 + accuracy_scores.index(max_accuracy)*10 print(best_n)
额外优化小技巧
如果你的数据集比较大,还可以在初始化模型时加上n_jobs=-1,让模型利用所有CPU核心并行训练决策树,进一步加快运行速度。
内容的提问来源于stack exchange,提问作者Govind Mittal
相关产品推荐
相关产品推荐

