决策树算法-Decision Tree,有监督的学习算法,模仿的是人类做决策的过程。

定义:

从根节点开始一步一步走到叶子节点(决策),所有数据最终都会落到叶子节点,即可以做分类,也可以做回归。它适用于类别和连续输入(特征)和输出(预测)变量。基于树的方法把特征空间划分成一系列矩形,然后给每一个矩形安置一个简单的模型(像一个常数)。从概念上来讲,它们是简单且有效的。决策树越深入,决策规则就越复杂并且对数据的拟合越好。

根节点:最重要的节点(初始节点)

叶子节点:最终节点(最终的决策结果)

优点:便于理解和解释。树的结构可以可视化出来

由于训练决策树的数据点的数量导致了决策树的使用开销呈指数分布

能够处理数值型数据和分类数据

能够处理多路输出的问题

使用白盒模型。如果某种给定的情况在该模型中是可以观察的,那么就可以轻易的通过布尔逻辑来解释这种情况。相比之下,在黑盒模型中的结果就是很难说明清楚地。

可以通过数值统计测试来验证该模型

使该模型假设的结果与真实模型所提供的数据有些违反,其表现依旧良好

缺点:决策树模型容易产生一个过于复杂的模型,这样的模型对数据的泛化性能会很差。这就是所谓的过拟合.一些策略像剪枝、设置叶节点所需的最小样本数或设置数的最大深度是避免出现 该问题最为有效地方法。

决策树可能是不稳定的,因为数据中的微小变化可能会导致完全不同的树生成。这个问题可以通过决策树的集成来得到缓解

在多方面性能最优和简单化概念的要求下,学习一棵最优决策树通常是一个NP完全问题。因此,实际的决策树学习算法是基于启发式算法,例如在每个节点进行局部最优决策的贪心算法。这样的算法不能保证返回全局最优决策树。这个问题可以通过集成学习来训练多棵决策树来缓解,这多棵决策树一般通过对特征和样本有放回的随机采样来生成。

有些概念很难被决策树学习到,因为决策树很难清楚的表述这些概念。例如XOR,奇偶或者复用器的问题。

如果某些类在问题中占主导地位会使得创建的决策树有偏差。因此,我们建议在拟合前先对数据集进行平衡。

(优点缺点 from:1.10. 决策树 - scikit-learn 0.19.0 中文文档 - ApacheCN​sklearn.apachecn.org

)

根节点的选择:根节点是要非常有用的,分类效果要好,相当于是一个老大位置的特征,接着再去选择其次的特征。需要有一个衡量标准来选择根节点,就是熵值。

熵值:表示随机变量中不确定性的度量,也就是物体内部的混乱程度。数据的不确定性越大,熵值也就越大。A = [1,1,1,1,1,1,1,1,2,2],B = [1,2,3,4,5,6,7,8,9,1]。显然,A集合的熵要低,因为A只有2个类别,而B有9个类别,因此熵值会大很多。

信息增益:表示特征X使得类Y的不确定性减少的程度。增益是指熵值下降了多少。比如原始熵值10,经过决策后,熵值变为8了,因此增益就是10-8=2。看下哪个特征能够使得信息增益最大,这个特征就当做根节点。在剩下的当中再去找信息增益最大的,当做第二当家,以下下去做决策。

决策树算法计算策略:ID3:信息增益,拿ID来算信息增益时,会是最大的,而ID只是编号,对最终结果没有影响,但是我们却把它当作根节点的问题

C4.5:信息增益率(解决ID3问题,考虑自身熵)

CART(现在应用比较广):使用GINI系数来当衡量标准,公式

决策树剪枝策略:剪枝原因: 决策树过拟合风险很大

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

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

后剪枝,当建立决策树后来进行剪枝。通过一定的衡量标准,叶子节点越多,损失越大Cα(T)=C(T)+α|T|,其中,C(T)即是该 Node 和不确定性相关的损失、|T|则是该 Node 下属叶节点的个数。不妨设第 t 个叶节点含有Nt个样本且这Nt个样本的不确定性为Ht(T),那么新损失一般可以直接定义为加权不确定性:C(T)=|T|∑t=1NtHt(T)。 决策树的剪枝算法 | Python 与机器学习决策树的剪枝算法​www.carefree0910.com

练习代码

# -*- coding: utf-8 -*-

"""

Created on Fri Apr 13 21:49:57 2018

@author: Administrator

"""

import matplotlib.pyplot as plt

import pandas as pd

from sklearn import tree

from sklearn.datasets.california_housing import fetch_california_housing

from sklearn.model_selection import train_test_split

housing = fetch_california_housing()

print(housing.DESCR)

print('-'*20)

print(housing.data.shape)

print('-'*20)

print(housing.data[0])

print('-'*20)

print(housing.target[0])

print('-'*20)

print(housing.feature_names)

#from sklearn import tree

dtr = tree.DecisionTreeRegressor(max_depth = 2)

dtr.fit(housing.data[:, [6, 7]], housing.target)

#要可视化显示 首先需要安装 graphviz,可以直接conda 安装

#conda install python-graphviz

#或者到官网下载:http://www.graphviz.org/Download..php

dot_data = \

tree.export_graphviz(

dtr,

out_file = None,

feature_names = housing.feature_names[6:8],

filled = True,

impurity = False,

rounded = True

)

#pip install pydotplus

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()) #有问题

#把数据集进行切分

#from sklearn.model_selection import train_test_split

data_train, data_test, target_train, target_test = \

train_test_split(housing.data, housing.target, test_size = 0.1, random_state = 42)

dtr = tree.DecisionTreeRegressor(random_state = 42)

dtr.fit(data_train, target_train)

dtr.score(data_test, target_test)

print(dtr.score(data_test, target_test))

