随机森林回归模型与特征选择实战
创作时间:
作者:
@小白创作中心
随机森林回归模型与特征选择实战
引用
CSDN
1.
https://blog.csdn.net/Mdaying/article/details/137092247
随机森林回归模型是一种基于集成学习的机器学习方法,通过构建多个决策树并综合其预测结果来提高模型的准确性和稳定性。本文将介绍如何使用随机森林回归模型和递归特征消除(RFECV)进行特征选择和预测,包括数据预处理、模型训练、特征重要性评估和结果可视化等关键步骤。
概要
在本项目中,我们探讨了如何利用随机森林回归模型和递归特征消除(RFECV)来选择特征,并预测数据集中的目标变量。这个过程涉及到数据预处理,模型训练,特征重要性评估,以及最终的结果可视化。
整体架构流程
数据处理和分析的整个流程分为几个主要部分:
- 数据清洗:处理缺失值和非数值错误。
- 特征选择:使用RFECV方法选择最重要的特征。
- 模型训练:使用随机森林回归器对数据进行拟合。
- 结果可视化:通过图形展示不同特征数量对应的模型性能。
技术名词解释
- 随机森林(Random Forest):一个由多个决策树构成的集成学习方法,用于分类和回归。
- 递归特征消除(Recursive Feature Elimination, RFECV):一种特征选择方法,通过递归减少特征量来选择最重要的特征。
- KFold:交叉验证方法之一,将数据集分成K个子集,进行多次训练和验证。
技术细节
在本代码中,我们使用了
RandomForestRegressor
作为基础估计器,并通过
RFECV
实施了特征选择。
KFold(5)
定义了5折交叉验证过程。
import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestRegressor
from sklearn.feature_selection import RFECV
from sklearn.model_selection import KFold
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data_path = '特征变量1.csv'
data = pd.read_csv(data_path)
# 替换 '#DIV/0!' 错误为NaN,并填充缺失值
data_cleaned = data.replace('#DIV/0!', np.nan).astype(float)
data_cleaned = data_cleaned.fillna(data_cleaned.mean())
# 准备数据
X_clean = data_cleaned.drop('incident_test', axis=1)
y_clean = data_cleaned['incident_test']
# 初始化随机森林回归器
rf_regressor = RandomForestRegressor(random_state=42)
# 使用RFECV进行递归特征消除,采用KFold
rfecv_regressor = RFECV(estimator=rf_regressor, step=1, cv=KFold(5), scoring='neg_mean_squared_error', min_features_to_select=1)
rfecv_regressor.fit(X_clean, y_clean)
# 获取特征重要性并排序
feature_importances_corrected = rfecv_regressor.estimator_.feature_importances_
sorted_idx_corrected = np.argsort(feature_importances_corrected)[::-1]
# 绘制修正后的特征重要性累计贡献图
plt.figure(figsize=(10, 6))
plt.bar(range(len(feature_importances_corrected)), feature_importances_corrected[sorted_idx_corrected])
plt.xlabel('特征(排序后)')
plt.ylabel('特征重要性')
plt.title('特征重要性累计贡献图')
plt.show()
# 绘制特征累计重要性图
cumulative_importances_corrected = np.cumsum(feature_importances_corrected[sorted_idx_corrected])
plt.figure(figsize=(10, 6))
plt.plot(range(len(feature_importances_corrected)), cumulative_importances_corrected, 'b-')
plt.xlabel('特征数量(排序后)')
plt.ylabel('累计重要性')
plt.title('特征累计重要性图')
plt.hlines(y=0.95, xmin=0, xmax=len(feature_importances_corrected), color='r', linestyles='dashed')
plt.show()
# 初始化随机森林回归器
rf_regressor = RandomForestRegressor(random_state=42)
rfecv_regressor = RFECV(estimator=rf_regressor, step=1, cv=KFold(5), scoring='neg_mean_squared_error', min_features_to_select=1)
rfecv_regressor.fit(X_clean, y_clean)
cv_scores = rfecv_regressor.cv_results_['mean_test_score']
# 绘制柱状图
plt.figure(figsize=(10, 6))
plt.bar(range(1, len(cv_scores) + 1), cv_scores)
plt.xlabel('特征数量')
plt.ylabel('交叉验证得分(均方误差)')
plt.title('特征数量与模型预测精度的关系')
plt.xticks(range(1, len(cv_scores) + 1)) # 确保每个条形都有一个刻度
plt.tight_layout() # 确保中文标题显示完整
plt.show()
# 列出每个特征个数对应的特征
features_per_count = {}
for i in range(1, len(rfecv_regressor.support_) + 1):
features_per_count[i] = list(X_clean.columns[rfecv_regressor.ranking_ <= i])
print(features_per_count)
小结
热门推荐
狗狗的怀孕周期和繁殖特点(了解狗狗的生育周期和繁殖行为,让你的爱宠健康繁衍)
人生若寄,憔悴有时。20句哲理诗词:读罢,瞬间顿悟、不再迷茫
脑梗引起老年痴呆吗
2-5年车龄的二手车性价比最高,如何选购?
促進語言發展的策略:平行對話
清朝实行剃发令是满化的体现,但最后在一定程度上仍然被汉化
零失败的五香花生米(微波炉版)
卜算子春风古诗,元日的古诗中有哪些春意?
仆固怀恩:忠诚与背叛之间的历史评价
中等职业学校计算机网络信息安全专业课程的设置与实施方案
四季茶花的养殖与养护(让茶花在四季绽放,从栽培到养护全攻略)
项目经理如何制作树形图
项目经理如何制作树型图
自行车安全帽选购指南:从入门到专业,一文详解选购要点和使用注意事项
天坛医院江涛院士团队成立国内首个胶质瘤前沿创新治疗门诊
谷胱甘肽:增强免疫力的关键角色
“如何营造氛围”文章写作法36例,让你成为高手
鱼摆件摆放风水 鱼类摆件摆放位置图
春节节日活动
荆轲刺秦:一场被误解的劫持行动
风清扬遇到的三位高手,都是谁?一个是和尚还俗,两个是倚天高手
网上配眼镜靠谱吗?配镜时有什么要注意?
科技创新企业发展培育的“佛山模式”
牛奶与抗生素同时服用,是“强强联合”还是“相互伤害”?
“黄灯”新规来了,违章将被罚200,甚至扣6分,已有不少车主中招
艾草:随处可得的中药“明星”
TNC草地保护案例 | 可持续放牧管理
成都樱花大道游玩攻略(路线+交通指南)
形态多样、机能特化的人体肌肉
原油暴跌的原因是什么?原油价格下跌对全球经济有何影响?