机器学习—决策树原理(python代码实现)

机器学习—决策树原理(python代码实现)首先,决策树(DecisionTree)是一种基本的分类与回归方法,在这里主要讨论用于分类的决策树。决策树的学习通常包含三个步骤:特征选择,决策树的生成,决策树的剪枝。优点:计算复杂度不高,输出结果易于理解,对中间值的缺失值不敏感,可以处理不相关特征数据。 缺点:可能会产生过度匹配的问题。 使用数据类型:数值型和标称型。那么具体的来通过一个例子说明一下决策树。下面这个例子是通过贷款…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

首先,决策树(Decision Tree)是一种基本的分类与回归方法,在这里主要讨论用于分类的决策树。决策树的学习通常包含三个步骤:特征选择,决策树的生成,决策树的剪枝。

  • 优点:计算复杂度不高,输出结果易于理解,对中间值的缺失值不敏感,可以处理不相关特征数据。
  • 缺点:可能会产生过度匹配的问题。
  • 使用数据类型:数值型和标称型。

那么具体的来通过一个例子说明一下决策树。

下面这个例子是通过贷款申请的数据表来判断是否可以贷款。

序号 年龄 有工作 有自己的房子 信贷情况 类别
1 青年 一般
2 青年
3 青年
4 青年

一般
5 青年 一般
6 中年 一般
7 中年
8 中年
9 中年
10 中年 非常好
11 老年 非常好
12 老年
13 老年
14 老年 非常好
15 老年 一般

 在这里第一步根据特征去选择划分的点,那么这个点怎么选择,就是如何选择特征去进行分类。

那么就引出来了,熵的定义,熵是表示随机变量不确定性的度量。熵越大随机变量的不确定性就越大。公式如下:

机器学习—决策树原理(python代码实现)

信息增益:特征A对于数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D/A)之差,即

                                                                           g(D,A)=H(D)-H(D/A)

根据以上介绍,根据信息增益作为最优的选择特征,首先计算经验熵H(D)

H(D)=-9/15*log2(9/15)-6/15*log2(6/15)=0.971

数据集里面共有四个特征A,B,C,D

首先计算在特征A的情况下的信息增益

g(D,A)=H(D)-[5/15*(-2/5log2(2/5)-3/5log2(3/5))+5/15*(-3/5log2(3/5)-2/5log2(3/5))+5/15(-4/5log2(4/5)-1/5log2(1/5))]

=0.971-0.888

=0.083

根据以上分别计算每个特征的信息增益

g(D,B)=0.324

g(D,C)=0.420

g(D,D)=0.363

最后比较各特征的信息增益,由于特征C(有自己的房子)的信息增益最大,所以选择特征C作为最优特征。

以信息增益作为划分数据集的特征,存在偏向于选择取值较多的特征问题,使用信息增益比可以针对这一问题进行校正,这是特征选择的另一准则。C4.5就是根据这一准则进行特征的选择的。

 ID3算法就是根据信息增益来进性树的构建。

 ID3算法程序(pyhton)实现iris数据集的分类:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
# Parameters
n_classes = 3
plot_colors = "ryb"
plot_step = 0.02
# Load data
iris = load_iris()
for pairidx, pair in enumerate([[0, 1], [0, 2], [0, 3],
                                [1, 2], [1, 3], [2, 3]]):
    # We only take the two corresponding features
    X = iris.data[:, pair]
    y = iris.target
    # Train
    clf = DecisionTreeClassifier().fit(X, y)
    # Plot the decision boundary
    plt.subplot(2, 3, pairidx + 1)
    x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    xx, yy = np.meshgrid(np.arange(x_min, x_max, plot_step),
                         np.arange(y_min, y_max, plot_step))
    plt.tight_layout(h_pad=0.5, w_pad=0.5, pad=2.5)
    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)
    cs = plt.contourf(xx, yy, Z, cmap=plt.cm.RdYlBu)
    plt.xlabel(iris.feature_names[pair[0]])
    plt.ylabel(iris.feature_names[pair[1]])
    # Plot the training points
    for i, color in zip(range(n_classes), plot_colors):
        idx = np.where(y == i)
        plt.scatter(X[idx, 0], X[idx, 1], c=color, label=iris.target_names[i],
                    cmap=plt.cm.RdYlBu, edgecolor='black', s=15)
plt.suptitle("Decision surface of a decision tree using paired features")
plt.legend(loc='lower right', borderpad=0, handletextpad=0)
plt.axis("tight")
plt.show()
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/196105.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 贪心算法之背包问题

    贪心算法之背包问题

  • linux系统chmod 755权限

    linux系统chmod 755权限最近学习Lua,写脚本./执行遇到-bash:./helloworld.lua:Permissiondenied提示,意思是没有可执行权限;通过查看使用:sudochmod755helloworld.lua给脚本添加可执行权限正常执行;ll查看文件发现-rwxr-xr-x1rootroot65Oct2119:13helloworld.lua多了读写可执行权限;下面对这些…

  • 微型计算机课设电梯控制8255,东南大学吴健雄学微机课程设计电梯控制器.doc[通俗易懂]

    微型计算机课设电梯控制8255,东南大学吴健雄学微机课程设计电梯控制器.doc[通俗易懂]东南大学吴健雄学微机课程设计电梯控制器东南大学吴健雄学院《微机实验及课程设计》课程设计报告FBIWarning:汇编代码是好几届之前的一个学姐的只是修改了一下后完美运行是我自己写的不需要注明出处,就说是你写的专业:吴健雄学院实验室:计算机硬件实验室组别:同组人员:设计时间:2012年5月17日…

  • 关于web前端性能优化总结[通俗易懂]

    关于web前端性能优化总结[通俗易懂]1、从DOM结构和标签上来优化·使用语义化的标签,代码清晰简洁;·减少Dom节点,增加渲染速度;·使用W3C标准书写闭合小写的标签;·给图片和table指定宽高,避免缩放;·防止src和href值为空,当为空时,浏览器会把当前页面当做属性值重新加载;·css在头部位置,js在body底部位置; 2、从CSS样式上来优化·使用link加载样式而不是@import(是css2提供的一种方式,不兼容,只…

  • uu怎么卸载_卸载deepin引导

    uu怎么卸载_卸载deepin引导ubutun干净卸载删除wineQQ博主原本想要在ubuntu18.04安装wineQQ,在安装完成后却显示QQ版本过低无法运行,只能卸载重装,不然那个QQ标志在软件列表非常碍眼。这个是之前安装wineQQ的教程【QQ版本已过期】问题:卸载不掉该软件且网上大多数指令都过期了解决方案:在deepinwine的应用容器中,用sudoaptremove软件包主名命令来删除。比如d…

  • [core]-ARMV7-A、ARMV8-A、ARMV9-A 架构简介「建议收藏」

    Armv9-AarchitectureArmv9-A架构建立在Armv8-A架构的基础上并向前兼容。Armv9-A架构构成了Arm基础系统架构的基础——该规范概述了一种标准,可确保硬件和固件在系统级的广泛应用中具有兼容性。Armv9-A架构引入了一些主要的新特性:SVE2:extendingthebenefitofscalablevectorstomanymoreusecasesRealmManagementExtension(RME):extend

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号