基于sklearn随机森林算法对鸢尾花数据进行分类

简介: 基于sklearn随机森林算法对鸢尾花数据进行分类

随机森林定义

随机森林(Random Forest,RF),顾名思义就是将多棵相互之间并无关联的决策树整合起来形成一个森林,再通过各棵树投票或取均值来产生最终结果的分类器。在介绍随机森林前需要了解几个概念:Bootstrap 自助抽样法、Bagging 套袋法和 Boosting 提升法。


       Bootstrap 是一种抽样方法,即采取随机有放回的方式采样数据,也就是每次抽取一个样本,再将其放回样本集中,下次还有可能抽到这个样本;而每轮中未抽到的数据组合起来,形成袋外数据集(Out of Band, OOB),用来在模型中做测试集。Bangging 和 Boosting 都是一种集成学习的方法,但两者有一些区别。Bagging 算法使用 Bootstrap 方法从原始样本集中随机不一定有放回的抽取n个样本,共抽取k轮,得到k个独立的训练集,元素可能有重复。每个训练集训练一个模型,得到k个结果,分类问题则从结果中取多数值作为最终结果,回归问题则取平均值作为最终结果。Boosting 则是对每个训练样本设立一个权值,被错分的样本在下一轮分类中会有更大的权值,也就是说,每轮样本相同但样本权重不同;对于分类器来说,分类误差小的拥有更大权值,分类误差大的相应权值更小。


       随机森林采取的就是 bagging 方法,它将决策树用作 bagging 后的子分类模型。首先,对原始数据集使用 bootstrap 随机抽样的方法生成多个子训练集和相应的测试集,每个子训练集都构造一颗独立的决策树。其次,在构造决策树时,随机森林并不是在所有特征中找到性能最佳的特征进行分类,而是随机抽取一部分特征,在抽到的特征中间找到最优解应用于树节点进行分裂,这也是随机森林中两个关键随机步骤。最后由每个决策树投票产生最终的分类结果。随机森林由于有了 bagging,也就是集成的思想在,实际上相当于对样本和特征都进行了随机采样,所以可以避免过拟合。Bagging 策略过程如图(a)所示,随机森林过程如图(b)所示。  

随机森林构建过程

  随机森林的构建过程用文字表述大致如下:假设原始样本集 D(X,Y),样本个数 n,要建立 k 棵树。


1) 抽取样本集:从原始训练集中随机有放回地抽取n个样本(子训练集)并重复n次,每一个样本被抽中的概率均为1/n。被剩下的样本组成袋外数据集(OOB),作为最终的测试集。


2) 抽取特征:从总数为 M 的特征集合中随意抽取m个组成特征子集,其中m<M。


3) 特征选择:计算节点数据集中每个特征对该数据集的基尼指数,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点(一般方法有 ID3、CART 和信息增益率),从节点生成两个子节点,将剩余训练数据分配到两个子节点中。


4) 生成 CART 决策树:在每个子节点的样本子集中重复执行3)步骤,递归地进行节点分割,直到生成所有叶节点。


5) 随机森林:重复执行(2)~(4),得到k棵不同的决策树。


6) 测试数据:每一棵决策树都对测试集中的每一条数据进行分类,统计 k 个分类结果,票数最多的类别,即为该样本的最终类别。


随机森林算法评价

       随机森林相比于传统的分类算法在分类进度上要更进一步,其次,在其他方面也有着不小的优势:


1)随机森林通过抽取不同的训练集以及随机抽取特征进行训练的方式,来达到增加分类模型间差异的目的,最终结果由彼此之间并无相关性的多棵决策树共同决定,可以很好地避免决策树分类中的过拟合问题。并且计算精度较决策树有很大提升。


2)Bagging方法产生的袋外数据集OOB可以用来做测试集,也可以做OOB估计计算出单个变量的重要程度,以此来测算模型的泛化误差。


3)随机森林一般采用 CART 作为分割特征方法,因此,随机森林可以灵活地处理连续变量或离散变量,同时不需要对变量值做归一化,大大减少了数据处理的步骤。


4)随机抽取样本和随机选取特征值是随机森林算法最大的特征之一,因此,算法能很好地容忍异常值和缺失值,避免个别差值对模型造成过大影响。


