如何网站开发语言,wordpress文章随机缩略图,家装行业网站建设,企业网站内页设计模板随机森林
随机森林#xff08;Random Forest#xff09;是一种集成学习方法#xff0c;它通过构建多个决策树并结合它们的预测结果来进行分类或回归。
算法原理#xff1a;
决策树#xff08;Decision Tree#xff09;: 随机森林由多个决策树组成。决策树是一种基于树…随机森林
随机森林Random Forest是一种集成学习方法它通过构建多个决策树并结合它们的预测结果来进行分类或回归。
算法原理
决策树Decision Tree: 随机森林由多个决策树组成。决策树是一种基于树状结构的模型用于从一个特征空间映射到目标值的过程。在决策树中每个内部节点表示一个特征或属性每个分支代表一个可能的特征输出而每个叶节点代表一个类别或者数值。BaggingBootstrap Aggregating: 随机森林利用自助采样bootstrap sampling的方法从训练集中有放回地抽取若干个样本用于训练每棵决策树。这样可以保证每棵决策树的训练集略有不同增加了模型的多样性。随机特征选择: 在构建决策树的过程中每次选择分裂节点时只考虑特征集的一个随机子集。这个过程减少了各个决策树之间的相关性提高了模型的多样性。投票或平均: 在分类问题中随机森林通过投票的方式确定最终的分类结果在回归问题中随机森林通过平均各个决策树的预测值来得到最终的预测结果。
编程中可能用到的名词
n_estimators: 随机森林中决策树的数量。max_features: 每棵树在分裂节点时需要考虑的特征数量。min_samples_split: 内部节点再划分所需的最小样本数。criterion: 用于衡量分裂质量的准则可以是**“mse”均方误差或mae平均绝对误差**等。
评估方法
对于分类问题可以使用准确率accuracy、精确率precision、召回率recall等指标进行评估。对于回归问题可以使用均方误差Mean Squared ErrorMSE、均方根误差Root Mean Squared ErrorRMSE等指标进行评估。
优缺点
优点
随机森林能够处理高维数据并且不需要对数据进行特征缩放。在处理缺失值和异常值时表现较好。对于大量数据集随机森林能够有效地减小过拟合的风险。能够评估特征的重要性。
缺点
对噪声较大的数据敏感。不适合处理非常稀有的事件。在某些情况下随机森林可能会因为过多的树而导致计算开销较大。
可以使用的场景
随机森林适用于各种类型的数据包括分类和回归问题。适用于大规模数据集和高维数据。在特征具有不同重要性的情况下表现良好。通常用于金融、医疗、生物信息学等领域的预测建模。
RandomForestRegressor函数
参数
n_estimators: 随机森林中决策树的数量。criterion: 用于衡量分裂质量的准则可以是mse均方误差或mae平均绝对误差。max_depth: 决策树的最大深度。min_samples_split: 内部节点再划分所需的最小样本数。min_samples_leaf: 叶节点最少样本数。max_features: 寻找最佳分割点时要考虑的特征数量。n_jobs: 并行处理任务的数量。random_state: 控制随机性的种子。
确定参数的方法
n_estimators: 通常情况下增加决策树的数量能够提升模型的性能但会增加计算成本。开始时可以选择一个合适的初始值比如 100然后通过交叉验证等方法来调整。 criterion: 对于分类问题默认可以选择gini或者entropy作为衡量分裂质量的准则。在不确定时可以尝试使用交叉验证来选择最优的准则。 max_depth: 决策树的最大深度可以控制模型的复杂度。开始时可以设置一个较大的值然后通过验证曲线或者交叉验证来选择合适的深度以避免过拟合或者欠拟合。 random_state: 这个参数控制随机性设置了特定的值之后可以保证模型的可重复性。一般来说可以选择一个固定的种子值比如 42以便结果可以被重现。 min_samples_split: 控制一个节点需要分裂所需要的最小样本数可以通过交叉验证来选择合适的数值。 min_samples_leaf: 叶节点所需的最小样本数同样可以通过交叉验证来进行选择。 max_features: 控制每棵树在分裂节点时考虑的最大特征数量可以通过尝试不同的值来进行调整。 n_jobs: 用于指定训练时并行运行的作业数通常可以设为 -1 表示使用所有可用的 CPU。但是在资源受限的情况下可以适当调整这个值。
交叉验证
交叉验证是一种评估模型性能和进行参数调优的统计学方法。它通过将数据集划分为训练集和测试集反复使用数据的不同部分进行训练和测试以获得可靠的模型性能评估。
常见的交叉验证方法包括 K 折交叉验证K-fold cross-validation和留一交叉验证leave-one-out cross-validation
K 折交叉验证 将原始数据集分成 K 个子集其中一个子集被保留作为测试集其余 K-1 个子集用来训练模型。这个过程重复 K 次每个子集都有机会成为测试集。最后计算 K 次评估的平均值作为最终的性能指标。 留一交叉验证 留一交叉验证是 K 折交叉验证的一个特例其中 K 等于样本数。对于每一轮只留下一个样本作为测试集其余的样本作为训练集。然后计算每次迭代的性能指标并求平均值。
交叉验证可以帮助我们更充分地利用数据集降低训练结果对数据划分的依赖性同时能够更准确地评估模型在未见数据上的泛化能力。在模型选择和调参时交叉验证也能够帮助我们选择最优的超参数组合以避免模型在特定数据集上的过拟合或欠拟合。
交叉验证的方法
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import GridSearchCV, KFold
from sklearn.datasets import load_diabetes
import numpy as np# 加载糖尿病数据集diabetes load_diabetes()
X, y diabetes.data, diabetes.target# 定义参数网格
param_grid {n_estimators: [100, 200, 300],max_features: [1.0],max_depth : [10, 20, 30],n_jobs:[-1],criterion : [absolute_error, squared_error, poisson, friedman_mse] # 将 criterion 参数的取值修改为合法选项
}# 初始化随机森林回归器rf RandomForestRegressor()# 初始化交叉验证方法kfold KFold(n_splits5, shuffleTrue, random_state42)# 执行网格搜索grid_search GridSearchCV(rf, param_grid, cvkfold, scoringneg_mean_squared_error)
grid_search.fit(X, y)# 输出最佳参数和评分print(最佳参数, grid_search.best_params_)
print(最佳模型得分, grid_search.best_score_)这里采用的是K折交叉验证
这个代码会从我们选择的param_grid中选择最优的参数并且返回但是这个代码的运行速度极慢建议一个一个参数的进行测试不要所有参数一起测试
例子
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.datasets import load_diabetes
import numpy as np# 加载糖尿病数据集diabetes load_diabetes()
X, y diabetes.data, diabetes.target# 将数据集划分为训练集和测试集X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)# 定义参数网格param_grid {n_estimators: [100, 200, 300],max_features: [auto, sqrt, log2],max_depth : [10, 20, 30],min_samples_split: [2, 5, 10],min_samples_leaf: [1, 2, 4]
}# 初始化随机森林回归器rf RandomForestRegressor(random_state42)# 执行网格搜索grid_search GridSearchCV(rf, param_grid, cv5, scoringneg_mean_squared_error, n_jobs-1)
grid_search.fit(X_train, y_train)# 输出最佳参数print(最佳参数, grid_search.best_params_)# 在测试集上评估模型best_rf grid_search.best_estimator_
y_pred best_rf.predict(X_test)
mse mean_squared_error(y_test, y_pred)
print(在测试集上的均方误差, mse)首先我们导入需要的库包括RandomForestRegressor、GridSearchCV、train_test_split等加载糖尿病数据集并将数据集划分为训练集和测试集定义了一个参数网格param_grid包括了随机森林模型的各种参数及其可能的取值初始化了一个随机森林回归器rf使用GridSearchCV进行网格搜索和交叉验证寻找最佳的参数组合输出了最佳的参数组合并用这些参数在测试集上评估模型的性能计算并输出了均方误差MSE作为评估指标。
需要注意的是这个代码的运行时间较长
预测
假设我们有一组新的特征数据X_new需要进行预测可以像下面这样使用训练好的模型进行预测
# 假设有一组新的特征数据 X_new 需要进行预测
X_new np.array([[0.03906215, 0.05068012, 0.06169621, 0.02187235, -0.0442235,-0.03482076, -0.04340085, -0.00259226, 0.01990842, -0.01764613]])# 使用训练好的模型进行预测
predicted_y best_rf.predict(X_new)
print(预测的结果, predicted_y)