决策树:从根节点开始一步步到叶子节点,所有的数据最后都落到叶子节点里面,既可以用来做分类也可以用来做回归

树的组成: 1.根节点(第一个参数)

2.非子叶节点与分支: 中间过程

3. 子叶节点,最终的决策结果

对于一些连续的变量来说,通常使用一刀切的方式。

决策树的训练与测试

训练阶段通过构造一棵树,即选择特征作为这一层的判断

测试:根据构造出来的树结构,将测试数据从上到下走一遍

决策树特征选择的衡量标准

对每一个特征把数据分开后,求一个熵值,熵值越大,表示当前叶子节点的混乱度越高

熵值的公式: -∑p*logp   p表示的是概率

不确定性越高,熵值越大,物体概率为0和1时,熵值最小,当物体的概率为0.5时,熵值越大

在ID3中,使用信息增益,即没经过特征删选前的熵和经过特征删选后的熵之差,即不确定性的降低(两熵之差)

对于熵求解和信息增益的实例

下面使用了4个特征,判断的结果是是否去打球

上述以天气特征做一个说明:

没有根据特征进行区分的时候,所有样本都在一个叶子节点中,根据计算公式:熵 =  -9/14*log9/14 - 5/14*log5/14 = 0.940

使用天气进行特征分离时,有sunny, overcast, rainy,根据特征的类别分成3个叶子节点

第一个叶子节点的标签为 2个yes, 3个no  熵 = -2/5*log(2/5) - 3/5*log(3/5)  = 0.971

第二个叶子节点的标签为4个yes  熵 = -5/5 * log(5/5) = 0

第三个叶子节点的标签为3个yes, 2个no  熵 = -3/5*log3/5 - 2/5*log2/5 = 0.971

总的熵为: 5/14 * 0.971 + 4/14*0 + 5/14 * 0.971  = 0.693

信息增益 = 0.940 - 0.639 = 0.247

通过相同的方法,求得其他特征所获得的信息增益,来判断哪一个特征作为叶子节点的判别特征

信息增益率: C4.5

对于像ID这样的特征,可以把每一个样本都进行分开,因为单独的样本,信息熵是等于0,但是明显的ID特征不具有判别性,因此引入了信息增益率

即 在原来的基础上除于叶子节点的个数, 即 假如id有3个, 那么此时的熵 = (-1/3log1/3) * 1/3 * 3 , 此时的熵值还是很大的,这样id特征就会被弃用

CART: 使用gini系数来作为衡量标准, GINI = 1 - ∑p^2 p表示概率,概率越小,熵值越大

对于连续的特征,我们该如何选择分界点,这里我们使用贪心算法,将每种可能性都试一遍,首先将特征进行排序,比如身高特征:60, 75, 80, 85, 90, 95, 100, 120, 125, 220, 如果进行二分,这里有9个分界点,选择一个能将数据尽量分开的分界点,即熵值最小的分界点

决策树的剪枝策略,、

目的: 为了防止由于决策树过大,而导致的过拟合的风险

剪枝策略: 预剪枝 , 后剪枝

预剪枝:边建立决策树边进行剪枝操作(更实用)  控制树的深度, 叶子节点的个数,叶子节点的样本数,信息增益量

后剪枝: 通过一定的衡量标准

损失函数:Ca(T) = C(T) + a(Teaf)    C(T)表示gini系数*样本数, a表示惩罚因子, Teaf表示叶子节点的个数,叶子节点越多,惩罚的越多,损失函数越大

sklearn决策树中所涉及的参数

1.criterion gini or entropy  使用gini系数还是使用熵

2.splitter best or random 前者是所有特征找到最好的切分点,后者是随机特征,这样在特征多的时候,降低运行速度

3.max_features None(所有) 当样本的特征量小于50时,使用所有的

4.max_depth  表示最大的树深度

5.min_samples_split  叶子节点最小的样本数,当小于这个值时就不进行分割

6.min_samples_leaf  如果某叶子节点的个数小于样本数,那么该叶子节点和兄弟节点将被一起剪枝

