随机森林的简单实现

随机森林(RandomForest):顾名思义,是用随机的方式建立一个森林,森林里面:由很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类(对于分类算法),然后看看哪一类被选择最多,就预测这个样本为那一类。

随机森林的随机性体现在:

a.随机选择样本,是有放回抽样

b.随机选择特征,不用对所有的特征都考虑,训练速度相对快

随机森林的优点:

a.能够处理很高维度(feature很多)的数据(因为不用做特征选择,顺便说一下,最近很火的深度神经网络,其很大的好处就是算法会自动逐层对特征进行提取) PS:特征子集是随机选择的

b.训练速度快,容易做成并行化方法

PS:训练时树与树之间是相互独立的,并且随机选择特征

c.在训练完后,它能够给出哪些feature比较重要

d.在当前的很多数据集上,相对其他算法有着很大的优势,如果有很大一部分的特征遗失,仍可以维持准确度。

优点很多,这里不再赘述。

下面我实现一下简单的随机森林:

数据描述:为了对比单一决策树与集成模型中随机森林分类器的性能差异,我们使用kaggle上的泰坦尼克号的乘客数据。数据的下载地址可以直接到kaggle竞赛官网下载。

为了简单起见,所有分类器不进行个性化配置,全部采用默认配置进行初始化。

软件用的是anaconda,这是一个集成了特别多Python包的软件,大多数包不需要手动安装。最主要功能是ipython交互式和pycharm集成开发环境。

导入pandas,并且重命名为pd,

读取磁盘上的泰坦尼克的档案,并存储在变量titanic中。Pandas在数据分析与预处理中用处很大,是以numpy为基础的库。

Csv格式文件数据如下

人工选取Pclass,Age,Sex作为判别乘客是否能够生还的特征,同时用

Survived作为样本的标记。(这里一定要注意,X是两个中括号)

对于缺失的年龄信息,我们使用全体乘客的平均年龄代替,这样可以在保证顺利

训练模型的同时,尽可能不影响预测任务。

fillna 用指定值或插值方法(如ffill和bfill)填充缺失数据,可以前向填充可以后向填充,inplace=True的意思是fillna默认会返回新对象!!,就地修改

这里的警告的意思是对此副本的修改可能会影响原来的数据,这是由于api的更新所致,这里忽略就行了。

然后对原始数据进行分割,1/4用作测试

这是说该模块在0.18版本中被弃用,支持所有重构的类和函数都被移动到的model_selection模块。 另请注意,新的CV迭代器的接口与本模块的接口不同。此模块将在0.20中删除。

解决办法:将“from sklearn.cross_validation importtrain_test_split” 改为“from sklearn.model_selection import train_test_split”

X是所要划分的样本特征集,y所要划分的样本结果,test_size是样本占比。Random_state是随机种子

为什么用random_state=33呢?因为0或者不填,每次得到的随机数组会不一致,当然这个数也不是必须33,相当于随机数的种子

对类别特征进行转化,成为特征向量。特征提取模块可以用于从由诸如文本和图像的格式组成的数据集中提取机器学习算法支持的格式的特征。类DictVectorizer可用于将表示为标准Python dict对象列表的要素数组转换为scikit-learn估计量使用的NumPy/ SciPy表示。虽然处理不是特别快,但是Python的dict使用很方便

使用随机森林分类器进行集成模型的训练以及预测分析

输出随机森林分类器在测试集上的分类准确性,以及更详细的精准率、召回率及F1指标,fit函数是用来训练模型参数的,没有它还训练个球啊

这里metrics是评价标准的意思。

Accuracy是预测结果除以原本正确标记的百分比。

Precision(精确率)=#(true positive)/[#(true positive)+#(falsepositive)]

true positive代表真阳性

Recall(召回率)=#(true positive)/[#(truepositive)+#(false negative)]

为了综合考量召回率和精确率,我们计算这两个指标的调和平均数。它除了具有平均功能外,还会对那些召回率和精确率更加接近的模型给出更高的分数,因为召回率和精确率差距较大的模型,往往没有足够的实用价值。

F1=2/(1/presion+1/recall)

至此,我们就将理论转化为实践,可以看到随机森林的预测准确率是蛮高的,尽管我们什么参数都没有配置。虽然这个模型是采用默认的参数,没有对参数进行定制,但至少让我们熟悉了机器学习的基本流程,点燃了对机器学习的热情

本文来自企鹅号 - 全球大搜罗媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能头条

如何通过机器学习还原图像色彩

15120
来自专栏AI研习社

语义分割和转置卷积

分割对图像分析是必不可少的。语义分割描述了每个像素与类别标记的关联过程,(例如:花朵、人物、道路、天空、海洋、或者汽车)。

15420
来自专栏数据派THU

三步教你搭建给黑白照片上色的神经网络 !(附代码)

来源:量子位 本文长度为7970字,建议阅读8分钟 本文为你介绍通过搭建神经网络,来给黑白照片上色的教程。 深度学习云平台FloydHub最近在官方博客上发了一...

58690
来自专栏ATYUN订阅号

Python机器学习的练习六:支持向量机

在这个练习中,我们将使用支持向量机(SVMs)创建一个垃圾邮件分类器。在一些简单的2D数据集上使用SVMs去观察他们如何工作,接下来我们查看一组邮件数据集,并且...

45760
来自专栏计算机视觉与深度学习基础

计算机视觉与图像处理学习笔记(一)

写在前面:因学习需要,本人根据章毓晋的《计算机视觉教程》和冈萨雷斯的《数字图像处理》两本书进行学习,中间会穿插相关实践,会有对opencv的学习,以此笔记记录学...

25960
来自专栏AI科技大本营的专栏

如何通过机器学习还原图像色彩

作者 | Klevis Ramo 译者 | Teixeira10 在本文中,作者提出了使用k-means算法来对图像进行色彩还原,介绍算法的步骤,同时应用在图...

361120
来自专栏磐创AI技术团队的专栏

FaceRank-人脸打分基于 TensorFlow 的 CNN 模型,这个妹子颜值几分?

FaceRank-人脸打分基于 TensorFlow 的 CNN 模型 机器学习是不是很无聊,用来用去都是识别字体。能不能帮我找到颜值高的妹子,顺便提高一下姿势...

44140
来自专栏数据处理

矩阵奇异分解(SVD)应用

11330
来自专栏AI科技大本营的专栏

900万张标注图像,谷歌发布Open Images最新V3版

翻译 | Shawn 过去几年机器学习的发展使得计算机视觉有了快速的进步,系统能够自动描述图片,对共享的图片创造自然语言回应。其中大部分的进展都可归因于 Ima...

43470
来自专栏ATYUN订阅号

使用TensorFlow和DLTK进行生物医学图像分析的介绍

DLTK是用于医学图像的深度学习工具包,它扩展了TensorFlow, 以实现生物医学图像的深度学习。它为经典的应用程序提供特殊的操作和功能、模型的实现、教程(...

26240

扫码关注云+社区

领取腾讯云代金券