本次修炼方法请往下查看
🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地!
🎇 免费获取相关内容文档关注:微信公众号,发送 pandas 即可获取
🎇 相关内容视频讲解 B站
🎓 博主简介:AI算法驯化师,混迹多个大厂搜索、推荐、广告、数据分析、数据挖掘岗位 个人申请专利40+,熟练掌握机器、深度学习等各类应用算法原理和项目实战经验。
🔧 技术专长: 在机器学习、搜索、广告、推荐、CV、NLP、多模态、数据分析等算法相关领域有丰富的项目实战经验。已累计为求职、科研、学习等需求提供近千次有偿|无偿定制化服务,助力多位小伙伴在学习、求职、工作上少走弯路、提高效率,近一年好评率100% 。
📝 博客风采: 积极分享关于机器学习、深度学习、数据分析、NLP、PyTorch、Python、Linux、工作、项目总结相关的实用内容。
🎯 1. 基本介绍
随机森林(Random Forest)是一种集成学习方法,它通过构建多个决策树并将它们的预测结果结合起来,以提高模型的准确性和鲁棒性。在scikit-learn中,随机森林模型通过RandomForestClassifier(用于分类)和RandomForestRegressor(用于回归)类实现。
💡 2. 原理介绍
随机森林是基于bagging框架下的决策树模型,随机森林包含了很多树,每棵树给出分类结果,每棵树的生成规则如下:
(1)如果训练集大小为N,对于每棵树而言,随机且有放回地从训练中抽取N个训练样本,作为该树的训练集,重复K次,生成K组训练样本集。
(2)如果每个特征的样本维度为M,指定一个常数m<<M,随机地从M个特征中选取m个特征。
(3) 利用m个特征对每棵树尽最大程度的生长,并且没有剪枝过程。
具体的可视化流程如下所示:
🔍 3. 代码实践
3.1 RF分类器
同样的我们通过sklearn中自带的莺尾花分类器数据来做为我们实践tf模型的基本数据,具体的代码流程如下所示:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# 加载iris数据集
iris = load_iris()
X, y = iris.data, iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建随机森林分类器实例
rf_classifier = RandomForestClassifier(n_estimators=100, random_state=42)
# 训练模型
rf_classifier.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = rf_classifier.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"准确率: {accuracy:.2f}")
3.1 RF回归器
同样的我们通过sklearn中自带的莺尾花分类器数据来做为我们实践tf模型的基本数据,具体的代码流程如下所示:
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, r2_score
# 生成模拟回归数据
X, y = make_regression(n_samples=1000, n_features=10, noise=0.1, random_state=42)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建随机森林回归器实例
rf_regressor = RandomForestRegressor(n_estimators=100, random_state=42)
# 训练模型
rf_regressor.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = rf_regressor.predict(X_test)
# 计算MSE和R²
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"均方误差(MSE): {mse:.2f}")
print(f"R²分数: {r2:.2f}")
🔍 4. 高阶用法
在使用sklearn中的rf函数进行分类和回归时,我们需要注意一些常用的参数,具体的为:
n_estimators:
随机森林中的决策树数量。默认为100。增加决策树数量可以提高模型性能,但会增加计算开销。criterion:
选择划分特征的衡量指标。可选的值包括"gini"和"entropy",默认为"gini"。基尼系数(gini)和信息熵(entropy)都是用来衡量划分的纯度,选择哪个衡量指标取决于具体问题。
-max_depth:
决策树的最大深度。用于控制决策树的复杂度和防止过拟合。默认为None,表示不限制决策树的深度。min_samples_split:
拆分内部节点所需的最小样本数。如果某个内部节点的样本数小于该值,则不会再划分。默认为2。
-min_samples_leaf:
叶节点所需的最小样本数。如果某个叶节点的样本数小于该值,则该叶节点会被剪枝,合并到其他叶节点上。默认为1。
-max_features:
寻找最佳划分特征时要考虑的特征数量。可以是整数(表示考虑的特征数量)或浮点数(表示考虑特征比例)。默认为"auto",表示考虑所有特征。
-random_state:
随机种子。用于控制每次训练结果的随机性。默认为None。
-class_weight:
类别权重。可以设置为"class_weight=‘balanced’"来自动调整各个类别的权重,以解决类别不平衡问题。
🔍 5. 注意事项
- n_estimators参数控制着随机森林中决策树的数量,增加树的数量可以提高模型的准确性,但也会增加计算成本。
- 随机森林模型对特征的缩放不敏感,但在某些情况下,特征标准化可能有助于提高模型性能。
- 随机森林模型可能会过拟合,特别是当树的数量过多或单个树的深度过大时。可以通过设置max_depth参数来限制树的最大深度。
🔍 6. 总结
随机森林是一种强大的集成学习算法,它通过组合多个决策树的预测结果来提高模型的准确性和鲁棒性。scikit-learn提供了易于使用的随机森林实现,适用于分类和回归任务。通过本博客的代码示例,我们学习了如何创建随机森林模型,进行训练、预测和评估。希望这篇博客能够帮助你更好地理解随机森林模型,并将其应用于实际的机器学习问题中。