
一种RF-RF和RF-SVR回归预测方法Python版本RF随机森林用于特征选择RF随机森林和SVR支持向量机用于建模均含交叉验证包括不同核函数几乎每行都有注释直接上干货吧今天聊个用随机森林玩特征选择RFR/SVR预测的实战套路。咱们不用那些花里胡哨的框架直接拿Python的sklearn开搞重点在于流程可复现和代码可修改性。文末有完整代码获取方式先看特征选择部分。随机森林自带的特征重要性排序比皮尔逊相关系数靠谱特别是处理非线性关系时from sklearn.ensemble import RandomForestRegressor import numpy as np rf_selector RandomForestRegressor(n_estimators100, random_state42) rf_selector.fit(X, y) # 喂入完整数据集训练 # 获取特征重要性并排序 importances rf_selector.feature_importances_ indices np.argsort(importances)[::-1] # 降序排列的索引 # 打印前10重要特征 print(特征重要性排名:) for f in range(10): print(f{f1}. 特征 {indices[f]} ({importances[indices[f]]:.4f})) # 选择前N个重要特征 selected_features indices[:10] # 这里选前10个根据实际情况调整 X_selected X[:, selected_features]这里有个坑特征选择时如果用全部数据会引入数据泄露严谨的做法应该是在交叉验证循环内部做特征选择。不过对于非时序数据且样本量大时这种简化处理问题不大。接下来是模型训练环节咱们把RF和SVR都安排上。先看随机森林回归的交叉验证实现from sklearn.model_selection import KFold from sklearn.metrics import mean_squared_error kf KFold(n_splits5, shuffleTrue, random_state42) rf_scores [] for train_index, test_index in kf.split(X_selected): X_train, X_test X_selected[train_index], X_selected[test_index] y_train, y_test y[train_index], y[test_index] # 每次都重新实例化模型防止参数污染 model RandomForestRegressor(n_estimators200, max_depth10, n_jobs-1) model.fit(X_train, y_train) pred model.predict(X_test) score np.sqrt(mean_squared_error(y_test, pred)) # 用RMSE评估 rf_scores.append(score) print(fRF平均RMSE: {np.mean(rf_scores):.4f} (±{np.std(rf_scores):.4f}))注意这里n_jobs-1会启用全部CPU核心加速但如果是Windows平台可能会报错遇到的话改成具体数字。一种RF-RF和RF-SVR回归预测方法Python版本RF随机森林用于特征选择RF随机森林和SVR支持向量机用于建模均含交叉验证包括不同核函数几乎每行都有注释SVR部分更有意思不同核函数表现差异可能很大。咱们用网格搜索找最优参数from sklearn.svm import SVR from sklearn.model_selection import GridSearchCV # 先做数据标准化SVR对尺度敏感 from sklearn.preprocessing import StandardScaler scaler StandardScaler() X_scaled scaler.fit_transform(X_selected) # 参数网格 param_grid [ {kernel: [linear], C: [0.1, 1, 10]}, {kernel: [rbf], C: [1, 10], gamma: [scale, auto]}, {kernel: [poly], degree: [2,3], coef0: [0, 1]} ] svr SVR() grid_search GridSearchCV(svr, param_grid, cv3, scoringneg_mean_squared_error, n_jobs-1) grid_search.fit(X_scaled, y) best_svr grid_search.best_estimator_ print(f最优参数: {grid_search.best_params_})这里有个经验多项式核在实际数据中容易过拟合遇到小样本数据时可以适当限制degree参数。另外gamma参数用scale默认1/(nfeatures * X.var())比auto1/nfeatures更稳健。最后对比两个模型的表现时记得要在相同的数据划分下比较。个人经验是当特征数量50时RF更稳定而数据量小但特征质量高时SVR可能反超。不过具体问题还得看数据分布——建议两种方法都跑一遍选验证集表现好的那个上线。完整代码可以在GitHub仓库虚构地址找到包含数据预处理和可视化模块。下期可能会讲怎么用SHAP值解释随机森林的预测结果感兴趣的话评论区扣个1。