5)随机森林算法在训练过程中产生的多棵决策树之间并无关联性,因此算法非常适合在并行环境下运行,加入并行计算框架可以大大减少大体量数据集的训练时间。


       尽管随机森林优势如此明显,但是该算法在特殊的应用场景下仍然有一些劣势,如医学数据、基金信贷数据等,这类数据有两个很大的特点:特征非常多且易缺失、不同种类数据量相差悬殊。第一,算法的分类思想是少数服从多数,因此在面对类别样本数相差悬殊的数据集时,容易将少数类归为多数类,造成很高的假分类精度;第二,过多的冗余特征会扰乱模型的学习能力,导致模型过拟合,限制了模型的普适性。因此,算法在这两点上有很大的改进空间。    


随机森林算法的发展现状及趋势    

       随机森林算法采用多分类器投票的策略,本身能很好地避免过拟合问题,其中两次典型的抽样过程也使得随机森林相对于传统分类器,在解决特征冗余和过拟合问题方面有更好表现。然而,当不平衡率增加(例如正负类数量比超过 5:1)时,随机森林偏向将少数类归为多数类,造成假的高分类精度;另外,特征维度过高时,会降低单个分类器的分类性能,导致算法的整体分类能力被削弱。


       多年来,原始随机森林算法被多次很多改进,如分别通过聚类方式、贪婪方法挑选出一批具有代表性的高精度低相似性决策树,这些方法提高了部分数据集的分类精度,但对上述提到的医疗健康大数据效果甚微,因此本节主要对随机森林在特征选择和不平衡领域研究现状进行分析。


1. 特征选择领域


       良好的特征选择方法应该能有效地从所有特征中选择出最有用的一批特征,一些学者对此进行了大量研究。粗糙集、邻域互信息、聚类、ReliefF 算法等都是常见的筛选出强分类能力特征的方法,在随机森林中也有广泛的应用,如有人提出了卡方检验与随机森林结合的算法,用卡方检验对特征进行排序并分为不同区间,随机森林抽取不同区间的特征构建决策树,该方法能减轻过拟合的问题,但也会导致结果产生偏向性;有人提出了一种基于最大互信息系数的随机森林算法,利用最大互信息衡量特征的区分能力,并将特征分为高中低三个子集,从每个子集中抽取特征构建决策树,很好地避免了干扰树的产生,但是每棵树分类能力过于平均,容易引起过拟合问题;Vakharia 等先用 ReliefF 算法计算特征的权重,删除低于权值的特征后再进行随机森林训练,有效地提高了轴承故障诊断的准确率;也有人利用肯德尔系数来代替随机森林的随机特征选择步骤,在医学数据集中取得了不错的效果。


2. 不平衡分类领域


       不平衡数据指的是在某一个数据集中不同类型的样本数量悬殊过大。常用的一些解决方法如过采样、欠采样、混合抽样等是从数据层面来使数据集达到相对类均衡,还有SMOTE、GAN 等方法是从算法层面通过一定的计算来生成新的少数类,也能有效的解决不平衡问题。已经有不少学者将上述方法应用到随机森林中,如有人通过对多数样本欠采样,对少数样本过采样的方式使数据相对类均衡,并在随机森林算法中进行实验,一定程度下提高了算法的分类精度,但是数据量缩减了很多;有人采用 SMOTE 算法计算出一批少数类样本,降低了数据的不平衡程度,然而该方法不能保证伪样本的类型正确性;有人提出了一种基于 GAN 的随机森林算法,采用集成学习 GAN 来生成少数类,以得到分布平衡的数据集;还有其他针对不平衡问题的改进研究,如有人等提出了一种基于随机森林算法的类权重投票(CWsRF)算法,为每个类分配单独的权重,有效提高了少数类的识别性能;也有人采用 k-means 聚类算法计算每个类的区分度,将区分度应用到随机森林的特征选择步骤中,减轻了不平衡数据集对算法的影响。


用鸢尾花数据做随机森林模型

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris
import warnings
warnings.filterwarnings('ignore')
# 加载数据
iris = load_iris()
X = iris.data
y = iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
# 训练模型
rnd_clf = RandomForestClassifier(oob_score=True)
rnd_clf.fit(X_train, y_train)
# 预测测试集
y_pred_rf = rnd_clf.predict(X_test)
print(accuracy_score(y_test, y_pred_rf)) # 打印准确率
print(rnd_clf.oob_score_)
# Feature Importance
iris = load_iris()
rnd_clf = RandomForestClassifier(n_estimators=500, n_jobs=-1)
rnd_clf.fit(iris["data"], iris['target'])
for name, score in zip(iris['feature_names'], rnd_clf.feature_importances_):
    print(name, score)
