随机森林回归(Random Forest Regression
)是一种在机器学习领域广泛应用的算法,由美国科学家 Leo Breiman 在2001年提出。
它是一种集成学习方法,通过整合多个决策树的预测结果来提高预测精度和稳定性。
随机森林回归适用于各种需要预测连续数值输出的问题,
如金融领域的股票价格预测、客户信用评分,医疗领域的疾病诊断和药物发现等。
随机森林回归算法通过引入随机性来构建多个决策树,再通过对这些树的预测结果进行平均或投票来得出最终的预测结果。
这里的随机性主要体现在两个方面:一是训练样本的随机选取,二是在训练过程中特征的随机选取。
随机森林的算法过程并不复杂,主要的步骤如下:
上面第一,第二步骤中的随机性就是随机森林这个名称的由来。
这次的回归样本数据,我们用 scikit-learn
自带的样本生成器来生成回归样本。
关于样本生成器的内容,可以参考:TODO
from sklearn.datasets import make_regression # 回归样本生成器 X, y = make_regression(n_features=4, n_informative=2)
每个样本有4个特征。
训练之前,为了减少算法误差,先对数据进行标准化处理。
from sklearn import preprocessing as pp # 数据标准化 X = pp.scale(X) y = pp.scale(y)
接下来分割训练集和测试集。
from sklearn.model_selection import train_test_split # 分割训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)
然后用scikit-learn
中的RandomForestRegressor
模型来训练:
from sklearn.ensemble import RandomForestRegressor # 定义随机森林回归模型 reg = RandomForestRegressor(max_depth=2) # 训练模型 reg.fit(X_train, y_train) # 在测试集上进行预测 y_pred = reg.predict(X_test)
RandomForestRegressor
的主要参数包括:
最后验证模型的训练效果:
from sklearn import metrics # 在测试集上进行预测 y_pred = reg.predict(X_test) mse, r2, m_error = 0.0, 0.0, 0.0 y_pred = reg.predict(X_test) mse = metrics.mean_squared_error(y_test, y_pred) r2 = metrics.r2_score(y_test, y_pred) m_error = metrics.median_absolute_error(y_test, y_pred) print("均方误差:{}".format(mse)) print("复相关系数:{}".format(r2)) print("中位数绝对误差:{}".format(m_error)) # 运行结果 均方误差:0.0918182629293023 复相关系数:0.9137032593574914 中位数绝对误差:0.17199566634564867
从预测的误差来看,训练的效果非常好。
有同样的数据试了下上一篇介绍的决策树回归算法,发现还是随机森林回归的效果要好一些。
决策数回归的模型效果:
from sklearn.tree import DecisionTreeRegressor from sklearn import metrics # 定义决策树回归模型 reg = DecisionTreeRegressor(max_depth=2) # 训练模型 reg.fit(X_train, y_train) # 在测试集上进行预测 y_pred = reg.predict(X_test) mse, r2, m_error = 0.0, 0.0, 0.0 y_pred = reg.predict(X_test) mse = metrics.mean_squared_error(y_test, y_pred) r2 = metrics.r2_score(y_test, y_pred) m_error = metrics.median_absolute_error(y_test, y_pred) print("均方误差:{}".format(mse)) print("复相关系数:{}".format(r2)) print("中位数绝对误差:{}".format(m_error)) # 运行结果 均方误差:0.1681399575883647 复相关系数:0.8419711956126009 中位数绝对误差:0.36483491370039456
从运行结果来看,决策树回归的误差比随机森林回归要大不少。
随机森林回归算法的优势主要在于可以有效地处理大量的输入变量,并且可以处理非线性关系和交互作用,
同时 ,由于它是集成学习方法,所以可以有效地减少过拟合和欠拟合的问题,提高预测的准确性。
此外,在训练过程中,它可以自动进行特征选择和降维,帮助找到最重要的特征,
还可以处理缺失值和异常值,不需要进行特殊的数据预处理。
然而,随机森林回归算法也有一些劣势,
首先,它的训练过程相对较慢,尤其是在数据集较大或特征维度较高的情况下;
其次,在某些情况下,它可能过于依赖输入数据的随机性,导致预测结果的不稳定。
此外,随机森林算法在处理那些需要精确控制的问题时可能效果不佳。