7.min_weight_fraction_leaf  叶子节点所有样本权重和的最小值,如果样本的分布类型偏差很大就会引入这个值

8.max_leaf_nodes 限制最大叶子节点数

9.class_weight 指定样本各类别的权重,主要防止训练集某些类型的样本过多导致训练的决策树过于偏向这些类别

10.min_impurity_split 这个值限制了决策树的增长,比如信息增益,基尼系数小于阈值就停止增长

代码:

1.选择max_depth进行树的可视化展示

2.进行决策树代码的实例化

3.使用GridSeach网格搜索进行参数的选择

4. 根据rfr.feature_importances_ 得分特征的重要性比例

# 1 决策树的可视化展示
from sklearn import tree
from sklearn.datasets.california_housing import fetch_california_housing
housing = fetch_california_housing()dtr = tree.DecisionTreeRegressor(max_depth=2)
dtr.fit(housing[:, [6, 7]], housing.target)dot_data = \tree.export_graphviz(dtr,out_file = None,feature_names=housing.feature_name[6:8],filled = True,impurity = False,rounded = True)import pydotplus
graph = pydotplus.graph_from_dot_data(dot_data)
graph.get_nodes()[7].set_fillcolor('#FFF2DD')
from IPython.display import Image
Image(graph.create_png())# 2.决策树使用实例
# from sklearn import tree
from sklearn.cross_validation import train_test_split
#
# # 数据拆分
train_x, test_x, train_y, test_y = train_test_split(housing.data, housing.target, test_size=0.1, random_state=42)
# 建立决策树
dtr = tree.DecisionTreeRegressor(random_state=42)
# 训练数据
dtr.fit(train_x, train_y)
# 打印出dtr得分, 这里的得分表示的是准确率
print(dtr.score(test_x, test_y))# 3. 使用GridSearch进行组合参数选择from sklearn.grid_search import GridSearchCV
from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets.california_housing import fetch_california_housing# 载入数据
housing = fetch_california_housing()
# 列出参数列表
tree_grid_parameter = {'min_samples_split':list((3, 6, 9)), 'n_estimators':list((10, 50, 100))}
# 进行参数的搜索组合
grid = GridSearchCV(RandomForestRegressor(), param_grid=tree_grid_parameter, cv=3)
grid.fit(train_x, train_y)
print(grid.grid_scores_) # 打印得分
print(grid.best_params_) # 打印最好的参数组合
print(grid.best_score_)  # 打印最好的得分# 4. 显示出随机森林特征的重要性,并做条形图
import pandas as pd
import matplotlib.pyplot as pltrfr = RandomForestRegressor(min_samples_split=6, n_estimators=100)
rfr.fit(train_x, train_y)
print(rfr.score(test_x, test_y))
# 使用pd.Series进行组合,值是特征重要性的值,index是样本特征
feature_important = pd.Series(rfr.feature_importances_, index = housing.feature_names).sort_values(ascending=False)
figure = plt.figure(figsize=(8, 6))
plt.bar(feature_important.index, feature_important.data)
plt.show()

特征重要性图

转载于:https://www.cnblogs.com/my-love-is-python/p/10274259.html

