赞
踩
随机森林回归(Random Forest Regression)是一种集成学习方法,基于多棵决策树的组合来进行预测。它通过引入随机性来构建多棵独立的决策树,并将这些树的预测结果进行平均,从而提升模型的泛化能力并降低过拟合的风险。
随机森林回归的核心思想是通过引入两种随机性来创建一个强大的预测模型:
(1)样本抽取: 从原始数据集中有放回地随机抽取多个样本,生成多个子数据集。
样本抽取公式:
其中 是第 个子数据集的样本索引集合。
(2)决策树构建: 对于每个子数据集,使用决策树算法构建回归树。在每个节点分裂时,随机选择一部分特征,选择最佳特征进行分裂。
特征选择公式:
(3)集成预测: 所有树训练完成后,对新输入的数据点,分别使用每棵决策树进行预测,然后对所有预测结果进行平均,得到最终的预测值。
最终预测公式:
其中, 是第 棵决策树的预测结果。
随机森林回归的基本公式包括:
(1)样本抽取: 从原始数据集中有放回地随机抽取样本生成子数据集:
其中:
(2)决策树的训练: 对于每棵决策树,利用随机抽取的特征集合进行分裂,生成回归树。 特征选择:
其中:
(3)最终预测: 对于新数据点的预测结果是所有决策树预测结果的平均值:
其中:
优点:
缺点:
我们将通过一个具体的案例来展示如何使用随机森林回归进行预测,并对结果进行详细分析。
我们使用加利福尼亚州房价数据集(California Housing Dataset)进行回归预测。
- from sklearn.datasets import fetch_california_housing
- from sklearn.model_selection import train_test_split
- from sklearn.ensemble import RandomForestRegressor
- from sklearn.metrics import mean_squared_error, r2_score
-
- # 加载加利福尼亚州房价数据集
- housing = fetch_california_housing()
- X, y = housing.data, housing.target
-
- # 将数据集划分为训练集和测试集
- X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
解释:
我们使用 RandomForestRegressor
进行模型训练,并对测试集进行预测。
- # 定义随机森林回归模型
- rfr = RandomForestRegressor(n_estimators=100, random_state=42)
-
- # 训练模型
- rfr.fit(X_train, y_train)
-
- # 对测试集进行预测
- y_pred = rfr.predict(X_test)
解释:
RandomForestRegressor
是随机森林回归的实现,我们指定 n_estimators=100
来训练 100 棵决策树。我们使用均方误差(MSE)和决定系数()来评估模型的性能。
- # 计算均方误差 (MSE) 和决定系数 (R²)
- mse = mean_squared_error(y_test, y_pred)
- r2 = r2_score(y_test, y_pred)
-
- print("均方误差 (MSE):", mse)
- print("决定系数 (R²):", r2)
输出:
- 均方误差 (MSE): 0.2553684927247781
- 决定系数 (R²): 0.8051230593157366
解释:
随机森林还可以用于评估特征的重要性。我们可以输出每个特征的重要性得分,并进行可视化展示。
- import matplotlib.pyplot as plt
- import numpy as np
-
- # 输出特征重要性
- importances = rfr.feature_importances_
- indices = np.argsort(importances)[::-1]
-
- # 打印每个特征的重要性
- for f in range(X.shape[1]):
- print(f"特征 {f + 1}: {housing.feature_names[indices[f]]} ({importances[indices[f]]})")
-
- # 可视化特征重要性
- plt.figure()
- plt.title("Feature Importances")
- plt.bar(range(X.shape[1]), importances[indices], align="center")
- plt.xticks(range(X.shape[1]), [housing.feature_names[i] for i in indices], rotation=90)
- plt.xlim([-1, X.shape[1]])
- plt.show()
输出:
- 特征 1: MedInc (0.5248714775266793)
- 特征 2: AveOccup (0.1384428140532659)
- 特征 3: Latitude (0.08893574160843591)
- 特征 4: Longitude (0.08862881090121001)
- 特征 5: HouseAge (0.05459321807686177)
- 特征 6: AveRooms (0.04427184750632705)
- 特征 7: Population (0.030649781480378356)
- 特征 8: AveBedrms (0.0296063088468417)
解释:
我们还可以通过绘制预测值与实际值的散点图,来进一步验证模型的表现。
- # 绘制预测值与实际值的散点图
- plt.scatter(y_test, y_pred, color="blue", alpha=0.5)
- plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'r--', lw=2)
- plt.xlabel("Actual")
- plt.ylabel("Predicted")
- plt.title("Random Forest Regression: Actual vs Predicted")
- plt.show()
可视化解释:
为了进一步提升模型性能,我们可以通过网格搜索(Grid Search)来调优随机森林的超参数,如树的数量(n_estimators
)、最大深度(max_depth
)等。
- from sklearn.model_selection import GridSearchCV
-
- # 定义参数网格
- param_grid = {
- 'n_estimators': [50, 100, 200],
- 'max_depth': [None, 10, 20],
- 'min_samples_split': [2, 5, 10],
- 'min_samples_leaf': [1, 2, 4],
- 'bootstrap': [True, False]
- }
-
- # 实例化随机森林回归模型
- rfr = RandomForestRegressor(random_state=42)
-
- # 进行网格搜索
- grid_search = GridSearchCV(estimator=rfr, param_grid=param_grid, cv=5, scoring='neg_mean_squared_error', n_jobs=-1)
- grid_search.fit(X_train, y_train)
-
- # 输出最佳参数
- print("最佳参数:", grid_search.best_params_)
解释:
随机森林回归是一种强大的回归算法,通过结合多棵决策树的预测结果来提升模型的性能。它能够有效处理高维数据,并具有较强的抗过拟合能力。通过合理调优模型的参数,随机森林回归可以在各种回归任务中表现出色。尽管计算复杂度较高,但其强大的泛化能力和稳定性使其成为许多回归任务中的首选算法之一。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。