一、决策树

认识:决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法

举例说明:

案例一:

案例二: 如何去划分是否能得到贷款?

案例三:

用信息论讨论,信息的单位是比特

信息熵

开放信息和不开放任何信息,概率不同,得到信息的代价小一些,信息熵就是一种代价

因为信息不能为负,所以计算往往要加负号

“谁是世界杯冠军”的信息量应该比5比特少。

香农指出,它的准确信息量应该是: H = -(p1logp1 + p2logp2 + ... + p32log32)

信息熵大,不确定性大,正比关系

有些决策标准放的越早,不确定性减小的越多,因此,决策树的思想就是判断哪个特征最重要,能最小的减少不确定性即信息熵,同时叫信息增益最大

信息增益

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

A为一个特征,即一个条件

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

 信息增益的计算

例子理解公式:

信息熵计算的是类别 

以上证明了决策树分类的依据之一:信息增益最大

常见决策树分类依据及算法:

注意:基尼系数的划分更加仔细,因此sklearn里的默认是基尼系数

 语法

class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, max_depth=None,random_state=None) 决策树分类器

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

max_depth:树的深度大小

random_state:随机数种子

method:

decision_path:返回决策树的路径

案例四:

处理流程:

orient = 'records' 默认把一行转化为一个字典

from sklearn.feature_extraction import DictVectorizer
import pandas as pd
from sklearn.tree import DecisionTressClassifier, export_graphvizdef decision():titan = pd.read_csv("....")#处理数据,找出特征值和目标值x = titan[['pclass', 'age', 'sex']]y = titan['survived']print(x)# 缺失值处理,inplace 为True表示要替换x['age'].fillna['age'].mean(), inplace = True#先分割数据或现特征工程都可以,取决于结果,一般先分割,因为要预测,肯定要先分割x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.25)#进行处理(特征工程)特征-》类别-》one-hot编码,类别性的要转换为one-hot编码,否则无法计算dict = DictVectorizer(sparse = False)#转化成字典才能抽取,这里使用的是字典的特征提取,包括数值型的特征一起,不会改变数值型的数据x_train = dict.fit.transform(x_train.to_dict(orient = 'records'))print(dict.get_feature_names())x_test = dict.transform(x_test.to_dict(orient = 'records'))#一行一条数据print(x_train)# 决策时预测(默认参数)dec = DecisionTreeClassifier()#规定决策树深度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', 'plass=3rd', 'sex=female', '女性'] )return None

转化后类别表示:

使用默认参数的准确率:

语法(决策树可以可视化导出)

导出需要cmd里安装一个工具,见2,然后运行3,如果改变代码,想再得到图,需要再运行一次3命令

然后在相应的目录下找到生成的文件

由上图可见,基尼十分细致,将特征的具体的值也作为了判断依据

优点:

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

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

缺点:深度对于结果有影响,越复杂的树,可能造成过拟合

决策树学习者可以创建不能很好地推广数据的过于复杂的树,这被称为过拟合。

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

改进:(减少过拟合)

减枝cart算法(有API)

随机森林

二、随机森林【smart bagging】

集成学习方法:

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

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

不同于bagging:只有随机有放回抽取样本【只有bootsrap方法】

随机森林建立多个决策树的过程:

 【bootstrap方法】+ 【随机抽取特征方法】

算法

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

  • 用N来表示训练用例(样本)的个数,M表示特征数目。
  • 输入特征数目m,用于确定决策树上一个节点的决策结果;其中m应远小于M。
  • 从N个训练用例(样本)中以有放回抽样的方式,取样N次,形成一个训练集(即bootstrap取样),并用未抽到的用例(样本)作预测,评估其误差。

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

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

为什么要有放回地抽样?

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

语法:

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

随机森林分类器

【参数常用值上述已经给出】

随机森林的超参数

  • n_estimators
  • max_depth

实现:

from sklearn.feature_extraction import DictVectorizer
import pandas as pd
from sklearn.tree import DecisionTressClassifier, export_graphviz
from sklearn.ensemble import RandomforestClassifierdef decision():titan = pd.read_csv("....")#处理数据,找出特征值和目标值x = titan[['pclass', 'age', 'sex']]y = titan['survived']print(x)# 缺失值处理,inplace 为True表示要替换x['age'].fillna['age'].mean(), inplace = True#先分割数据或现特征工程都可以,取决于结果,一般先分割,因为要预测,肯定要先分割x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.25)#进行处理(特征工程)特征-》类别-》one-hot编码,类别性的要转换为one-hot编码,否则无法计算dict = DictVectorizer(sparse = False)#转化成字典才能抽取,这里使用的是字典的特征提取x_train = dict.fit.transform(x_train.to_dict(orient = 'records'))print(dict.get_feature_names())x_test = dict.transform(x_test.to_dict(orient = 'records'))print(x_train)#随即森林进行预测(超参数调优)rf = RandomforestClassifier()param = {'n_estimators':[120,200, 300, 500, 800, 1200], 'max_depth':[5,8,15,35,30]}#网格搜索与交叉验证进行调优gc = GridSearchCV(rf, param_grid=param, cv=2)##将创建的randomforest转嫁到了网格搜索创建的随机森林对象gc.fit(x_train, y_train)print('准确率:', gc.score(x_test, y_test))print('查看选择的参数模型:',gc.best_param_)     return None