机器学习入门-决策树算法相关推荐

  1. python决策树实例_Python机器学习之决策树算法实例详解

    本文实例讲述了Python机器学习之决策树算法.分享给大家供大家参考,具体如下: 决策树学习是应用最广泛的归纳推理算法之一,是一种逼近离散值目标函数的方法,在这种方法中学习到的函数被表示为一棵决策树. ...

  2. 机器学习:决策树算法(ID3算法)的理解与实现

    机器学习:决策树算法(ID3算法)的理解与实现 文章目录 机器学习:决策树算法(ID3算法)的理解与实现 1.对决策树算法的理解 1.概述 2.算法难点 选择最优划分属性 1.信息熵 2.信息增益 2 ...

  3. 机器学习之决策树算法(1)

    上一集中,我们讲解了K近邻算法,那是一个十分入门的算法,并没有显式的训练方法.这次,我们要做一个真正的机器学习算法,决策树算法.当然,它也是一个多元分类器.相比较K近邻算法对于数值型的数据处理较为舒服 ...

  4. 【机器学习】决策树算法

    在前一期介绍搭建结合机器学习的CI/CD管道时,无意中提到了算法分类.在受监督学习的分类中,有一个既适用于回归又适用于分类的算法,即我们今天要介绍的决策树算法(CART, Classification ...

  5. 机器学习算法——决策树算法详细介绍,并使用sklearn实现案例预测,可视化决策树

    目录 一.决策树算法简介 二.决策树分类原理 1.熵 1.1 概念 1.2 案例 2.决策树的划分依据一:信息增益 2.1 概念 2.2 案例: 3.决策树的划分依据二:信息增益率 3.1 概念 3. ...

  6. 机器学习之决策树算法前期(创建、分类及展示)

    一.什么是决策树? 决策树算法是一种逼近离散函数值的方法.它是一种典型的分类方法,首先对数据进行处理,利用归纳算法生成可读的规则和决策树,然后使用决策对新数据进行分析.本质上决策树是通过一系列规则对数 ...

  7. 机器学习3决策树算法模型

    决策树算法模型 1.什么是决策树? 2.决策树的归纳 2.1 (选择分裂特征)特征的选择 2.2 决策树的生成 2.2.1 ID3 算法 2.2.2 C4.5 算法 2.2.3 Card算法 2.2 ...

  8. 机器学习基础 决策树算法

    文章目录 一.决策树算法简介 二.决策树分类原理 1. 熵 1.1 概念 1.2 案例 2. 决策树的划分依据一----信息增益 2.1 概念 2.2 案例 3. 决策树的划分依据二----信息增益率 ...

  9. 机器学习之决策树算法-概念和学习过程

    1.      概念 决策树是通过一系列规则对数据进行分类的过程,它提供一种在什么条件下会得到什么值的类似规则的方法.决策树分为分类树和回归树两种,分类树对离散变量做决策树,回归树对连续变量做决策树. ...

最新文章

  1. c语言二级编程题答案免费下载,全国计算机等级考试二级C语言上机编程题参考答案...
  2. 手撕设计模式之「单例模式」(详细解析)
  3. php post get content-type,content-type - java访问php接口问题,$_POST默认接收的contentType是?...
  4. CSS基础---日记4
  5. 还在“葛优躺”?伤腰还容易脊椎变形!
  6. C++ 数组在内存中的分配
  7. Java NIO系列教程(十 五)Java NIO Path
  8. C语言课程设计 简单的单词学习系统
  9. 华为数字化转型的钻石模型
  10. 勒索病毒来袭!及时备份数据吧!
  11. c语言offset函数,offset偏移量 offset函数怎么用,详细一点…
  12. 【报告分享】2021巨量引擎金融行业生态及用户洞察报告-巨量算数(附下载)
  13. 「应用安全」应用安全原则
  14. 阿里云生态峰会实录(中)
  15. 支付功能----第三方支付公司
  16. 一些常用技术文档网站
  17. 三个值得关注的零撸空投项目,请收藏
  18. vb.net 文本转语音
  19. Linux操作系统下如何查看SQLite的数据库文件
  20. zebra源码分析-导读

热门文章

  1. delphi listview怎么自动宽度_数控弯字机怎么对刀呢?
  2. python数据预测模型算法_如何对时间序列预测问题计算基准预测(python)
  3. Logistic Regression(逻辑回归) +python3.6(pycharm)实现
  4. Tensorflow安装与测试
  5. 《星球大战:前线2》预告片发布
  6. web login do.php,dologin.php
  7. 用Php设置Iptables,如何使用CSF添加自定义iptables规则
  8. 华为云中文预训练模型发布:全球最大、千亿参数,逼近人类神经元
  9. Nature盘点的这些代码,个个都改变了科学:Fortran、AlexNet还有arXiv等
  10. 给GPT-2加上“人类偏好”补丁,它说的话就越来越有人情味了丨代码已开源