分类算法-决策树、随机森林

决策树

1. 认识决策树

决策树模型呈树形结构。在分类问题中,表示基于特征对实例进行分类的过程,它可以认为是if-then规则的集合。在决策树的结构中,每一个实例都被一条路径或者一条规则所覆盖。

决策树学习通常包括三个步骤:特征选择、决策树的生成和决策树的修剪。

2. 信息论基础

信息熵:表示了信息的不确定性,单位为比特。

当所有事件发生概率相等时,信息熵最大,其不确定性最大

公式如下:

信息增益:

信息增益是决策树的划分依据之一。

其定义为:特征A对训练数据集D的信息增益为g(D,A),定义为集合D的信息熵H(D)与特征A给定条件下D的信息条件熵H(D|A)之差。
其公式为:

注:信息增益表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。

3.sklearn决策树API

class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, max_depth=None,random_state=None)

决策树分类器

criterion:默认是’gini’系数,也可以选择信息增益的熵’entropy’

max_depth:树的深度大小

random_state:随机数种子

方法:

decision_path:返回决策树的路径

4.决策树的结构、本地保存

sklearn.tree.export_graphviz() ----该函数能够导出DOT格式

tree.export_graphviz(estimator,out_file='tree.dot’,feature_names=[‘’,’’])

graphviz 工具 能够将dot文件转换为pdf、png

5. 决策树的优缺点以及改进

优点:

简单的理解和解释,树木可视化。

需要很少的数据准备,其他技术通常需要数据归一化。

缺点:

决策树可能不稳定,因为数据的小变化可能会导致完全不同的树被生成。

改进:

减枝cart算法

随机森林

6. 案例–泰坦尼克号乘客生存分类

数据来源:http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt

流程:

1.pd读取数据

2.选择有影响的特征,处理缺失值

3.进行特征工程,pd转换字典,特征抽取----x_train.to_dict(orient=“records”)

4.决策树估计器流程

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.tree import DecisionTreeClassifier,export_graphvizdef decision():#  获取数据taitan = pd.read_csv("http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt")# 选择特征值和目标值x = taitan [['pclass','age','sex']]y = taitan ['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)x_train = dict.fit_transform(x_train.to_dict(orient = "records"))x_test = dict.fit_transform(x_test.to_dict(orient = "records"))# 用决策树进行预测dec = DecisionTreeClassifier(max_depth=5)dec.fit(x_train,y_train)print("测试集的预测准确率为:",dec.score(x_test,y_test))# 导出决策树结构export_graphviz(dec, out_file="tree.dot",feature_names=['年龄', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', '女性', '男性'])if __name__ == '__main__':decision()

结果为:

测试集的预测准确率为: 0.8054711246200608

集成学习方法–随机森林

1.什么是随机森林

集成学习通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成单预测,因此优于任何一个单分类的做出预测。

在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。

2.随机森林的过程、优势

根据下列算法而建造每棵树:

用N来表示训练用例(样本)的个数,M表示特征数目。

输入特征数目m,用于确定决策树上一个节点的决策结果;其中m应远小于M。

从N个训练用例(样本)中以有放回抽样的方式,取样N次,形成一个训练集(即bootstrap取样),并用未抽到的用例(样本)作预测,评估其误差。

为什么要随机抽样训练集?

如果不进行随机抽样,每棵树的训练集都一样,那么最终训练出的树分类结果也是完全一样的

为什么要有放回地抽样?

如果不是有放回的抽样,那么每棵树的训练样本都是不同的,都是没有交集的,这样每棵树都是“有偏的”,都是绝对“片面的”(当然这样说可能不对),也就是说每棵树训练出来都是有很大的差异的;而随机森林最后分类取决于多棵树(弱分类器)的投票表决。

随机森林的优点

在当前所有算法中,具有极好的准确率

能够有效地运行在大数据集上

能够处理具有高维特征的输入样本,而且不需要降维

能够评估各个特征在分类问题上的重要性

对于缺省值问题也能够获得很好得结果

3.集成学习API

class sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion=’gini’, max_depth=None, bootstrap=True, random_state=None)

随机森林分类器

n_estimators:integer,optional(default = 10)-----森林里的树木数量

criteria:string,可选(default =“gini”)-----分割特征的测量方法

max_depth:integer或None,可选(默认=无)-----树的最大深度

bootstrap:bool,optional(default = True)-----是否在构建树时使用放回抽样

max_features=“auto”-----每个决策树的最大特征数量

3.案例分析-泰坦尼克号乘客生存分类分析

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
def decision():#  获取数据taitan = pd.read_csv("http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt")# 选择特征值和目标值x = taitan [['pclass','age','sex']]y = taitan ['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)x_train = dict.fit_transform(x_train.to_dict(orient = "records"))x_test = dict.fit_transform(x_test.to_dict(orient = "records"))# 随机森林进行预测(超参数调优)rf = RandomForestClassifier()param = {"n_estimators":[120,200,300,500,800,1200],"max_depth":[5,8,15,25,30]}# 网络搜索与交叉验证gc = GridSearchCV(rf,param,cv=2)gc.fit(x_train, y_train)print("在测试集上准确率为:", gc.score(x_test, y_test))print("在交叉验证中测试的最好结果:", gc.best_score_)print("最好的参数模型:", gc.best_estimator_)
if __name__ == '__main__':decision()

