Python算法:随机森林分类

简介: 随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习。

一、前言

本期博客我们将学习另一个算法——随机森林,它跟决策树有密切的关联,一起来看看吧。

二、随机森林算法原理

通过前面的实验,我们了解了决策树的基本原理,而随机森林则是由多棵决策树组合而成的一个分类器。因为如果只有一棵决策树,预测的结果可能会有比较大的偏差,而利用多棵决策树进行决策,再对所有决策树的输出结果进行统计,取票数最多的结果作为随机森林的最终输出结果。

随机森林由Leo Breiman(2001)提出,它通过自助法(bootstrap)重采样技术,从原始训练样本集N中有放回地重复随机抽取k个样本生成新的训练样本集合,然后根据自助样本集生成k个分类树组成随机森林,新数据的分类结果按分类树投票多少形成的分数而定。其实质是对决策树算法的一种改进,将多个决策树合并在一起,每棵树的建立依赖于一个独立抽取的样品,森林中的每棵树具有相同的分布,分类误差取决于每一棵树的分类能力和它们之间的相关性。特征选择采用随机的方法去分裂每一个节点,然后比较不同情况下产生的误差。能够检测到的内在估计误差、分类能力和相关性决定选择特征的数目。单棵树的分类能力可能很小,但在随机产生大量的决策树后,一个测试样品可以通过每一棵树的分类结果经统计后选择最可能的分类。

image-20221106152952663.png

随机森林是由很多决策树构成的,不同决策树之间没有关联。

当我们进行分类任务时,新的输入样本进入,就让森林中的每一棵决策树分别进行判断和分类,每个决策树会得到一个自己的分类结果,决策树的分类结果中哪一个分类最多,那么随机森林就会把这个结果当做最终的结果。

三、随机森林算法函数介绍

RandomForestClassifier函数来自sklearn.ensemble,用于创建随机森林分类器。其用法如下:

clf=RandomForestClassifier ()

因为随机森林是建立决策树原理之上的,所以其参数中有很大一部分是关于决策树,该部分参数可参考前面关于决策树分类器的实验。下面只介绍与随机森林相关的参数:

参数 说明
n_estimators 决策树的个数,默认为10
bootstrap 是否有放回的采样,默认为True
max_depth int or None,可选(默认为"None")。表示树的最大深度
n_jobs 并行任务的个数,默认为1,表示不并行,-1表示与CPU核数相同

四、编写Python随机森林程序并运行

我们使用SSH工具连接到学习平台的虚拟机之后,我们直接使用如下命令创建一个python文件用于编写我们的随机森林代码:

vim randomForest.py

然后我们输入如下随机森林代码:

#!/usr/bin/env python# -*- coding: utf-8 -*-fromsklearn.ensembleimportRandomForestClassifierfromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitimportnumpyasnpif__name__=="__main__":
dataset=load_iris()
X=dataset.datay=dataset.targetXd_train, Xd_test, y_train, y_test=train_test_split(X, y, random_state=14)
clf=RandomForestClassifier(max_depth=2, random_state=0)
clf=clf.fit(Xd_train, y_train)
y_predicted=clf.predict(Xd_test)    
accuracy=np.mean(y_predicted==y_test) *100print"y_test     ",y_testprint"y_predicted",y_predictedprint"accuracy:",accuracy

image-20221106152305062.png

然后使用命令运行如上代码:

python randomForest.py

image-20221106152333857.png

可以看见我们运行成功了。

需要说明的是,学校虚拟机上有python3和python2,但是这个是使用python2运行的,我尝试过将代码改成python3的格式,却发生缺少库,所以就使用了python2来跑程序了,如果要在python3环境跑的话需要改成如下代码:

#!/usr/bin/env python# -*- coding: utf-8 -*-fromsklearn.ensembleimportRandomForestClassifierfromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitimportnumpyasnpif__name__=="__main__":
dataset=load_iris()
X=dataset.datay=dataset.targetXd_train, Xd_test, y_train, y_test=train_test_split(X, y, random_state=14)
clf=RandomForestClassifier(max_depth=2, random_state=0)
clf=clf.fit(Xd_train, y_train)
y_predicted=clf.predict(Xd_test)    
accuracy=np.mean(y_predicted==y_test) *100print("y_test     ",y_test)
print("y_predicted",y_predicted)
print("accuracy:",accuracy)

image-20221106152752315.png

我们在本地VsCode内跑这个代码也可以成功。

五、最后我想说

随机森林是一种有监督的机器学习算法。 由于其准确性,简单性和灵活性,它已成为最常用的一种算法。 事实上,它可以用于分类和回归任务,再加上其非线性特性,使其能够高度适应各种数据和情况。

随机森林是一组决策树。但是,两者之间存在一些差异。决策树往往会创建规则,用来做出决策。随机森林将随机选择要素并进行观测,构建决策树林,然后计算平均结果。

随机森林算法有诸多优点,在这里我就不一一叙述了,感兴趣的朋友可以去网上查阅一下。

在这里我推荐一篇文章大家可以去看看:什么是随机森林?

好啦,本期的Python算法学习就到这里结束了,也不知道下一期我会什么时候更新,我还是太懒了,最后谢谢大家的阅读!

目录
相关文章
|
11月前
|
算法 搜索推荐 JavaScript
基于python智能推荐算法的全屋定制系统
本研究聚焦基于智能推荐算法的全屋定制平台网站设计,旨在解决消费者在个性化定制中面临的选择难题。通过整合Django、Vue、Python与MySQL等技术,构建集家装设计、材料推荐、家具搭配于一体的一站式智能服务平台,提升用户体验与行业数字化水平。
|
12月前
|
存储 算法 调度
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
526 26
|
11月前
|
存储 监控 算法
监控电脑屏幕的帧数据检索 Python 语言算法
针对监控电脑屏幕场景,本文提出基于哈希表的帧数据高效检索方案。利用时间戳作键,实现O(1)级查询与去重,结合链式地址法支持多条件检索,并通过Python实现插入、查询、删除操作。测试表明,相较传统列表,检索速度提升80%以上,存储减少15%,具备高实时性与可扩展性,适用于大规模屏幕监控系统。
296 5
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
736 0
|
机器学习/深度学习 编解码 算法
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
795 4
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
459 0
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)
699 0
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
606 3
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【7月更文挑战第22天】在大数据领域,Python算法效率至关重要。本文深入解析时间与空间复杂度,用大O表示法衡量执行时间和存储需求。通过冒泡排序(O(n^2)时间,O(1)空间)与快速排序(平均O(n log n)时间,O(log n)空间)实例,展示Python代码实现与复杂度分析。策略包括算法适配、分治法应用及空间换取时间优化。掌握这些,可提升大数据处理能力,持续学习实践是关键。
493 1
|
存储 机器学习/深度学习 算法
Python算法基础教程
Python算法基础教程
257 0

推荐镜像

更多