首页 > 编程语言 >3.5决策树算法

3.5决策树算法

时间:2023-06-10 20:46:51浏览次数:52  
标签:iris 特征 算法 3.5 test import 决策树 sklearn

1.认识决策树

决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法
怎么理解这句话?通过一个对话例子

image
想一想这个女生为什么把年龄放在最上面判断!!!!!!!!!
如何高效的进行决策?
   特征的先后顺序

2.决策树的原理

image
这个里面有年龄、是否有工作、是否有自己的房子、信贷情况这四个特征,我们可以通过那个特征可以很快的做出决策。
先看房子,再工作->是否贷款只看了两个特征
年龄,信贷情况,工作看了三个特征
先看房子,再工作->是否贷款只看了两个特征年龄,信贷情况,工作看了三个特征
image
那么我们怎么知道这些特征哪个更好放在最上面,那么决策树的真是划分是这样的
image

决策树解决的问题就是有很多个特征,我们通过那些特征可以很快的做出正确的判断

2.1信息熵

为了解决上面的问题,我们引入了信息熵和信息增益。
H的专业术语称之为信息熵,单位为比特。
image
信息和消除不确定性是相联系的

问题: 回到我们前面的贷款案例,怎么去划分?可以利用当得知某个特征(比如是否有房子)之后,我们能够减少的不确定性大小。越大我们可以认为这个特征很重要。那怎么去衡量减少的不确定性大小呢?

2.2信息增益

2.2.1定义和公式

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

image

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

2.2.2 贷款特征重要计算

image

我们以年龄特征来计算:

1、g(D, 年龄) = H(D) -H(D|年龄) = 0.971-[5/15H(青年)+5/15H(中年)+5/15H(老年]

2、H(D) = -(6/15log(6/15)+9/15log(9/15))=0.971

3、H(青年) = -(3/5log(3/5) +2/5log(2/5))
H(中年)=-(3/5log(3/5) +2/5log(2/5))
H(老年)=-(4/5og(4/5)+1/5log(1/5))

我们以A1、A2、A3、A4代表年龄、有工作、有自己的房子和贷款情况。最终计算的结果g(D, A1) = 0.313, g(D, A2) = 0.324, g(D, A3) = 0.420,g(D, A4) = 0.363。所以我们选择A3 作为划分的第一个特征。这样我们就可以一棵树慢慢建立

2.2.3决策树的三种算法实现

当然决策树的原理不止信息增益这一种,还有其他方法。但是原理都类似,我们就不去举例计算。
ID3
信息增益 最大的准则
C4.5
信息增益比 最大的准则
CART
分类树: 基尼系数 最小的准则 在sklearn中可以选择划分的默认原则
优势:划分更加细致(从后面例子的树显示来理解)

3.决策树的API

决策树API
class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, max_depth=None,random_state=None)
决策树分类器
criterion:默认是’gini’系数,也可以选择信息增益的熵’entropy’
max_depth:树的深度大小
random_state:随机数种子
其中会有些超参数:max_depth:树的深度大小
其它超参数我们会结合随机森林讲解

用决策树的时候不需要特征工程:
1.获取数据集
2.划分数据集
3.决策树预估器
4.模型评估

4决策树对鸢尾花进行分类

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.tree import DecisionTreeClassifier
def decision_iris():
    """
    用决策树对鸢尾花进行分类
    :return:
    """
    # 1)获取数据集
    iris = load_iris()

    # 2)划分数据集
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)

    # 3)决策树预估器
    estimator = DecisionTreeClassifier(criterion="entropy")
    estimator.fit(x_train, y_train)

    # 4)模型评估
    # 方法1:直接比对真实值和预测值
    y_predict = estimator.predict(x_test)
    print("y_predict:\n", y_predict)
    print("直接比对真实值和预测值:\n", y_test == y_predict)

    # 方法2:计算准确率
    score = estimator.score(x_test, y_test)
    print("准确率为:\n", score)



    return None

image

我们发现没有CNN准确率强,是因为其CNN适合于小数据

4决策树可视化处理

保存树的结构到dot文件

