【scikit-learn基础】--『监督学习』之 随机森林分类
随机森林分类算法是一种基于集成学习(ensemble learning)的机器学习算法,
它的基本原理是通过对多个决策树的预测结果进行平均或投票,以产生最终的分类结果。
随机森林算法可用于回归和分类问题。
关于随机森林算法在回归问题上的应用可参考:TODO
随机森林分类算法可以应用于各种需要进行分类或预测的问题,如垃圾邮件识别、信用卡欺诈检测、疾病预测等,
它也可以与其他机器学习算法进行结合,以进一步提高预测准确率。
1. 算法概述
随机森林的基本原理是构建多棵决策树,每棵树都是基于原始训练数据的一个随机子集进行训练。在构建每棵树时,算法会随机选择一部分特征进行考虑,而不是考虑所有的特征。
然后,对于一个新的输入样本,每棵树都会进行分类预测,并将预测结果提交给“森林”进行最终的分类决策。
一般来说,森林会选择出现次数最多的类别作为最终的分类结果。
理论上来看,随机森林分类应该比决策树分类有更加好的准确度,特别是在高维度的数据情况下。
2. 创建样本数据
为了后面比较随机森林分类算法和决策树算法的准确性,创建分类多一些(8个分类标签)的样本数据。
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
# 分类数据的样本生成器
X, y = make_classification(
n_samples=1000, n_classes=8, n_clusters_per_class=2, n_informative=6
)
plt.scatter(X[:, 0], X[:, 1], marker="o", c=y, s=25)
plt.show()