结果显示:

【随机森林每次运行结果不一样】

优点:

  • 在当前所有算法中,具有极好的准确率
  • 能够有效地运行在大数据集上
  • 能够处理具有高维特征的输入样本,而且不需要降维
  • 能够评各个特征在分类问题上的重要性 对于缺省值问题也能够获得很好得结果

缺点:

害怕选不到好的参数

消耗的算力和资源较大

训练时间长

依然不能完全消除树之间的相关性

其他用途:

可做特征重要性分析【后续补充】

前几章内容总结:

机器学习(9)--决策树和随机森林相关推荐

  1. 机器学习中决策树的随机森林_决策树和随机森林在机器学习中的使用

    机器学习中决策树的随机森林 机器学习 (Machine Learning) Machine learning is an application of artificial intelligence ...

  2. 机器学习利器——决策树和随机森林

    更多深度文章,请关注:https://yq.aliyun.com/cloud 决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率, ...

  3. 机器学习之决策树与随机森林

    目录 1.了解熵.条件熵.互信息的概念及公式 1.1.熵 1.2.条件熵 1.3.信息增益/互信息 2.了解决策树 2.1.了解决策树的概念和特点以及和熵的关系 2.2.了解树生成的过程 2.3.了解 ...

  4. Spark 机器学习 —— 从决策树到随机森林

    构造训练数据 import org.apache.spark.mllib.linalg.Vectors import org.apache.spark.mllib.regression.Labeled ...

  5. 机器学习:决策树与随机森林

    决策树与随机森林 决策树 基本原理 优缺点 优点 缺点 使用决策树对鸢尾花分类 随机森林 基本原理 优缺点 优点 缺点 葡萄酒数据集的随机森林分类 决策树 基本原理 决策树算法是一种基于实例的算法,常 ...

  6. 机器学习 之 决策树和随机森林

    决策树和随机森林 什么是决策树 决策树组成 节点的确定方法 决策树基本流程 决策树的常用参数 代码实现决策树之分类树 决策树不同max_depth的学习曲线 网格搜索在分类树上的应用 回归树中不同ma ...

  7. 【机器学习】决策树与随机森林模型

    决策树: 决策树:是一种树形结构,其中每个内部节点(圆形表示特征)表示一个属性上的判断,每个分支(箭头)代表一个判断结果的输出,最后每个叶节点(正方形表示分类的结果)代表一种分类情况,本质是一颗由多个 ...

  8. ML之回归预测:利用十类机器学习算法(线性回归、kNN、SVM、决策树、随机森林、极端随机树、SGD、提升树、LightGBM、XGBoost)对波士顿数据集回归预测(模型评估、推理并导到csv)

    ML之回归预测:利用十类机器学习算法(线性回归.kNN.SVM.决策树.随机森林.极端随机树.SGD.提升树.LightGBM.XGBoost)对波士顿数据集[13+1,506]回归预测(模型评估.推 ...

  9. 【机器学习基础】(五):通俗易懂决策树与随机森林及代码实践

    与SVM一样,决策树是通用的机器学习算法.随机森林,顾名思义,将决策树分类器集成到一起就形成了更强大的机器学习算法.它们都是很基础但很强大的机器学习工具,虽然我们现在有更先进的算法工具来训练模型,但决 ...

最新文章

  1. linux停止客户端,linux – 从客户端打印motd停止ssh登录?
  2. 鼎尚影院计算机售票管理系统,电影院售票管理信息系统
  3. itemchanged信号找不到_失物 | 求FDU同学帮转帮找蓝牙键盘,坐标东区宿舍19号楼...
  4. Oracle-11g 从表空间删除数据文件
  5. 一般处理程序读写session
  6. Java jdk中的部分工具javac javaw javaws javadoc javah javap jar jdb jps的作用
  7. CVPR2020 | 华为GhostNet超越谷歌MobileNetV3
  8. JavaScript中的Array对象方法调用
  9. php array_diff 用法
  10. 导出DataTable数据到Word或者Excel
  11. 关于Synchronized的用法
  12. Android阿里云推送
  13. 郭霖老师的组合模式讲解
  14. python超级简单爬虫
  15. 深度学习的研究方向和发展趋势
  16. 创业是互联网创业好还是实体创业好? 营销值得学
  17. wireshark过滤器使用
  18. mysql带外_【技术分享】MySQL带外攻击(含演示视频)
  19. XML是什么,它可以做什么?——写给XML入门者
  20. 如何在Excel制作动态图

热门文章

  1. Keil5开发工具 --- 背景颜色绿色护眼
  2. js之原生js轮盘抽奖实例分析(幸运大转盘抽奖)
  3. 酷炫cmd命令行工具——windows terminal的详细配置
  4. 你有你的计划,世界另有计划这本书 万维钢
  5. Android Service保活方法总结
  6. 数学公式中的希腊字母读音
  7. 聊聊如何实施负载均衡
  8. android启动其他apk,Android 启动apk的常用方法
  9. 做业务的程序猿如何提升技能?
  10. 全国计算机二级考试web程序,2018年全国计算机二级web程序考试考什么内容