机器学习基础——分类算法之决策树、随机森林、Titanic乘客生存分类
目录
1 认识决策树
1.1 信息增益、信息熵的计算
1.2 举例计算编辑
1.3 决策树的分类依据
1.4 sklearn决策树API
2 泰坦尼克号乘客生存分类
2.1 案例背景
2.2 数据描述
2.3 步骤分析
2.4 代码实现
2.4.1 调入包
2.4.1 数据处理
2.4.2 估计器流程
2.4.3 导出决策树的结构
3 决策树的优缺点及改进
4 集成学习方法——随机森林
4.1 集成学习方法
4.2 随机森林
4.3 随机森林建立多个决策树过程
4.4 随机森林API
4.5 随机森林进行预测(超参数调优)
4.6 随机森林的优点
1 认识决策树
1.1 信息增益、信息熵的计算
1.2 举例计算
1.3 决策树的分类依据
ID3 信息增益 最大的准则
C4.5 信息增益比最大的准则
- CART 回归树:平方误差最小 分类树:基尼系数 在sklearn中可以选择可以划分的默认原则
1.4 sklearn决策树API
2 泰坦尼克号乘客生存分类
2.1 案例背景
kaggkle决策树案例:泰坦尼克号沉没是历史上最臭名昭着的沉船之一。1912年4月15日,在她的处女航中,泰坦尼克号在与冰山相撞后沉没,在2224名乘客和机组人员中造成1502人死亡。这场耸人听闻的悲剧震惊了国际社会,并为船舶制定了更好的安全规定。 造成海难失事的原因之一是乘客和机组人员没有足够的救生艇。尽管幸存下沉有一些运气因素,但有些人比其他人更容易生存,例如妇女,儿童和上流社会。 在这个案例中,我们要求您完成对哪些人可能存活的分析。特别是,我们要求您运用机器学习工具来预测哪些乘客幸免于悲剧。
数据来源:https://www.kaggle.com/c/titanic
2.2 数据描述
我们提取到的数据集中的特征包括票的类别,是否存活,乘坐班次,年龄,登陆home.dest,房间,船和性别等。
经过观察数据得到:
- 1 乘坐班是指乘客班(1,2,3),是社会经济阶层的代表。
- 2 其中age数据存在缺失。
2.3 步骤分析
- 1.获取数据 pd读取数据
- 2.数据基本处理
- 2.1 确定特征值,目标值 选择有影响的特征[年龄]、[阶级]、[性别]
- 2.2 缺失值处理 fillna()
- 2.3 数据集划分
- 3.特征工程(字典特征抽取) pd转化字典,特征抽取
- 4.机器学习 决策树估计器流程
- 5.模型评估
2.4 代码实现
2.4.1 调入包
from sklearn.model_selection import train_test_split
import pandas as pd
import numpy as np
from sklearn.feature_extraction import DictVectorizer#转换成one_hot代码
from sklearn.tree import DecisionTreeClassifier,export_graphviz#决策树、导出决策树
2.4.1 数据处理
- DictVectorizer(sparse=False) 字典特征抽取返回one_hot编码
具体的做法看字典特征提取DictVectorizer(特征工程之特征提取)
- x_test.to_dict(orient="records") 可以pandas DataFrame转换为词典列表,其中1个词典代表1行
ef decision():"""决策树对于泰坦尼克号进行预测生死:return:None"""#获取数据titan=pd.read_csv("C:\\Users\\zoutong\\Desktop\\programming\data\\machine learning\\train.csv")#处理数据,找出特征值和目标值x=titan[["Pclass","Age","Sex"]]y=titan["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)#进行处理(特征工程) 特征->类别->one_hot代码dict=DictVectorizer(sparse=False)#DictVectorizer(sparse=False)会返回一个one-hot编码矩阵x_train=dict.fit_transform(x_train.to_dict(orient="records"))#pandas DataFrame转换为词典列表,其中1个词典代表1行print(dict.get_feature_names())x_test = dict.transform(x_test.to_dict(orient="records"))print(x_train)
这个是转换成one_hot代码的数据
2.4.2 估计器流程
#用决策树进行分类dec=DecisionTreeClassifier()dec.fit(x_train,y_train)#预测准确率print("预测的准确率:",dec.score(x_test,y_test))
预测的准确率: 0.8116591928251121
2.4.3 导出决策树的结构
安装graphiviz教程:Win / Mac安装Graphviz - 哔哩哔哩
#导出决策树的结构export_graphviz(dec,out_file="./decision tree.dot",feature_names=["年龄","pclass","男性","女性"])
Dot文档中的内容:
digraph Tree {
node [shape=box, fontname="helvetica"] ;
edge [fontname="helvetica"] ;
0 [label="女性 <= 0.5\ngini = 0.476\nsamples = 668\nvalue = [407, 261]"] ;
1 [label="pclass <= 2.5\ngini = 0.389\nsamples = 242\nvalue = [64, 178]"] ;
0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ;
2 [label="年龄 <= 2.5\ngini = 0.103\nsamples = 128\nvalue = [7, 121]"] ;
1 -> 2 ;
3 [label="pclass <= 1.5\ngini = 0.5\nsamples = 2\nvalue = [1, 1]"] ;
2 -> 3 ;
4 [label="gini = 0.0\nsamples = 1\nvalue = [1, 0]"] ;
3 -> 4 ;
5 [label="gini = 0.0\nsamples = 1\nvalue = [0, 1]"] ;
3 -> 5 ;
6 [label="年龄 <= 37.0\ngini = 0.091\nsamples = 126\nvalue = [6, 120]"] ;
2 -> 6 ;
7 [label="pclass <= 1.5\ngini = 0.044\nsamples = 88\nvalue = [2, 86]"] ;
6 -> 7 ;
8 [label="gini = 0.0\nsamples = 44\nvalue = [0, 44]"] ;
7 -> 8 ;
9 [label="年龄 <= 26.5\ngini = 0.087\nsamples = 44\nvalue = [2, 42]"] ;
7 -> 9 ;
10 [label="年龄 <= 25.5\ngini = 0.165\nsamples = 22\nvalue = [2, 20]"] ;
9 -> 10 ;
11 [label="年龄 <= 23.0\ngini = 0.091\nsamples = 21\nvalue = [1, 20]"] ;
10 -> 11 ;
12 [label="gini = 0.0\nsamples = 14\nvalue = [0, 14]"] ;
11 -> 12 ;
13 [label="年龄 <= 24.5\ngini = 0.245\nsamples = 7\nvalue = [1, 6]"] ;
11 -> 13 ;
Dot转化为PNG:
3 决策树的优缺点及改进
- 优点:
- 简单的理解和解释,树木可视化。
- 需要很少的数据准备,其他技术通常需要数据归一化
- 缺点:
- 决策树学习者可以创建不能很好地推广数据的过于复杂的树,容易发生过拟合。
- 改进:
- 减枝cart算法
- 随机森林(集成学习的一种)
- 注:企业重要决策,由于决策树有很好的分析能力,在决策过程应用较多。
4 集成学习方法——随机森林
4.1 集成学习方法
集成学习通过建立几个模型组合的来解决单一预测问题。他的工作原理是生成多个分类器/模型,各自独立的学习和做出预测。这些预测最后结合成但预测,因此优于任何一个单分类的做出预测。
4.2 随机森林
定义:在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。比如4个决策树结果是T,1个决策树结果是F,那么随机森林结果是T.
4.3 随机森林建立多个决策树过程
N个样本,M个特征
单个树建立过程:
- 随机在N个样本当中选择一个样本,重复N次 样本有可能重复
- 随机在M个特征当中选出m个特征 m取值
- 建立10棵决策树,样本、特征大多不一样 随机有放回的抽样bootstrap
- 为什么要随机抽样训练集?
如果不进行随机抽样,每棵树的训练集都一样,那么最终训练出的树分类结果也是完全一样。
- 为什么要有放回抽样?
如果不是有放回的抽样,那么每棵树的训练样本都是不同,都是没有交集的,这样每棵树都是“有偏”的,都是绝对”片面的”,也就是说每棵树训练出来的都是有很大的差异的;而随机森林最后分类取决于多棵树(弱2分类器)的投票表决。
4.4 随机森林API
- n_estimator决策树的数量
- max_depth每棵树的深度限制
4.5 随机森林进行预测(超参数调优)
rf=RandomForestClassifier()param={"n_estimators":[120,200,300,500,800,1200],"max_depth":[5,8,15,25,30]}#网格搜索与交叉验证gc=GridSearchCV(rf,param_grid=param,cv=2)gc.fit(x_train,y_train)print("准确率:",gc.score(x_test,y_test))print("查看选择的参数模型:",gc.best_params_)
准确率: 0.8071748878923767
查看选择的参数模型: {'max_depth': 5, 'n_estimators': 300}
4.6 随机森林的优点
- 在当前所有算法中,有极好的准确率
- 能够有效地运行在大数据集上
- 能够处理具有高维特征的输入样本,而且不需要降维
- 能够评估割让给特征在分类问题上的重要性
缺点基本上很少,有以下两点
- 有一点就是要给定参数,参数选取很重要
- 还有一点就是训练集特征提取
机器学习基础——分类算法之决策树、随机森林、Titanic乘客生存分类相关推荐
- 机器学习中的算法(1)-决策树模型组合之随机森林与GBDT
版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...
- 机器学习实践之集成方法(随机森林和AdaBoost元算法提高分类性能)
本文根据最近学习机器学习书籍网络文章的情况,特将一些学习思路做了归纳整理,详情如下.如有不当之处,请各位大拿多多指点,在此谢过. (未添加文章标签,特此补上,2018.1.14记.) 一.概述 ...
- 机器学习基础(四)——决策树与随机森林
决策树与随机森林 文章目录 决策树与随机森林 一.知识概要(一) 二.决策树使用的算法 三.sklearn决策树API 四.决策树的案例 1. 数据清洗 2. 特征工程 3. 调用决策树API 五.集 ...
- python与算法社区_【Python算法】分类与预测——Python随机森林
[Python算法]分类与预测--Python随机森林 1.随机森林定义 随机森林是一种多功能的机器学习算法,能够执行回归和分类的任务.同时,它也是一种数据降维手段,在处理缺失值.异常值以及其他数据探 ...
- 机器学习——决策树+随机森林
目录 决策树 认识决策树 决策树的生成 信息的单位--比特 信息熵 决策树的划分依据之一--信息增益 例题--银行贷款分析 决策树的其他分类依据 案例--泰坦尼克号乘客生存分类 决策树的结构.本地保存 ...
- 机器学习算法篇(随机森林树)
随机森林树: 1.定义: 随机森林只利用多颗决策树对样本进行训练并预测的一种分类器,可回归可分类:随机森林是基于多颗决策树的集成算法,常见决策树算法主要分为: ID3(利用信息增益进行特征选择),C4 ...
- 【RF分类】基于matlab随机森林算法数据分类【含Matlab源码 2048期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[RF分类]基于matlab随机森林算法数据分类[含Matlab源码 2048期] 获取代码方式2: 付费专栏Matlab智能算法神经网络 ...
- R语言惩罚逻辑回归、线性判别分析LDA、广义加性模型GAM、多元自适应回归样条MARS、KNN、二次判别分析QDA、决策树、随机森林、支持向量机SVM分类优质劣质葡萄酒十折交叉验证和ROC可视化
最近我们被客户要求撰写关于葡萄酒的研究报告,包括一些图形和统计输出. 介绍 数据包含有关葡萄牙"Vinho Verde"葡萄酒的信息.该数据集有1599个观测值和12个变量,分别是 ...
- 决策树随机森林GBDTXGBoost学习笔记以及代码实现
文章目录 1. 引入 1.1 决策树 1.2 随机森林 1.3 GBDT(Gradient Boosting Decision Tree)梯度提升决策树 1.4 XGBoost(eXtreme Gra ...
最新文章
- python3 异步 asyncio aiohttp aiohttp-requests aiofiles 使用
- deepin 15.11镜像下载地址
- 外卖匹配系统_“外卖智能算法”和大学生有啥关系?来自工科生的专业分析
- ORACLE查询保留字
- python下载-各种版本的Python下载安装教程
- 2022年Java常用的框架汇总,你常用哪一个?
- A315-56 Compal LA-H801P LA-J801P宏基笔记本点位图
- power bi数据分析_设置Power BI数据网关
- Matlab 根号的输入
- google浏览器截取长图
- 产品 • B端和C端产品经理有什么区别?
- 那些年,我开发过的软件
- 行为识别阅读笔记(paper + parted code):Beyond Frame-level CNN Saliency-Aware 3-D CNN with LSTM for Video Acti
- 智能门铃app开发的功能有哪些
- excel2016打开空白解决方法
- 2022-2028全球深海发电机控制器行业调研及趋势分析报告
- win8信息服务器不可用怎么办,win8系统rpc服务器不可用怎么办?提示rpc服务器不可用处理方法介绍...
- 百度搜索引擎中的特殊符号和搜索语句
- 如何下载Jason2测高数据
- 数据库编程加入transaction
热门文章
- 任天堂switch修改服务器,任天堂switch将退在线服务器 玩家似乎并不买账
- python从网址爬图片协程_python协程gevent案例 爬取斗鱼图片过程解析
- 乌克兰基辅一世遗修道院起火 现场火光照亮夜空
- word打印机显示服务器脱机,excel服务器-办公室常识——共享服务器文件报错,共享打印机无法打印的解决办法(解决word、excel不能打印))...
- 天馈线测试仪具备什么功能
- 屏幕尺寸,分辨率,ppi换算分析
- Groovy和Grails介绍(1)
- 坐标旋转公式-- 角度和弧度
- 1.【Linux】如何在Ubuntu18.04上安装微信
- 通俗易懂:非线性与线性的区别是什么?