chapter02 三种决策树模型:单一决策树、随机森林、GBDT(梯度提升决策树) 预测泰坦尼克号乘客生还情况
- 单一标准的决策树:会根每维特征对预测结果的影响程度进行排序,进而决定不同特征从上至下构建分类节点的顺序。Random Forest Classifier:使用相同的训练样本同时搭建多个独立的分类模型,然后通过投票的方式,以少数服从多数的原则做出最终的分类决策。随机选取特征。GBDT:按照一定次序搭建多个分类模型,模型之间存在依赖关系,一般,每一个后续加入的模型都需要对集成模型的综合性能有所贡献,最终期望整合多个弱分类器,搭建出具有更强分类能力的模型。
- #coding=utf8
- # 导入pandas用于数据分析。
- import pandas as pd
- # 从sklearn.tree中导入决策树分类器。
- from sklearn.tree import DecisionTreeClassifier
- # 使用随机森林分类器进行集成模型的训练以及预测分析。
- from sklearn.ensemble import RandomForestClassifier
- # 使用梯度提升决策树进行集成模型的训练以及预测分析。
- from sklearn.ensemble import GradientBoostingClassifier
- # 从sklearn.model_selection中导入train_test_split用于数据分割。
- from sklearn.model_selection import train_test_split
- # 我们使用scikit-learn.feature_extraction中的特征转换器
- from sklearn.feature_extraction import DictVectorizer
- # 依然使用sklearn.metrics里面的classification_report模块对预测结果做更加详细的分析。
- from sklearn.metrics import classification_report
- titanic = pd.read_csv('./Datasets/Titanic/train.csv')
- # 机器学习有一个不太被初学者重视,并且耗时,但是十分重要的一环,特征的选择,这个需要基于一些背景知识。根据我们对这场事故的了解,sex, age, pclass这些都很有可能是决定幸免与否的关键因素。
- print titanic.info()
- X = titanic[['Pclass', 'Age', 'Sex']]
- y = titanic['Survived']
- # 对当前选择的特征进行探查。
- X['Age'].fillna(X['Age'].mean(), inplace=True)
- X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state = 33)
- vec = DictVectorizer(sparse=False)
- # 转换特征后,我们发现凡是类别型的特征都单独剥离出来,独成一列特征,数值型的则保持不变。
- X_train = vec.fit_transform(X_train.to_dict(orient='record'))
- # 同样需要对测试数据的特征进行转换。
- X_test = vec.transform(X_test.to_dict(orient='record'))
- # 使用默认配置初始化单一决策树分类器。
- dtc = DecisionTreeClassifier()
- # 使用分割到的训练数据进行模型学习。
- dtc.fit(X_train, y_train)
- # 用训练好的决策树模型对测试特征数据进行预测。
- y_predict = dtc.predict(X_test)
- # 使用随机森林分类器进行集成模型的训练以及预测分析。
- rfc = RandomForestClassifier()
- rfc.fit(X_train, y_train)
- rfc_y_pred = rfc.predict(X_test)
- # 使用梯度提升决策树进行集成模型的训练以及预测分析。
- gbc = GradientBoostingClassifier()
- gbc.fit(X_train, y_train)
- gbc_y_pred = gbc.predict(X_test)
- print dtc.score(X_test, y_test)
- # 输出更加详细的分类性能。
- print classification_report(y_predict, y_test, target_names = ['died', 'survived'])
- # 输出随机森林分类器在测试集上的分类准确性,以及更加详细的精确率、召回率、F1指标。
- print 'The accuracy of random forest classifier is', rfc.score(X_test, y_test)
- print classification_report(rfc_y_pred, y_test)
- # 输出梯度提升决策树在测试集上的分类准确性,以及更加详细的精确率、召回率、F1指标。
- print 'The accuracy of gradient tree boosting is', gbc.score(X_test, y_test)
- print classification_report(gbc_y_pred, y_test)
单一决策树结果:
随机森林,GDBT结果:
预测性能: GDBT最佳,随机森林次之
一般,工业界为了追求更加强劲的预测性能,使用随机森林作为基线系统(Baseline System)。
chapter02 三种决策树模型:单一决策树、随机森林、GBDT(梯度提升决策树) 预测泰坦尼克号乘客生还情况的更多相关文章
- GBDT 梯度提升决策树简述
首先明确一点,gbdt 无论用于分类还是回归一直都是使用的CART 回归树.不会因为我们所选择的任务是分类任务就选用分类树,这里面的核心是因为gbdt 每轮的训练是在上一轮的训练的残差基础之上进行训练 ...
- 机器学习之路:python 集成分类器 随机森林分类RandomForestClassifier 梯度提升决策树分类GradientBoostingClassifier 预测泰坦尼克号幸存者
python3 学习使用随机森林分类器 梯度提升决策树分类 的api,并将他们和单一决策树预测结果做出对比 附上我的git,欢迎大家来参考我其他分类器的代码: https://github.com/l ...
- 【深度森林第三弹】周志华等提出梯度提升决策树再胜DNN
[深度森林第三弹]周志华等提出梯度提升决策树再胜DNN 技术小能手 2018-06-04 14:39:46 浏览848 分布式 性能 神经网络 还记得周志华教授等人的“深度森林”论文吗?今天, ...
- 机器学习之路:python 集成回归模型 随机森林回归RandomForestRegressor 极端随机森林回归ExtraTreesRegressor GradientBoostingRegressor回归 预测波士顿房价
python3 学习机器学习api 使用了三种集成回归模型 git: https://github.com/linyi0604/MachineLearning 代码: from sklearn.dat ...
- Spark2.0机器学习系列之6:GBDT(梯度提升决策树)、GBDT与随机森林差异、参数调试及Scikit代码分析
概念梳理 GBDT的别称 GBDT(Gradient Boost Decision Tree),梯度提升决策树. GBDT这个算法还有一些其他的名字,比如说MART(Multiple Addi ...
- C++二级指针第三种内存模型
#include "stdio.h" #include "stdlib.h" #include "string.h" void main() ...
- ESPlatform 支持的三种群集模型 —— ESFramework通信框架 4.0 进阶(09)
对于最多几千人同时在线的通信应用,通常使用单台服务器就可以支撑.但是,当同时在线的用户数达到几万.几十万.甚至百万的时候,我们就需要很多的服务器来分担负载.但是,依据什么规则和结构来组织这些服务器,并 ...
- Reactor三种线程模型与Netty线程模型
文中所讲基本都是以非阻塞IO.异步IO为基础.对于阻塞式IO,下面的编程模型几乎都不适用 Reactor三种线程模型 单线程模型 单个线程以非阻塞IO或事件IO处理所有IO事件,包括连接.读.写.异常 ...
- HTTPD三种工作模型
HTTPD三种工作模型 MPM是apache的多道处理模块,用于定义apache对客户端请求的处理方式.在linux中apache常用的三种MPM模型分别是prefork.worker和event. ...
随机推荐
- Python day21模块介绍4(logging模块,configparser模块)
1.日志等级从上往下依次降低 logging.basicConfig(#日志报错打印的基础配置 level=logging.DEBUG, filename="logger.log" ...
- 深度排序与alpha混合
原文: https://blogs.msdn.microsoft.com/shawnhar/2009/02/18/depth-sorting-alpha-blended-objects/ 翻译:李现民 ...
- Android 利用ViewPager、Fragment、PagerTabStrip实现多页面滑动效果
本文主要介绍如何利用ViewPager.Fragment.PagerTabStrip实现多页面滑动效果.即google play首页.新浪微博消息(at.评论.私信.广播)页面的效果.ViewPage ...
- Unity项目中显示项目的FPS
using UnityEngine; using System.Collections; public class ShowFpsOnGUI : MonoBehaviour { public floa ...
- Java开发常用Util工具类-StringUtil、CastUtil、CollectionUtil、ArrayUtil、PropsUtil
字符串工具类 StringUtil.java package com.***.util; /** * StringUtil * @description: 字符串工具类 **/ public clas ...
- 百度定位SDK
按照官网要求配置SHA1和包名生成ak秘钥 生成秘钥命令: keytool -list -v -keystore debug.keystore 密码:原始密码为android 添加libs文件夹并在g ...
- java MongoDB查询(一)简单查询
前言 MongoDB的java驱动提供了查询的功能,查询条件也是bson对象,这篇就看下怎么进行简单的数据查询 1.数据结构 集合:firstCollection 数据内容: { "_id& ...
- Mac下找不到gl.pc和glu.pc
在用pkg-config可以用来自动查找对应库的include和lib文件,方便编译.它主要通过PKG_CONFIG_PATH和/usr/lib/pkgconfig目录下的.pc文件进行自动配置.在c ...
- python-day3笔记
1.通信是软件(计算机)与软件(计算机)之间的通信 2.网络指的是: 一:计算机与计算机之间通过物理连接介质(网络设备)连接到一起:光纤--物理连接介质,和网线一样. 二:计算机与计算机之间基于网络协 ...
- ubuntu软件(查看文件差异)
你可以在ubuntu系统自带的软件--->ubuntu软件中心输入:meld diff 就可以安装.