一、机器学习之随机森林

1.1 集成算法概述
集成学习(ensemble learning)是时下非常流行的机器学习算法,它本身不是一个单独的机器学习算法,而是通过在数据上构建多个模型,集成所有模型的建模结果。基本上所有的机器学习领域都可以看到集成学习的身影,在现实中集成学习也有相当大的作用,它可以用来做市场营销模拟的建模,统计客户来源,保留和流失,也可用来预测疾病的风险和病患者的易感性。在现在的各种算法竞赛中,随机森林,梯度提升树(GBDT),Xgboost等集成算法的身影也随处可见,可见其效果之好,应用之广。
1.1.1sklearn的集成算法模块ensemble

2 RandomForestClassifier
class sklearn.ensemble.RandomForestClassifier (n_estimators=’10’, criterion=’gini’, max_depth=None,min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’,max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False,n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None)
随机森林是非常具有代表性的Bagging集成算法,它的所有基评估器都是决策树,分类树组成的森林就叫做随机森林分类器,回归树所集成的森林就叫做随机森林回归器。这一节主要讲解RandomForestClassifier,随机森林分类器。

`单个决策树的准确率越高,随机森林的准确率也会越高,因为装袋法是依赖于平均值或
者少数服从多数原则来决定集成的结果的

**## 二、开始建立随机森林吧’

建模流程
#开始实例化
#训练集带入实例化的模型进行训练,使用的接口是fit
#使用其他接口将测试集导入我们训练好的模型,获得我们希望的结果(score,y_test等)
**
2.1首先导入我们需要的包

%matplotlib inline
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_wine

2.2导入需要的数据集

wine = load_wine()
wine.data
wine.target

2.3.模型的基本流程

from sklearn.model_selection import train_test_split
Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data,wine.target,test_size=0.3)
clf = DecisionTreeClassifier(random_state=0)
rfc = RandomForestClassifier(random_state=0)
clf = clf.fit(Xtrain,Ytrain)
rfc = rfc.fit(Xtrain,Ytrain)
score_c = clf.score(Xtest,Ytest)
score_r = rfc.score(Xtest,Ytest)
print("Single Tree:{}".format(score_c),"Random Forest:{}".format(score_r))

结果:

single tree:0.8518518518518519
random forest:0.9629629629629629

结论:从结果可以看出随机森林的结果要好于单棵树的结果。
2.44. 画出随机森林和决策树在一组交叉验证下的效果对比

#目的是带大家复习一下交叉验证
#交叉验证:是数据集划分为n分,依次取每一份做测试集,每n-1份做训练集,多次训练模型以观测模型稳定性的方法
from sklearn.model_selection import cross_val_score
import matplotlib.pyplot as plt
rfc = RandomForestClassifier(n_estimators=25)
rfc_s = cross_val_score(rfc,wine.data,wine.target,cv=10)
clf = DecisionTreeClassifier()
clf_s = cross_val_score(clf,wine.data,wine.target,cv=10)
plt.plot(range(1,11),rfc_s,label = "RandomForest")
plt.plot(range(1,11),clf_s,label = "Decision Tree")
plt.legend()
plt.show()
#====================一种更加有趣也更简单的写法===================#
"""
label = "RandomForest"
for model in [RandomForestClassifier(n_estimators=25),DecisionTreeClassifier()]:score = cross_val_score(model,wine.data,wine.target,cv=10)print("{}:".format(label)),print(score.mean())plt.plot(range(1,11),score,label = label)plt.legend()label = "DecisionTree"
"""

结果图如下所示:

在图中也有明显的结果就是随机森林的而结果会高于决策树的结果。
2.55. 画出随机森林和决策树在十组交叉验证下的效果对比

rfc_l = []
clf_l = []
for i in range(10):rfc = RandomForestClassifier(n_estimators=25)rfc_s = cross_val_score(rfc,wine.data,wine.target,cv=10).mean()rfc_l.append(rfc_s)clf = DecisionTreeClassifier()clf_s = cross_val_score(clf,wine.data,wine.target,cv=10).mean()clf_l.append(clf_s)plt.plot(range(1,11),rfc_l,label = "Random Forest")
plt.plot(range(1,11),clf_l,label = "Decision Tree")
plt.legend()
plt.show()
#是否有注意到,单个决策树的波动轨迹和随机森林一致?
#再次验证了我们之前提到的,单个决策树的准确率越高,随机森林的准确率也会越高

结果:

2.6n_的学习曲线

superpa = []
for i in range(200):rfc = RandomForestClassifier(n_estimators=i+1,n_jobs=-1)rfc_s = cross_val_score(rfc,wine.data,wine.target,cv=10).mean()superpa.append(rfc_s)
print(max(superpa),superpa.index(max(superpa)))
plt.figure(figsize=[20,5])
plt.plot(range(1,201),superpa)
plt.show()

请思考一下:
随机森林用了什么方法,来保证集成的效果一定好于单个分类器?


rfc = RandomForestClassifier(n_estimators=20,random_state=2)
rfc = rfc.fit(x_train, y_train)rfc.estimators_[0].random_state #表示查看第一棵树的random_state
rfc.estimators_[0].max_depth #表示查看第一棵树的最大深度
rfc.estimators_#表示查看所有的树
rfc.estimators_[0]#表示查看第一棵树的相关信息#随机森林的重要属性之一:estimators,查看森林中树的状况
rfc.estimators_[0].random_state
#下面写一个循环,查看每一棵树的属性
for i in range(len(rfc.estimators_)):print(rfc.estimators_[i].random_state)
###注意在rfc = RandomForestClassifier(n_estimators=20,random_state=2)如果不加上random_state=2
#输出的各个树的random_state会发生变化,但是输入random_state=2就不会发生变化了

#无需划分训练集和测试集
rfc = RandomForestClassifier(n_estimators=25,oob_score=True)
rfc = rfc.fit(wine.data,wine.target)
#重要属性oob_score_
rfc.oob_score_

对于随机森林的建模的过程我们可以有两个选择
(1)将数据划分为测试集和训练集,对模型进行训练等操作
(2)不划分测试集和训练集直接用袋内数据,在对随机森林实例化的时候,我们可以将 oob_score=True设置为True

2.2重要的接口和属性

2.2重要属性和接口¶
n_estimators,random_state,boostrap和oobscore这四个参数帮助大家了解了袋装法的基本流程和重要概念。同时,我们还介绍了.estimators 和 .oobscore 这两个重要属性。除了这两个属性之外,作为树模型的集成算法,随机森林自然有.feature_importances这个属性。 了解各个参数的含义随机森林的接口与决策树完全一致,因此依然有四个常用接口:apply, fit, predict,score。除此之外,还需要注意随机森林的predict_proba接口,这个接口返回每个测试样本对应的被分到每一类标签的概率,标签有几个分类就返回几个概率。如果是二分类问题,则predict_proba返回的数值大于0.5的,被分为1,小于0.5的,被分为0。传统的随机森林是利用袋装法中的规则,平均或少数服从多数来决定集成的结果,而sklearn中的随机森林是平均每个样本对应的predict_proba返回的概率,得到一个平均概率,从而决定测试样本的分类。

#大家可以分别取尝试一下这些属性和接口
rfc = RandomForestClassifier(n_estimators=25)
rfc = rfc.fit(x_train, y_train)
rfc.score(x_test,y_test)#准确率
rfc.feature_importances_#数值越大特征重要性越大可以用zip将特征和重要性进行整合
rfc.apply(x_test)#返回数据集中的每一个样本在每一棵树中的叶子节点的索引
rfc.predict(x_test)
rfc.predict_proba(x_test)#每一个样本被分到各个标签的概率

可以自己尝试用泰坦尼克号 数据进行尝试

机器学习-随机森林-分类相关推荐

  1. 随机森林分类算法python代码_Python机器学习笔记:随机森林算法

    随机森林算法的理论知识 随机森林是一种有监督学习算法,是以决策树为基学习器的集成学习算法.随机森林非常简单,易于实现,计算开销也很小,但是它在分类和回归上表现出非常惊人的性能,因此,随机森林被誉为&q ...

  2. python 随机森林分类 DecisionTreeClassifier 随机搜索优化参数 GridSearchCV

    @python 随机森林分类模型 随机优化参数 学习笔记 随机森林 1.随机森林模型 随机森林算法是基于决策树算法的Begging优化版本,通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策 ...

  3. 机器学习 - 随机森林 Random Forest

    先修知识: 决策树.可以看我之前写的文章https://blog.csdn.net/weixin_41332009/article/details/112276531 集成学习.也可以看之前写的文章h ...

  4. Python实现GWO智能灰狼优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 灰狼优化算法(GWO),由澳大利亚格里菲斯大学学者 Mirjal ...

  5. 机器学习-随机森林(RandomForest)详解

    1.什么是随机森林 随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支--集成学习(Ensemble Learning)方法. 解读下上面的话 ...

  6. 随机森林图像分类实战:随机森林分类聚类(Kmeans)降维后的数据、随机森林分类聚类(Kmeans)降维后的合成(append)数据

    随机森林图像分类实战:随机森林分类聚类(Kmeans)降维后的数据.随机森林分类聚类(Kmeans)降维后的合成(append)数据 目录

  7. 数学建模_随机森林分类模型详解Python代码

    数学建模_随机森林分类模型详解Python代码 随机森林需要调整的参数有: (1) 决策树的个数 (2) 特征属性的个数 (3) 递归次数(即决策树的深度)''' from numpy import ...

  8. Python 随机森林分类

    Python 随机森林分类 1 声明 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理. 2 决策树分类简介 相关概念见下: 决策树的最大问题是 ...

  9. 更多特征变量却未能带来随机森林分类效果的提升

    评估RFE变量筛选过程中构建的最终模型的效果 最终拟合的模型可通过rfe$fit获取,用于后续预测分析. library(randomForest) rfe$fit ## ## Call: ## ra ...

最新文章

  1. 一道简约而不简单的算法题——数据流的中位数 | 附动画解析
  2. 十、分享一道LeetCode较为简单的单链表题,但是却能激发起练习算法的极大的兴趣
  3. step3 . day4 数据结构之线性表 栈和队
  4. 发球机器轰灭了中国姑娘的奇迹
  5. Java 高级算法——数组中查询重复的数字之二
  6. 【浙大第19届校赛:G】Postman(贪心)
  7. 分享多年收集的40款免费开源源码
  8. Python缩进问题:IndentationError:expectedan indented block
  9. KEGG 通路信息下载及其相关处理
  10. 计算机里面CPU是什么意思,cpu是什么 cpu是什么意思详细介绍
  11. HTB-Sequel
  12. python-合并两个列表并去重
  13. 最全的100个Python精选库,建议收藏!
  14. 【Python3】抓取Github吉祥物Octocat昵图并下载到本地
  15. DAU/MAU?UGC?
  16. android 各个版本的发布时间和信息
  17. 发现一个可视化大屏操作神器FBI,你值得一试
  18. FL Studio中的音频剪辑功能
  19. lv双肩包尺寸对照表_LV型号与对应的尺寸表
  20. 【东哥说书】俞军产品方法论

热门文章

  1. linux 测试参数设置,XFS参数优化及测试
  2. html2canvas 生成h5海报图片底部有白边
  3. 算法时间复杂度和空间复杂度详解
  4. 流量卡如何激活使用?关于流量卡的激活与充值问题
  5. html div box,CSS box-sizing属性的正确用法
  6. HTML+CSS+JS网页设计期末课程大作业 (王者荣耀游戏网站设计)
  7. 【RTT】SPI Flash 与文件系统(2):FAL
  8. 蜗牛学院的html网页成像,蜗牛学院——web前端开发(示例代码)
  9. 追本溯源,解密第一性原理(上)
  10. linux 和windows下使用ffmpeg将mkv转换为mp4