3. 模型训练
首先,分割训练集和测试集。
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)
这次按照9:1的比例来划分训练集和测试集。
用决策树分类模型来训练数据:
from sklearn.tree import DecisionTreeClassifier
reg_names = [
"ID3算法",
"C4.5算法",
"CART算法",
]
# 定义
regs = [
DecisionTreeClassifier(criterion="entropy"),
DecisionTreeClassifier(criterion="log_loss"),
DecisionTreeClassifier(criterion="gini"),
]
# 训练模型
for reg in regs:
reg.fit(X_train, y_train)
# 在测试集上进行预测
y_preds = []
for reg in regs:
y_pred = reg.predict(X_test)
y_preds.append(y_pred)
for i in range(len(y_preds)):
correct_pred = np.sum(y_preds[i] == y_test)
print("决策树【{}】 预测正确率:{:.2f}%".format(reg_names[i], correct_pred / len(y_pred) * 100))
# 运行结果
决策树【ID3算法】 预测正确率:43.00%
决策树【C4.5算法】 预测正确率:42.00%
决策树【CART算法】 预测正确率:42.00%
用随机森林分类模型来训练数据:
from sklearn.ensemble import RandomForestClassifier
reg_names = [
"ID3算法",
"C4.5算法",
"CART算法",
]
# 定义
regs = [
RandomForestClassifier(criterion="entropy"),
RandomForestClassifier(criterion="log_loss"),
RandomForestClassifier(criterion="gini"),
]
# 训练模型
for reg in regs:
reg.fit(X_train, y_train)
# 在测试集上进行预测
y_preds = []
for reg in regs:
y_pred = reg.predict(X_test)
y_preds.append(y_pred)
for i in range(len(y_preds)):
correct_pred = np.sum(y_preds[i] == y_test)
print("随机森林【{}】 预测正确率:{:.2f}%".format(reg_names[i], correct_pred / len(y_pred) * 100))
# 运行结果
随机森林【ID3算法】 预测正确率:64.00%
随机森林【C4.5算法】 预测正确率:63.00%
随机森林【CART算法】 预测正确率:69.00%
可以看出,随机森林分类的准确性确实比决策树分类提高了。
不过,运行过程中也可以发现,随机森林的训练时间会比决策树长一些。
4. 总结
随机森林分类算法的优势在于:
- 抗过拟合能力强:由于采用随机选择特征的方式,可以有效地避免过拟合问题。
- 泛化能力强:通过对多个决策树的结果进行投票或平均,可以获得更好的泛化性能。
- 对数据特征的选取具有指导性:在构建决策树时会对特征进行选择,这可以为后续的特征选择提供指导。
- 适用于大规模数据集:可以有效地处理大规模数据集,并且训练速度相对较快。
当然,随机森林分类算法也存在一些劣势:
- 需要大量的内存和计算资源:由于需要构建多个决策树,因此需要更多的内存和计算资源。
- 需要调整参数:性能很大程度上取决于参数的设置,如树的数量、每个节点的最小样本数等,这些参数的设置需要一定的经验和实验。
- 对新样本的预测性能不稳定:由于是通过投票或平均多个决策树的结果来进行预测,因此对新样本的预测性能可能会受到影响。
【scikit-learn基础】--『监督学习』之 随机森林分类的更多相关文章
- 随机森林分类(Random Forest Classification)
其实,之前就接触过随机森林,但仅仅是用来做分类和回归.最近,因为要实现一个idea,想到用随机森林做ensemble learning才具体的来看其理论知识.随机森林主要是用到决策树的理论,也就是用决 ...
- 机器学习之路:python 集成分类器 随机森林分类RandomForestClassifier 梯度提升决策树分类GradientBoostingClassifier 预测泰坦尼克号幸存者
python3 学习使用随机森林分类器 梯度提升决策树分类 的api,并将他们和单一决策树预测结果做出对比 附上我的git,欢迎大家来参考我其他分类器的代码: https://github.com/l ...
- Python基础『一』
内置数据类型 数据名称 例子 数字: Bool,Complex,Float,Integer True/False; z=a+bj; 1.23; 123 字符串: String '123456' 元组: ...
- Python基础『二』
目录 语句,表达式 赋值语句 打印语句 分支语句 循环语句 函数 函数的作用 函数的三要素 函数定义 DEF语句 RETURN语句 函数调用 作用域 闭包 递归函数 匿名函数 迭代 语句,表达式 赋值 ...
- 机器学习实战基础(三十六):随机森林 (三)之 RandomForestClassifier 之 重要属性和接口
重要属性和接口 至此,我们已经讲完了所有随机森林中的重要参数,为大家复习了一下决策树的参数,并通过n_estimators,random_state,boostrap和oob_score这四个参数帮助 ...
- [Machine Learning & Algorithm] 随机森林(Random Forest)
1 什么是随机森林? 作为新兴起的.高度灵活的一种机器学习算法,随机森林(Random Forest,简称RF)拥有广泛的应用前景,从市场营销到医疗保健保险,既可以用来做市场营销模拟的建模,统计客户来 ...
- Python机器学习笔记——随机森林算法
随机森林算法的理论知识 随机森林是一种有监督学习算法,是以决策树为基学习器的集成学习算法.随机森林非常简单,易于实现,计算开销也很小,但是它在分类和回归上表现出非常惊人的性能,因此,随机森林被誉为“代 ...
- 随机森林(Random Forest)
阅读目录 1 什么是随机森林? 2 随机森林的特点 3 随机森林的相关基础知识 4 随机森林的生成 5 袋外错误率(oob error) 6 随机森林工作原理解释的一个简单例子 7 随机森林的Pyth ...
- 随机森林(Random Forest),决策树,bagging, boosting(Adaptive Boosting,GBDT)
http://www.cnblogs.com/maybe2030/p/4585705.html 阅读目录 1 什么是随机森林? 2 随机森林的特点 3 随机森林的相关基础知识 4 随机森林的生成 5 ...
- [Machine Learning & Algorithm] 随机森林(Random Forest)-转载
作者:Poll的笔记 博客出处:http://www.cnblogs.com/maybe2030/ 阅读目录 1 什么是随机森林? 2 随机森林的特点 3 随机森林的相关基础知识 4 随机森林的生成 ...
随机推荐
- 两种方式,创建有返回值的DB2函数
函数场景:路径信息由若干个机构编码组成,且一个机构编码是9位字符. 要求:获取路径信息,并且删除路径中包含'99'开头的机构编码. 从客户端及服务器端分别创建ignore99(pathinfo var ...
- Oracle中的substr()函数和INSTR()函数和mysql中substring_index函数字符截取函数用法:计算BOM系数用量拼接字符串*计算值方法
最近一直在研究计算产品BOM的成本系数,将拼接的元件用量拼接后拆分计算是个问题,后来受到大佬在mysql中截取字符串的启发在oracle中以substr和instr实现了 1.以下是我在mysql中 ...
- Arduino Uno Rev3
Overview Arduino Uno is a microcontroller board based on the ATmega328P (datasheet). It has 14 digit ...
- Java虚拟机(JVM):第三幕:自动内存管理 - 垃圾收集器与内存分配策略
前言:Java与C++之间有一堵高墙,主要是有内存动态分配和垃圾收集技术组成的.墙外的人想要进来,墙内的人想要出去. 一.概述 每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的.内存的分配和 ...
- 【Unity3D】水面特效
1 前言 水波特效 中通过屏幕后处理实现了环形水波效果,本文通过 Shader Graph 实现了模拟水面特效,包含以下特效细节.Shader Graph 基础知识详见→Shader Graph简 ...
- [ABC201E] Xor Distances 题解
Xor Distances 题目大意 给定一颗带边权无根树,定义 \(\text{dis}(i,j)\) 表示 \(i,j\) 两点在树上的最短路径的边权的异或和.求: \[\sum_{i=1}^n\ ...
- Godot引擎的一些踩坑记录(不断更新中)
版本号 Godot 3.1.2 文件夹名称使用小写.编译\导出时有的tscn文件的引用路径, 有可能会变成小写路径(怀疑是bug),导致启动失败. ttc字体(文泉驿微米黑)导出时需要手动设置包含*. ...
- 计算网络之MSTP协议与VRRP协议
一.MSTP协议 MSTP协议出现是基于STP协议和RSTP协议的,要了解MSTP协议就需要先了解其它两个协议 首先,STP协议是交换机生成树协议,它的出现主要是为了解决二层交换机环路的问题,当多个交 ...
- C/C++ 常用加密与解密算法
计算机安全和数据隐私是现代应用程序设计中至关重要的方面.为了确保数据的机密性和完整性,常常需要使用加密和解密算法.C++是一种广泛使用的编程语言,提供了许多加密和解密算法的实现.本文将介绍一些在C++ ...
- salesforce零基础学习(一百三十四)State And Country/Territory Picklists启用后的趣事
本篇参考: https://help.salesforce.com/s/articleView?id=sf.admin_state_country_picklists_overview.htm& ...