1、sklearn.tree.export_graphviz() 该函数能够导出DOT格式
tree.export_graphviz(estimator,out_file='tree.dot’,feature_names=[‘’,’’])
导出的dot文件,打开这个网址http://webgraphviz.com/ 复制进去进去dot就可以显示树的结构

# 可视化决策树
export_graphviz(estimator, out_file="iris_tree.dot", feature_names=iris.feature_names)

image

5.总结

优点:
简单的理解和解释,树木可视化。
缺点:
决策树学习者可以创建不能很好地推广数据的过于复杂的树,这被称为过拟合。
改进:
减枝cart算法(决策树API当中已经实现,随机森林参数调优有相关介绍)
随机森林

标签:iris,特征,算法,3.5,test,import,决策树,sklearn
From: https://www.cnblogs.com/lipu123/p/17471796.html

相关文章

  • 算法刷题记录:P1518 [USACO2.4]两只塔姆沃斯牛 The Tamworth Two
    题目链接:https://www.luogu.com.cn/problem/P1518题目分析这道模拟题很典型了,给定了一个固定的移动方式,去模拟即可,该题说:如果牛和农夫永远不会相遇输出0,我没想到很好的方法,不推荐我这样的写法。算勉强AC吧。AC代码//Problem:P1518[USACO2.4]两只塔姆沃斯牛TheTamwort......
  • 算法的引入
    算法解题四步走分析需求设计算法算法实现验证结果算法需要的特性输入:可以有一个或者多个输入输出:至少有一个正确的输出有穷性:确保算法执行的时间是理想确切性:确保算法的每一个步骤都是有意义的可行性:算法的每一步都是能执行的简单的案例#如果a+b+c=1000,且a^2+b^2......
  • 3.4 朴素贝叶斯算法
    1什么是朴素贝叶斯算法2概率基础2.1概率(Probability)定义概率定义为一件事情发生的可能性扔出一个硬币,结果头像朝上某天是晴天P(X):取值在[0,1]2.2女神是否喜欢计算案例在讲这两个概率之前我们通过一个例子,来计算一些结果:问题:一直小明是产品经理,体重超重,问......
  • 处理机典型调度算法
    日志返回日志列表处理机典型调度算法 编辑于 2023-2-1008:56 阅读(0)赞评论转载分享复制地址编辑上一篇 | 下一篇:元,角,分,厘,... 开通黄钻处理机典型调度算法 处理机典型调度算法 1.先来先服务算法作业调度、进程调度先来的......
  • 操作系统常用算法
    操作系统常用算法发布于2018-08-1713:16:23阅读 1.2K0 作业调度算法介绍:又称为高级调度或长程调度,调度对象是作业。根据作业控制块(JCB)中的信息,审查系统能否满足用户作业的资源需求,以及按照一定的算法,从外存的后备队列中选取某些作业调入内存,并为他们创建进程、分配......
  • 常用调度算法 总结
    常用调度算法总结 常用调度算法总结 1常见的批处理作业调度算法 1.1先来先服务调度算法(FCFS): 就是按照各个作业进入系统的自然次序来调度作业。这种调度算法的优点是实现简单,公平。其缺点是没有考虑到系统中各种资源的综合使用情况,往往使短作业的用户不满......
  • (进程管理)05.进程的调度算法
    (进程管理)05.进程的调度算法 进程调度,就是绪状态的进程获得CPU的使用权,进程由就绪状态转变成运行状态。进程调度可以分为:抢占式系统会根据进程的优先级高低来进行调度,进程之间可以插队非抢占式系统按照先来先服务的方式来调度,进程间不能插队进程调度算法有很多,......
  • 算法刷题记录:P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布
    题目链接https://www.luogu.com.cn/problem/P1328题目分析是一道和环有关的问题,直接模拟即可AC代码//Problem:P1328[NOIP2014提高组]生活大爆炸版石头剪刀布//Contest:Luogu//URL:https://www.luogu.com.cn/problem/P1328//MemoryLimit:125MB//TimeLimit......
  • DES加密算法及Python实现
    一、DES加密算法原理DES加密算法是一种对称密钥的块加密算法,1976年成为美国联邦标准。其加密流程如下:密钥的生成:将64位密钥按照置换选择1表进行置换,得到56位的密钥,并分成左右两部分各28位。然后使用16个不同的演算法对密钥进行处理,生成16个48位子密钥。明文分组:将明文分成64位的块,......
  • Python+sklearn使用DBSCAN聚类算法案例一则
    DBSCAN聚类算法概述:DBSCAN属于密度聚类算法,把类定义为密度相连对象的最大集合,通过在样本空间中不断搜索最大集合完成聚类。DBSCAN能够在带有噪点的样本空间中发现任意形状的聚类并排除噪点。DBSCAN算法不需要预先指定聚类数量,但对用户设定的参数非常敏感。当空间聚类的密度不均匀、......