【机器学习入门】(6) 随机森林算法:原理、实例应用(沉船幸存者预测)附python完整代码和数据集
各位同学好,今天我和大家分享一下python机器学习的随机森林算法。主要内容有:
(1) 算法原理、(2) sklearn实现随机森林、(3) 泰坦尼克号沉船幸存者预测。
文末附python完整代码和数据集。那我们开始吧。
1. 随机森林算法原理
集成算法包含(bagging装袋/boosting增强/stacking堆叠),其中随机森林属于bagging。
算法原理:
随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。利用相同的训练数搭建多个独立的分类模型,然后通过投票的方法,以少数服从多数原则作出最终的分类决策。
例如:训练了5个树,其中4个树的结果是True,1个树的结果是False,最终结果也会是True。
学习算法:
若用N表示训练用的样本个数,M表示特征数目。输入特征数目m,用于确定决策树上一个节点的决策结果,其中m远小于M。
从N个训练样本中以有放回抽样的方法,取样M次,形成一个训练集,并用未抽到的样本做预测,评估其误差。
对于每一个节点,随机选择m个特征,决策树上每个节点的决定都是基于这些特征决定的。根据这m个特征,计算其最佳的分裂方式。
随机抽样训练集的原因:
如果不进行随机抽样,每棵树的训练集都一样,那么最终训练出的树分类结果也是完全一样的。
为什么有放回地抽样:
如果不进行有放回抽样,那么每棵树的训练集都是完全不相同的,都是没有交集的,每棵树训练出来都是有很大差异,而随机森林最后分类取决于多棵树的投票。
2. 随机森林算法实战
2.1 sklearn实现随机森林
首先从sklearn中导入随机森林分类器:
from sklearn.ensemble import RandomForestClassifier
随机森林函数 RandomForestClassifier() 参数设置:
n_estimator:整数类型,森林里树木的数量,默认=10
criterion:字符串型,分割特征的测量方法,默认是'Gini',可选信息熵 'entropy'
max_depth:整数或None,树的最大深度,默认是None
bootstrap:布尔,是否采用有放回抽样,默认是True
2.2 实例应用
随机森林算法和决策树算法在程序上有类似部分,该篇文章就不再赘述,如果以下程序语句有不明白的,可以参考上一篇文章,使用的数据集也相同:【机器学习】(5) 决策树算法实战:sklearn实现决策树,实例应用(沉船幸存者预测)附python完整代码及数据集
(1)导入数据
导入泰坦尼克号乘客数据,数据集获取地址:GitHub - fayduan/Kaggle_Titanic: the data and ipython notebook of my attempt to solve the kaggle titanic problem,数据包含891个样本,10项特征数据姓名、年龄、船舱等,一项目标数据'survived'。
#(1)导入数据
import pandas as pd
filepath = 'C:\\Users\\admin\\.spyder-py3\\test\\文件处理\\泰坦尼克数据集\\taitan.csv'
data = pd.read_csv(filepath)
(2)数据预处理
从原数据中提取五项指标作为特征值,便于大家对随机森林算法有更直观的理解。由于暂时文章没有涉及到特征工程,暂且不把所有的特征值放入模型,后续文章会进行跟深入的探讨。
使用年龄的平均值并借助.fillna()函数填充age特征中的缺失值,划分出建模所需的数据和验证模型所需的数据。
# 提取部分特征值,船舱、年龄、性别、非直系亲属数量、直系亲属数量
data_features = data[['Pclass','Age','Sex','SibSp','Parch']]
# 提取Survived列所谓目标值
data_targets = data['Survived']
# 年龄均值填充年龄缺失值
data_features.fillna(data_features['Age'].mean(),inplace=True)# 取出最后10行用于结果验证
data_predict_features = data_features[-10:] #输入预测函数的特征值
data_predict_targets = data_targets[-10:] #验证预测结果的目标值# 将建模数据删除最后10行
data_features = data_features[:-10] #建模所需的特征值x
data_targets = data_targets[:-10] #建模所需的目标值y
(3)特征提取
由于特征sex对应的数据是'female'和'male',属于字符串类型数据,然而模型训练函数.fit()只能接收数值类型的数据,因此需要将特征值转换成sparse数值矩阵。之前我们提到过文本特征提取方法CountVectorizer(),这里我们使用字典特征提取方法DictVectorizer(),要求输入的参数是一个由字典组成的列表,而现在的特征值是一个DataFrame类型数据;返回值是sparse数值矩阵,将字符串类型数据转变成数值类型。
使用 .to_dict(orient = 'record') 方法将DataFrame类型数据转变成由字典组成的列表。
有关sparse矩阵及文本特征抽取的知识见下文的第1.4小节:
【机器学习】(2) 朴素贝叶斯算法:原理、实例应用(文档分类预测)附python完整代码及数据集
#(3)特征抽取
# 特征值Sex对应的值是字符串类型的数据,然而最终的预测函数的输入值是数值类型
# 文本类型转化成数值类型,利用字典特征抽取方法
from sklearn.feature_extraction import DictVectorizer #导入字典特征抽取方法
vect = DictVectorizer()
# 由于vect.fit_transform()方法只能接受由字典构成的列表
# 对特征值进行转换,从DataFrame数据到字典构成的列表
data_features = data_features.to_dict(orient = 'record')
# 传入文本转数值类型方法的函数,变成sparse矩阵
data_features = vect.fit_transform(data_features)
# 同理,也要对最后的预测输入值,也转换成sparse矩阵
data_predict_features = data_predict_features.to_dict(orient = 'record')
data_predict_features = vect.fit_transform(data_predict_features)
sparse矩阵如下图所示:索引3对应female,索引4对应male,将性别转换成数值类型,索引3表示,是否是'female',是就显示1,不是显示0。
(4)划分训练集和测试集
一般采用75%的数据用于训练,25%用于测试,因此把数据进行训练之前,先要对数据划分。划分方法不再赘述,有疑惑的可看下文中的第2.3节:【机器学习】(2) 朴素贝叶斯算法:原理、实例应用(文档分类预测)附python完整代码及数据集
#(4)划分测试集和训练集
from sklearn.model_selection import train_test_split
# 传入建模所需的特征值数据和目标值数据
x_train,x_test,y_train,y_test = train_test_split(data_features,data_targets,test_size=0.25)
(5) 随机森林方法
变量 rf 接收随机森林分类器 RandomForestClassifier(),随机森林分类器的参数同决策树的参数,这里就不赘述,具体见下文的第1节:
【机器学习】(5) 决策树算法实战:sklearn实现决策树,实例应用(沉船幸存者预测)附python完整代码及数据集
训练函数 .fit() 中传入训练所用的x和y值,其中x_train是sparse数值矩阵,accuracy存放评分法 .score() 求得的模型误差,根据x_test预测结果,把结果和真实的y_test比较,计算准确率。result中存放预测函数 .predict() 得到的人员存活结果,预测函数的输入值data_predict_features也是sparse数值类型矩阵。
#(5)随机森林方法
from sklearn.ensemble import RandomForestClassifier #导入随机森林分类器
# 接收随机森林方法
rf = RandomForestClassifier() #使用默认值
# 函数参数同决策树参数
# 训练,传入训练用的特征值和目标值
rf.fit(x_train,y_train)
# 评分法,计算准确率
accuracy = rf.score(x_test,y_test)
# 预测,输入预测所需的特征值
result = rf.predict(data_predict_features)
最终模型准确率在80%左右,预测结果和实际结果见稍有偏差。
数据集获取:
GitHub - fayduan/Kaggle_Titanic: the data and ipython notebook of my attempt to solve the kaggle titanic problem
完整python代码:
# 随机森林--泰坦尼克号获救预测#(1)导入数据
import pandas as pd
filepath = 'C:\\Users\\admin\\.spyder-py3\\test\\文件处理\\泰坦尼克数据集\\taitan.csv'
data = pd.read_csv(filepath)#(2)数据预处理
# 提取部分特征值,船舱、年龄、性别、非直系亲属数量、直系亲属数量
data_features = data[['Pclass','Age','Sex','SibSp','Parch']]
# 提取Survived列所谓目标值
data_targets = data['Survived']
# 年龄均值填充年龄缺失值
data_features.fillna(data_features['Age'].mean(),inplace=True)# 取出最后10行用于结果验证
data_predict_features = data_features[-10:] #输入预测函数的特征值
data_predict_targets = data_targets[-10:] #验证预测结果的目标值# 将建模数据删除最后10行
data_features = data_features[:-10] #建模所需的特征值x
data_targets = data_targets[:-10] #建模所需的目标值y#(3)特征抽取
# 特征值Sex对应的值是字符串类型的数据,然而最终的预测函数的输入值是数值类型
# 文本类型转化成数值类型,利用字典特征抽取方法
from sklearn.feature_extraction import DictVectorizer #导入字典特征抽取方法
vect = DictVectorizer()
# 由于vect.fit_transform()方法只能接受由字典构成的列表
# 对特征值进行转换,从DataFrame数据到字典构成的列表
data_features = data_features.to_dict(orient = 'record')
# 传入文本转数值类型方法的函数,变成sparse矩阵
data_features = vect.fit_transform(data_features)# 同理,也要对最后的预测输入值,也转换成sparse矩阵
data_predict_features = data_predict_features.to_dict(orient = 'record')
data_predict_features = vect.fit_transform(data_predict_features)# 观察sparse矩阵
# 查看sparse矩阵特征值名
feature_names = vect.get_feature_names()
# 将sparse矩阵变成列表形式,便于观察
feature_array = data_features.toarray()#(4)划分测试集和训练集
from sklearn.model_selection import train_test_split
# 传入建模所需的特征值数据和目标值数据
x_train,x_test,y_train,y_test = train_test_split(data_features,data_targets,test_size=0.25)#(5)随机森林方法
from sklearn.ensemble import RandomForestClassifier #导入随机森林分类器
# 接收随机森林方法
rf = RandomForestClassifier() #使用默认值
# 函数参数同决策树参数
# 训练,传入训练用的特征值和目标值
rf.fit(x_train,y_train)
# 评分法,计算准确率
accuracy = rf.score(x_test,y_test)
# 预测,输入预测所需的特征值
result = rf.predict(data_predict_features)
【机器学习入门】(6) 随机森林算法:原理、实例应用(沉船幸存者预测)附python完整代码和数据集相关推荐
- 【机器学习入门】(9) 逻辑回归算法:原理、精确率、召回率、实例应用(癌症病例预测)附python完整代码和数据集
各位同学好,今天我和大家分享一下python机器学习中的逻辑回归算法.内容主要有: (1) 算法原理:(2) 精确率和召回率:(3) 实例应用--癌症病例预测. 文末有数据集和python完整代码 1 ...
- 【机器学习入门】(8) 线性回归算法:正则化、岭回归、实例应用(房价预测)附python完整代码和数据集
各位同学好,今天我和大家分享一下python机器学习中线性回归算法的实例应用,并介绍正则化.岭回归方法.在上一篇文章中我介绍了线性回归算法的原理及推导过程:[机器学习](7) 线性回归算法:原理.公式 ...
- 【机器学习入门】(13) 实战:心脏病预测,补充: ROC曲线、精确率--召回率曲线,附python完整代码和数据集
各位同学好,经过前几章python机器学习的探索,想必大家对各种预测方法也有了一定的认识.今天我们来进行一次实战,心脏病病例预测,本文对一些基础方法就不进行详细解释,有疑问的同学可以看我前几篇机器学习 ...
- 【机器学习入门】(3) 朴素贝叶斯算法:多项式、高斯、伯努利,实例应用(心脏病预测)附python完整代码及数据集
各位同学好,今天我和大家分享一下朴素贝叶斯算法中的三大模型.在上一篇文章中,我介绍了朴素贝叶斯算法的原理,并利用多项式模型进行了文本分类预测. 朴素贝叶斯算法 -- 原理,多项式模型文档分类预测,附p ...
- 【机器学习入门】(5) 决策树算法实战:sklearn实现决策树,实例应用(沉船幸存者预测)附python完整代码及数据集
各位同学好,今天和大家分享一下python机器学习中的决策树算法,在上一节中我介绍了决策树算法的基本原理,这一节,我将通过实例应用带大家进一步认识这个算法.文末有完整代码和数据集,需要的自取.那我们开 ...
- 机器学习-集成之随机森林算法原理及实战
Bagging和随机森林 前言 集成学习是目前机器学习的一大热门方向.简单来说,集成学习就是组合许多弱模型以得到一个预测结果比较好的强模型.对于常见的分类问题就是指采用多个分类器对数据集进行预测,把这 ...
- 【机器学习入门】(2) 朴素贝叶斯算法:原理、实例应用(文档分类预测)附python完整代码及数据集
各位同学好,今天我向大家介绍python机器学习中的朴素贝叶斯算法.内容有:算法的基本原理:案例实战--新闻文档的分类预测. 案例简介:新闻数据有20个主题,有10万多篇文章,每篇文章对应不同的主题, ...
- 【机器学习入门】(1) K近邻算法:原理、实例应用(红酒分类预测)附python完整代码及数据集
各位同学好,今天我向大家介绍一下python机器学习中的K近邻算法.内容有:K近邻算法的原理解析:实战案例--红酒分类预测.红酒数据集.完整代码在文章最下面. 案例简介:有178个红酒样本,每一款红酒 ...
- 【神经网络】(1) 简单网络,实例:气温预测,附python完整代码和数据集
各位同学好,今天和大家分享一下TensorFlow2.0深度学习中的一个小案例.案例内容:现有348个气温样本数据,每个样本有8项特征值和1项目标值,进行回归预测,构建神经网络模型. 数据集免费:神经 ...
- 【机器学习】P25 随机森林算法(2) 实现 “波士顿房价” 预测
随机森林算法 Random Forest Algorithm 随机森林算法 随机森林算法实现波士顿房价预测 随机森林算法 随机森林(Random Forest)算法 是一种 集成学习(Ensemble ...
最新文章
- android支付宝调用
- 点对点信道互连以太网实验_汽车以太网 – 引领汽车IVN向多速以太网过渡
- vue插槽样式_Vue为什么要有插槽
- JDBC-day01
- python3 邮件方式发送测试报告
- 异步FIFO的FPGA实现
- 十、开始进入PowerBI的世界
- C++11 新的计时方法——std::chrono 大法好
- Linux中mysql的卸载和重装,在Linux下面卸载与重新安装Postgresql
- android studio卡顿解决办法
- RNN系列之四 长期依赖问题
- 一些不错的个人博客和资源网站
- 和画意思相近的字_画字五行属什么,画字在名字里的含义,画字起名的寓意_卜易居起名字典...
- Python_yield_实战应用_读取大文件
- 数字信号处理知识点总结(三):离散傅里叶变换(DFT)
- 为报复老东家,程序员编码给自己转账553笔,金额超21万元
- 关于sip软电话嵌入到网页web端的学习----第一天(2)(高手指点)遇到问题了jssip
- RESTful 接口设计规范
- 第5章 文件管理和索引
- 【linux基础1】linux命令行使用技巧
热门文章
- 微信公众号小程序与服务号和订阅号有什么区别
- 接口 常见视频接口详解
- 如何使用Aspose.pdf读取 增值税发票pdf文件内容 和 解二维码
- dnf时装预览怎么打开_dnf时装预览怎么打开_dnf怎么查找各职业时装代码
- 前端人脸识别--两张脸相似度
- 010editor 11.01 破解
- Android 性能测试工具- Emmagee
- 计算机网络-自顶向下方法笔记-滑动窗口协议
- win10无线信号强度测试软件,一款改善Win10 WiFi 信号的小工具
- ps安装插件提示“无法加载扩展,因为它未正确签署”怎么办?PS插件未经签署解决方法