【scikit-learn底子】--『监视学习』之 随机森林分类

[复制链接]
发表于 2025-9-22 21:46:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
随机森林分类算法是一种基于集成学习(ensemble learning)的呆板学习算法,
它的根本原理是通过对多个决议树的猜测效果举行均匀或投票,以产生终极的分类效果。
随机森林算法可用于回归和分类题目。
关于随机森林算法在回归题目上的应用可参考:TODO
随机森林分类算法可以应用于各种须要举行分类或猜测的题目,如垃圾邮件辨认、名誉卡诓骗检测、疾病猜测等,
它也可以与其他呆板学习算法举行联合,以进一步进步猜测正确率。
1. 算法概述

随机森林的根本原理是构建多棵决议树,每棵树都是基于原始练习数据的一个随机子集举行练习。在构建每棵树时,算法会随机选择一部门特性举行思量,而不是思量全部的特性。
然后,对于一个新的输入样本,每棵树都会举行分类猜测,并将猜测效果提交给“森林”举行终极的分类决议。
一样平常来说,森林会选择出现次数最多的种别作为终极的分类效果。
理论上来看,随机森林分类应该比决议树分类有更加好的正确度,特别是在高维度的数据环境下。
2. 创建样本数据

为了背面比力随机森林分类算法和决议树算法的正确性,创建分类多一些(8个分类标签)的样本数据。
  1. import matplotlib.pyplot as plt
  2. from sklearn.datasets import make_classification
  3. # 分类数据的样本生成器
  4. X, y = make_classification(
  5.     n_samples=1000, n_classes=8, n_clusters_per_class=2, n_informative=6
  6. )
  7. plt.scatter(X[:, 0], X[:, 1], marker="o", c=y, s=25)
  8. plt.show()
复制代码

3. 模子练习

起首,分割练习集和测试集。
  1. from sklearn.model_selection import train_test_split
  2. # 分割训练集和测试集
  3. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)
复制代码
这次按照9:1的比例来分别练习集和测试集。
用决议树分类模子来练习数据:
  1. from sklearn.tree import DecisionTreeClassifier
  2. reg_names = [
  3.     "ID3算法",
  4.     "C4.5算法",
  5.     "CART算法",
  6. ]
  7. # 定义
  8. regs = [
  9.     DecisionTreeClassifier(criterion="entropy"),
  10.     DecisionTreeClassifier(criterion="log_loss"),
  11.     DecisionTreeClassifier(criterion="gini"),
  12. ]
  13. # 训练模型
  14. for reg in regs:
  15.     reg.fit(X_train, y_train)
  16. # 在测试集上进行预测
  17. y_preds = []
  18. for reg in regs:
  19.     y_pred = reg.predict(X_test)
  20.     y_preds.append(y_pred)
  21. for i in range(len(y_preds)):
  22.     correct_pred = np.sum(y_preds[i] == y_test)
  23.     print("决策树【{}】 预测正确率:{:.2f}%".format(reg_names[i], correct_pred / len(y_pred) * 100))
  24. # 运行结果
  25. 决策树【ID3算法】 预测正确率:43.00%
  26. 决策树【C4.5算法】 预测正确率:42.00%
  27. 决策树【CART算法】 预测正确率:42.00%
复制代码
用随机森林分类模子来练习数据:
  1. from sklearn.ensemble import RandomForestClassifier
  2. reg_names = [
  3.     "ID3算法",
  4.     "C4.5算法",
  5.     "CART算法",
  6. ]
  7. # 定义
  8. regs = [
  9.     RandomForestClassifier(criterion="entropy"),
  10.     RandomForestClassifier(criterion="log_loss"),
  11.     RandomForestClassifier(criterion="gini"),
  12. ]
  13. # 训练模型
  14. for reg in regs:
  15.     reg.fit(X_train, y_train)
  16. # 在测试集上进行预测
  17. y_preds = []
  18. for reg in regs:
  19.     y_pred = reg.predict(X_test)
  20.     y_preds.append(y_pred)
  21. for i in range(len(y_preds)):
  22.     correct_pred = np.sum(y_preds[i] == y_test)
  23.     print("随机森林【{}】 预测正确率:{:.2f}%".format(reg_names[i], correct_pred / len(y_pred) * 100))
  24. # 运行结果
  25. 随机森林【ID3算法】 预测正确率:64.00%
  26. 随机森林【C4.5算法】 预测正确率:63.00%
  27. 随机森林【CART算法】 预测正确率:69.00%
复制代码
可以看出,随机森林分类的正确性确实比决议树分类进步了。
不外,运行过程中也可以发现,随机森林的练习时间会比决议树长一些。
4. 总结

随机森林分类算法的上风在于:

  • 抗过拟合本领强:由于接纳随机选择特性的方式,可以有效地制止过拟合题目。
  • 泛化本领强:通过对多个决议树的效果举行投票或均匀,可以得到更好的泛化性能。
  • 对数据特性的选取具有引导性:在构建决议树时会对特性举行选择,这可以为后续的特性选择提供引导。
  • 适用于大规模数据集:可以有效地处理大规模数据集,而且练习速率相对较快。
当然,随机森林分类算法也存在一些劣势:

  • 须要大量的内存和计算资源:由于须要构建多个决议树,因此须要更多的内存和计算资源。
  • 须要调解参数:性能很大程度上取决于参数的设置,如树的数量、每个节点的最小样本数等,这些参数的设置须要肯定的履历和实验。
  • 对新样本的猜测性能不稳固:由于是通过投票或均匀多个决议树的效果来举行猜测,因此对新样本的猜测性能大概会受到影响。
 

关注灵活就业新业态,相识更多程序员兼职项目,关注公账号:贤才宝(贤才宝https://www.51xcbw.com) 
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表