调参时RandomForestClassifier训练过慢,求M1 Pro环境下的提速方案
加快随机森林参数调优训练速度的方法
利用M1 Pro多核并行能力
scikit-learn的RandomForestClassifier默认支持并行训练,设置n_jobs=-1可调用所有可用CPU核心,M1 Pro的多核心能大幅压缩训练时间。修改模型初始化代码:rfc = RandomForestClassifier(n_estimators=k, n_jobs=-1)缩小迭代范围,先粗调后细调
遍历1到200的n_estimators存在大量冗余,很多取值的性能差异极小。可以先以大步长(比如10)做粗调,比如测试10、30、50、80、100、150、200,找到准确率趋于稳定的区间后,再在该区间内小步长细调,减少不必要的迭代次数。用交叉验证替代单次测试评估
当前代码每次训练后仅用测试集计算准确率,改用cross_val_score不仅能避免过拟合测试集的问题,还能结合并行计算提升效率。示例代码:from sklearn.model_selection import cross_val_score scores = [] # 先以步长10粗调 for k in range(1, 200, 10): rfc = RandomForestClassifier(n_estimators=k, n_jobs=-1) # 5折交叉验证,并行计算 cv_scores = cross_val_score(rfc, X_train_scaled, y_train, cv=5, n_jobs=-1) scores.append(cv_scores.mean())降低数据集维度
如果特征维度较高,先通过特征选择或降维缩小数据规模,能显著加快训练速度。比如用SelectKBest筛选高相关性特征:from sklearn.feature_selection import SelectKBest, f_classif # 选择前100个最相关的特征 selector = SelectKBest(f_classif, k=100) X_train_selected = selector.fit_transform(X_train_scaled, y_train) X_test_selected = selector.transform(X_test_scaled) # 使用降维后的数据集训练模型使用Apple Silicon优化的替代库
M1芯片对lightgbm或xgboost的Apple Silicon版本支持更好,这些库的训练速度比scikit-learn的随机森林更快,且效果相当。以LightGBM为例:import lightgbm as lgb scores = [] for k in range(1, 200): lgb_clf = lgb.LGBMClassifier(n_estimators=k, n_jobs=-1) lgb_clf.fit(X_train_scaled, y_train) y_pred = lgb_clf.predict(X_test_scaled) scores.append(accuracy_score(y_test, y_pred))限制单棵树的复杂度
随机森林的训练时间和单棵树的复杂度正相关,可通过设置max_depth限制树深,或min_samples_split、min_samples_leaf减少节点数量,既能提速还能避免过拟合:rfc = RandomForestClassifier(n_estimators=k, n_jobs=-1, max_depth=10)
内容的提问来源于stack exchange,提问作者Ata Berk Çinetçi
相关产品推荐
相关产品推荐