结果为:

分类算法-决策树、随机森林相关推荐

  1. 机器学习5—分类算法之随机森林(Random Forest)

    随机森林(Random Forest) 前言 一.随机森林 1.什么是随机森林 2.随机森林的特点 3.随机森林的生成 二.随机森林的函数模型 三.随机森林算法实现 1.数据的读取 2.数据的清洗和填 ...

  2. R语言分类算法之随机森林(Random Forest)

    1.原理分析: 随机森林是通过自助法(boot-strap)重采样技术,从原始训练样本集N中有放回地重复随机抽取k个样本生成新的训练集样本集合,然后根据自助样本集生成k个决策树组成的随机森林,新数据的 ...

  3. 机器学习分类算法之随机森林(集成学习算法)

    目录 什么是集成学习? 随机森林 随机森林的生成算法 随机森林的随机性

  4. 金融风控机器学习第三十一天---拜师课堂 机器学习算法--决策树 随机森林

    ID3 c4.5的核心是熵 ID3 c4.5 cart 过拟合解决一般 用 剪枝 或者 随机森林 随机森林代码: #!/usr/bin/python # -*- coding:utf-8 -*-imp ...

  5. R语言基于Bagging算法(融合多个决策树)构建集成学习Bagging分类模型、并评估模型在测试集和训练集上的分类效果(accuray、F1、偏差Deviance):Bagging算法与随机森林对比

    R语言基于Bagging算法(融合多个决策树)构建集成学习Bagging分类模型.并评估模型在测试集和训练集上的分类效果(accuray.F1.偏差Deviance):Bagging算法与随机森林对比 ...

  6. 【机器学习】sclearn分类算法-决策树、随机森林

    分类算法-决策树.随机森林 1.决策树 1.1 认识决策树 1.2 信息论基础-银行贷款分析 1.3 决策树的生成 1.4 决策树的划分依据之一-信息增益 1.5 sklearn决策树API 1.6 ...

  7. sklearn分类算法-决策树、随机森林

    sklearn分类算法-决策树.随机森林 一.决策树 1.概念 决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法 比如: ...

  8. 随机森林实例:利用基于CART算法的随机森林(Random Forest)树分类方法对于红酒质量进行预测

    随机森林实例:利用基于CART算法的随机森林(Random Forest)树分类方法对于红酒质量进行预测 1.引言 2.理论基础 2.1 什么是决策树 2.2 特征选择的算法 2.2.1 ID3:基于 ...

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

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

最新文章

  1. 把数据库中有关枚举项值的数字字符串转换成文字字符串
  2. java swing 文件选择,设置默认文件选择路径,桌面路径
  3. 基于Python的QPSK音频的波形和频谱
  4. OpenCV与c语言图像融合
  5. .net 如何设置和检索特性信息(attribute)
  6. linux 远程挂载摄像头_如何实现嵌入式Linux下USB摄像头视频采集
  7. linux+svn+拉取版本_在linux客户端下管理svn版本库
  8. python常用开放工具_python学习笔记16-各种模块和开放工具收集整理
  9. C语言libcurl:提供特定主机和端口对的自定义地址--resolve
  10. 用 Javascript 验证表单(form)中多选框(checkbox)值
  11. 转 PHP函数---$_Get()和$_Post()的用法
  12. iOS上架app store下载步骤
  13. liunx系统文件中转站(ftp服务)项目
  14. WPS简历模板的图标怎么修改_简历无话可说怎么办?复试、调剂简历模板分享!...
  15. mysql如何获取当前时间_mysql怎么获取当前时间
  16. 《陶哲轩实分析》阅读
  17. 无线量子通信/无线量子通讯,5G下一代物联网的创新研究
  18. 原标题:跆拳道在中国斗殴中被武术团灭?韩国人看后表示不服
  19. 人生就是游戏,你如何遵守游戏规则?
  20. 2020年第十一届C/C++ B组第一场蓝桥杯省赛真题

热门文章

  1. 干货-Google支付后台验证操作流程【业务后台-GP后台流程】
  2. 2021 第四届安洵杯 MISC wp
  3. 水上运动装备的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  4. m4a怎么转换成mp3
  5. ServiceMesh和SideCar
  6. redis之十五(游标迭代器(过滤器)——Scan)
  7. led屏背后线路安装图解_科普:网格屏是什么意思?LED网格屏怎么安装
  8. 5月Github上最热门的数据科学和机器学习项目TOP5
  9. Vue/js 富文本编辑器、excel编辑器合集
  10. OpenCL设备存储形式