决策树模型有以下几个特点。训练过程比较简单,也就是在实际使用中比较好实现。

在对一个新的样本进行预测时,时间复杂度是 O(k),这个k是树的深度,也就是树有多少层。因此决策树的预测过程的非常快速而简单。

决策树在训练过程中也能算出每个特征(feature)的重要程度。

想比于其它分类算法,比如SVM和逻辑回归,决策树更能简单地应用到多元分类的问题上。

如不加限制,决策树模型很容易出现过拟合(overfitting)。

针对决策树模型容易过拟合的特点,目前常见的有以下几个性质来进行控制。树的深度,也就是树有多少层。

一个节点能被继续拆分出子节点所需要的包含最少的样本个数。

最底层节点所需要包含的最少样本个数。

以上三个决策树都相当于它的超参数(hyper-parameter), 也就是我们在训练过程中需要去调整的。但是如果采用随机森林模型,它能够已集成(ensemble) 的方法解决过拟合的问题,因此可以作为实际应用的决策树的很好的替代算法。

decisiontreeregressor_机器学习算法-Decision Tree相关推荐

  1. 机器学习-决策树(decision tree)算法

    学习彭亮<深度学习基础介绍:机器学习>课程 [toc] 决策树概念 决策树是一种用于监督学习的层次模型,由此,局部区域通过少数几步递归分裂决定. 决策树是一个类似流程图的树结构:其中每个结 ...

  2. 机器学习算法 --- Decision Trees Algorithms

    一.Decision Trees Agorithms的简介 决策树算法(Decision Trees Agorithms),是如今最流行的机器学习算法之一,它即能做分类又做回归(不像之前介绍的其他学习 ...

  3. [机器学习]回归--Decision Tree Regression

    CART决策树又称分类回归树,当数据集的因变量为连续性数值时,该树算法就是一个回归树,可以用叶节点观察的均值作为预测值:当数据集的因变量为离散型数值时,该树算法就是一个分类树,可以很好的解决分类问题. ...

  4. 机器学习决策树_机器学习-决策树 Decision Tree

    咱们正式进入了机器学习的模型的部分,虽然现在最火的的机器学习方面的库是Tensorflow, 但是这里还是先简单介绍一下另一个数据处理方面很火的库叫做sklearn.其实咱们在前面已经介绍了一点点sk ...

  5. 【机器学习】Decision Tree 决策树算法详解 + Python代码实战

    文章目录 一.直观理解决策树 二.熵的作用 三.信息增益 四.决策树构造实例 4.1 问题描述 4.2 根节点构造 五.信息增益率和GINI系数 5.1 信息增益存在的问题 5.2 信息增益率 5.3 ...

  6. 机器学习算法一览,应用建议与解决思路

    机器学习算法一览,应用建议与解决思路 作者:寒小阳  时间:2016年1月.  出处:http://blog.csdn.net/han_xiaoyang/article/details/5046933 ...

  7. 机器学习系列(4)_机器学习算法一览,应用建议与解决思路

    作者:寒小阳 时间:2016年1月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/50469334 声明:版权所有,转载请联系作者并注明出 ...

  8. 机器学习实战(二)决策树DT(Decision Tree、ID3算法)

    目录 0. 前言 1. 信息增益(ID3) 2. 决策树(Decision Tree) 3. 实战案例 3.1. 隐形眼镜案例 3.2. 存储决策树 3.3. 决策树画图表示 学习完机器学习实战的决策 ...

  9. 机器学习算法实践:决策树 (Decision Tree)(转载)

    前言 最近打算系统学习下机器学习的基础算法,避免眼高手低,决定把常用的机器学习基础算法都实现一遍以便加深印象.本文为这系列博客的第一篇,关于决策树(Decision Tree)的算法实现,文中我将对决 ...

最新文章

  1. 如何高效的管理团队?提高组织能力是关键!
  2. ios 简书 获取通讯录信息_iOS 13获取用户通讯录需要注意的
  3. 怎样学好python-如何短时间学习好Python?老男孩Python入门培训
  4. 怎样转换不同的pdf文件
  5. 从零开始学电脑_《新手从零开始学电脑》1.6——怎样才能打一手好字
  6. java中跳出当前循环怎么做_在java中,如何跳出当前的多重循环?
  7. Effective Java之慎用重载(四十一)
  8. 正则表达式——(一)
  9. 在libevent中使用线程池
  10. java调度问题的贪心算法_java代码,多机调度问题,怎么解释
  11. word如何插入超链接
  12. vue项目运行npm install报错
  13. 电路原理笔记整理_【盛世清北】2021清华大学827电路原理考研笔记-清华考研辅导班...
  14. IE浏览器无法打开网页
  15. 阿里小蜜商家版投入测试 为商家服务扩容
  16. 不得不说/永远不回头
  17. 草木有本心,何求美人折
  18. 杂记之视频监控基础之IPCAM
  19. AStar2006百度之星程序设计大赛试题
  20. 美联英语在线VIP-师资(HTML,css)

热门文章

  1. 面试:GET和POST两种基本请求方法有什么区别
  2. 每日一皮:看图猜一个数据库连接池!
  3. 通过sftp打开php.ini,PhpStorm中如何使用SFTP功能 详细操作方法
  4. 加载dict_Pytorch模型resume training,加载模型基础上继续训练
  5. 帝国cms7.5 utf-8本地网站电脑手机模板开发同步插件即时预览修改结果
  6. DCNv2 windows编译 2021ok
  7. python os.chdir函数
  8. python进程池multiprocessing.Pool运行错误:The freeze_support() line can be omitted if the program is not g
  9. std::map只修改不用加锁
  10. python TypeError: Expected int32, got list containing Tensors of type '_Message' instead.