0.98
0.93
sepal length (cm) 0.09958835116329184
sepal width (cm) 0.023272108712879234
petal length (cm) 0.4459461998159546
petal width (cm) 0.43119334030787426

准确率为0.98,其中4个特征中petal length和petal width重要程度分值较大,重要性较大

总结

随机森林


1、随机选择样本(放回抽样);


2、随机选择特征;


3、构建决策树;


4、随机森林投票(平均)


优点:


1. 表现良好


2. 可以处理高维度数据(维度随机选择)


3. 辅助进行特征选择


4. 得益于 bagging 可以进行并行训练


缺点: 对于噪声过大的数据容易过拟合



目录
相关文章
|
12天前
|
机器学习/深度学习 人工智能 算法
"拥抱AI规模化浪潮:从数据到算法,解锁未来无限可能,你准备好迎接这场技术革命了吗?"
【10月更文挑战第14天】本文探讨了AI规模化的重要性和挑战,涵盖数据、算法、算力和应用场景等方面。通过使用Python和TensorFlow的示例代码,展示了如何训练并应用一个基本的AI模型进行图像分类,强调了AI规模化在各行业的广泛应用前景。
24 5
|
4天前
|
存储 JSON 算法
TDengine 检测数据最佳压缩算法工具,助你一键找出最优压缩方案
在使用 TDengine 存储时序数据时,压缩数据以节省磁盘空间是至关重要的。TDengine 支持用户根据自身数据特性灵活指定压缩算法,从而实现更高效的存储。然而,如何选择最合适的压缩算法,才能最大限度地降低存储开销?为了解决这一问题,我们特别推出了一个实用工具,帮助用户快速判断并选择最适合其数据特征的压缩算法。
12 0
|
14天前
|
人工智能 算法 前端开发
无界批发零售定义及无界AI算法,打破传统壁垒,累积数据流量
“无界批发与零售”是一种结合了批发与零售的商业模式,通过后端逻辑、数据库设计和前端用户界面实现。该模式支持用户注册、登录、商品管理、订单处理、批发与零售功能,并根据用户行为计算信用等级,确保交易安全与高效。
|
14天前
|
前端开发 算法 JavaScript
无界SaaS模式深度解析:算力算法、链接力、数据确权制度
私域电商的无界SaaS模式涉及后端开发、前端开发、数据库设计、API接口、区块链技术、支付和身份验证系统等多个技术领域。本文通过简化框架和示例代码,指导如何将核心功能转化为技术实现,涵盖用户管理、企业店铺管理、数据流量管理等关键环节。
|
14天前
|
移动开发 算法 前端开发
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
15 0
|
18天前
|
机器学习/深度学习 算法 数据处理
EM算法对人脸数据降维(机器学习作业06)
本文介绍了使用EM算法对人脸数据进行降维的机器学习作业。首先通过加载ORL人脸数据库,然后分别应用SVD_PCA、MLE_PCA及EM_PCA三种方法实现数据降维,并输出降维后的数据形状。此作业展示了不同PCA变种在人脸数据处理中的应用效果。
22 0
|
8天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
26天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于MSER和HOG特征提取的SVM交通标志检测和识别算法matlab仿真
### 算法简介 1. **算法运行效果图预览**:展示算法效果,完整程序运行后无水印。 2. **算法运行软件版本**:Matlab 2017b。 3. **部分核心程序**:完整版代码包含中文注释及操作步骤视频。 4. **算法理论概述**: - **MSER**:用于检测显著区域,提取图像中稳定区域,适用于光照变化下的交通标志检测。 - **HOG特征提取**:通过计算图像小区域的梯度直方图捕捉局部纹理信息,用于物体检测。 - **SVM**:寻找最大化间隔的超平面以分类样本。 整个算法流程图见下图。
|
5天前
|
人工智能 算法 数据安全/隐私保护
基于遗传优化的SVD水印嵌入提取算法matlab仿真
该算法基于遗传优化的SVD水印嵌入与提取技术,通过遗传算法优化水印嵌入参数,提高水印的鲁棒性和隐蔽性。在MATLAB2022a环境下测试,展示了优化前后的性能对比及不同干扰下的水印提取效果。核心程序实现了SVD分解、遗传算法流程及其参数优化,有效提升了水印技术的应用价值。