精华内容
下载资源
问答
  • 决策树案例

    2018-08-29 16:57:00
    实现代码: 1 # -*- coding: utf-8 -*- ... 分类过程中经过的连接节点代表了一条分类模式,而这些分类模式的集合就组成了决策树的框架。   转载于:https://www.cnblogs.com/yszd/p/9555427.html

    实现代码:

     1 # -*- coding: utf-8 -*-
     2 """
     3 Created on Wed Aug 29 14:52:09 2018
     4 
     5 @author: zhen
     6 """
     7 import numpy as np
     8 from sklearn.tree import DecisionTreeRegressor
     9 import matplotlib.pyplot as plt
    10 n = 100
    11 x = np.random.rand(n) * 6 - 3  # 生成100个范围在-3~3的数据
    12 x.sort()  #排序
    13 
    14 y = np.sin(x) + np.random.rand(n) + 0.05
    15 x = x.reshape(-1, 1)  #把数据转成任意行一列类型
    16 y = y.reshape(-1, 1)
    17 
    18 decision_tree_regressor = DecisionTreeRegressor(criterion='mse', max_depth=3)
    19 decision_tree_regressor.fit(x, y)
    20 
    21 x_test = np.linspace(-3, 3, 50).reshape(-1, 1)  # 创建等差数列
    22 y_hat = decision_tree_regressor.predict(x_test)
    23 
    24 plt.plot(x, y, "y^", label="actual")
    25 plt.plot(x_test, y_hat, "b-", linewidth=2, label="predict")
    26 
    27 plt.legend(loc="upper left")
    28 plt.grid()
    29 plt.show()
    30 
    31 # 比较不同深度的决策树
    32 depth = [2, 4, 6, 8, 10]
    33 color = 'rgbmy'
    34 dec_tree_reg = DecisionTreeRegressor()
    35 
    36 plt.plot(x, y, "ko", label="actual")
    37 x_test = np.linspace(-3, 3, 50).reshape(-1, 1)
    38 for d, c in zip(depth, color):
    39     dec_tree_reg.set_params(max_depth=d)
    40     dec_tree_reg.fit(x, y)
    41     y_hat = dec_tree_reg.predict(x_test)
    42     plt.plot(x_test, y_hat, '-', color=c, linewidth=2, label="depth=%d" % d)
    43     
    44 plt.legend(loc="upper left")
    45 plt.grid(b=True)
    46 plt.show()

    结果:

    不同深度对预测的影响:

    总结:

      决策树分量算法有构造速度快、结构明显、分类精度高等优点。
    决策树是以实例(Instance)为核心的归纳分类方法。
    它从一组无序的、无特殊领域知识的数据集中提取出决策树表现形式的分类规则,
    包含了分支节点、叶子节点和分支结构。它采用自顶向下的递归方式构造树状结构,
    在决策时分支节点进行基于属性值的分类选择,分支节点覆盖了可能的分类结果,
    最终分支节点连接了代表分类结果的叶子节点。
    分类过程中经过的连接节点代表了一条分类模式,而这些分类模式的集合就组成了决策树的框架。

     

    转载于:https://www.cnblogs.com/yszd/p/9555427.html

    展开全文
  • 决策树案例分析

    千次阅读 2018-07-11 11:09:24
    通过一个决策树案例,着重从特征选择、剪枝等方面描述决策树的构建,讨论并研究决策树模型评估准则。最后基于 R 语言和 SPSS Modeler这两个工具,分别设计与实现了决策树模型的应用实例。1.机器学习概念 机器学...

     机器学习在各个领域都有广泛的应用,特别在数据分析领域有着深远的影响。决策树是机器学习中最基础且应用最广泛的算法模型。本文介绍了机器学习的相关概念、常见的算法分类和决策树模型及应用。通过一个决策树案例,着重从特征选择、剪枝等方面描述决策树的构建,讨论并研究决策树模型评估准则。最后基于 R 语言和 SPSS Modeler这两个工具,分别设计与实现了决策树模型的应用实例。

    1.机器学习概念

       机器学习 (Machine Learning) 是近 20 多年兴起的一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。

       机器学习理论主要是设计和分析一些让计算机可以自动学习的算法。机器学习算法是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法。因为学习算法中涉及了大量的统计学理论,机器学习与统计推断学联系尤为密切,也被称为统计学习理论。在算法设计方面,机器学习理论关注可以实现的、行之有效的学习算法。很多相关问题的算法复杂度较高,而且很难找到固有的规律,所以部分的机器学习研究是开发容易处理的近似算法。

       机器学习在数据挖掘、计算机视觉自然语言处理、生物特征识别、搜索引擎、医学诊断、检测信用卡欺诈、证券市场分析、DNA 序列测序、语言与手写识别、战略游戏与机器人运用等领域有着十分广泛的应用。它无疑是当前数据分析领域的一个热点内容。

    2.算法分类

    机器学习的算法繁多,其中很多算法是一类算法,而有些算法又是从其他算法中衍生出来的,因此我们可以按照不同的角度将其分类。本文主要通过学习方式和算法类似性这两个角度将机器学习算法进行分类。

    2.1 学习方式

    1、监督式学习:从给定的训练数据集中学习出一个函数,当新的数据到来时,可以根据这个函数预测结果。监督学习的训练集需要包括输入和输出,也可以说是特征和目标。训练集中的目标是由人标注的。常见的监督式学习算法包括回归分析和统计分类。


    2、非监督式学习:与监督学习相比,训练集没有人为标注的结果。常见的非监督式学习算法有聚类。


    3、半监督式学习:输入数据部分被标识,部分没有被标识,介于监督式学习与非监督式学习之间。常见的半监督式学习算法有支持向量机。


    4、强化学习:在这种学习模式下,输入数据作为对模型的反馈,不像监督模型那样,输入数据仅仅是作为一个检查模型对错的方式,在强化学习下,输入数据直接反馈到模型,模型必须对此立刻作出调整。常见的强化学习算法有时间差学习。

    2.2 算法类似性

    1、决策树学习:根据数据的属性采用树状结构建立决策模型。决策树模型常常用来解决分类和回归问题。常见的算法包括 CART (Classification And Regression Tree)、ID3、C4.5、随机森林 (Random Forest) 等。


    2、回归算法:试图采用对误差的衡量来探索变量之间的关系的一类算法。常见的回归算法包括最小二乘法 (Least Square)、逻辑回归 (Logistic Regression)、逐步式回归 (Stepwise Regression) 等。


    3、聚类算法:通常按照中心点或者分层的方式对输入数据进行归并。所有的聚类算法都试图找到数据的内在结构,以便按照最大的共同点将数据进行归类。常见的聚类算法包括 K-Means 算法以及期望最大化算法 (Expectation Maximization) 等。


    4、人工神经网络:模拟生物神经网络,是一类模式匹配算法。通常用于解决分类和回归问题。人工神经网络算法包括感知器神经网络 (Perceptron Neural Network) 、反向传递 (Back Propagation) 和深度学习等。

    3.决策树

    决策树是附加概率结果的一个树状的决策图,是直观的运用统计概率分析的图法。机器学习中决策树是一个预测模型,它表示对象属性和对象值之间的一种映射,树中的每一个节点表示对象属性的判断条件,其分支表示符合节点条件的对象。树的叶子节点表示对象所属的预测结果。

    3.1 决策树案例:


    图 1. 决策树案例图

    图 1 是一棵结构简单的决策树,用于预测贷款用户是否具有偿还贷款的能力。贷款用户主要具备三个属性:是否拥有房产,是否结婚,平均月收入。每一个内部节点都表示一个属性条件判断,叶子节点表示贷款用户是否具有偿还能力。例如:用户甲没有房产,没有结婚,月收入 5K。通过决策树的根节点判断,用户甲符合右边分支 (拥有房产为“否”);再判断是否结婚,用户甲符合左边分支 (是否结婚为否);然后判断月收入是否大于 4k,用户甲符合左边分支 (月收入大于 4K),该用户落在“可以偿还”的叶子节点上。所以预测用户甲具备偿还贷款能力。


    3.2 决策树建立

    本文上一节已经讨论如何用一棵决策树进行分类。本节将通过特征选择、剪枝,介绍如何根据已有的样本数据建立一棵决策树。


    首先介绍下特征选择。选择一个合适的特征作为判断节点,可以快速的分类,减少决策树的深度。决策树的目标就是把数据集按对应的类标签进行分类。最理想的情况是,通过特征的选择能把不同类别的数据集贴上对应类标签。特征选择的目标使得分类后的数据集比较纯。如何衡量一个数据集纯度,这里就需要引入数据纯度函数。下面将介绍两种表示数据纯度的函数。


    3.3 信息增益

    信息熵表示的是不确定度。均匀分布时,不确定度最大,此时熵就最大。当选择某个特征对数据集进行分类时,分类后的数据集信息熵会比分类前的小,其差值表示为信息增益。信息增益可以衡量某个特征对分类结果的影响大小。


    假设在样本数据集 D 中,混有 c 种类别的数据。构建决策树时,根据给定的样本数据集选择某个特征值作为树的节点。在数据集中,可以计算出该数据中的信息熵:


    图 2. 作用前的信息熵计算公式

    其中 D 表示训练数据集,c 表示数据类别数,Pi 表示类别 i 样本数量占所有样本的比例。


    对应数据集 D,选择特征 A 作为决策树判断节点时,在特征 A 作用后的信息熵的为 Info(D),计算如下:


    图 3. 作用后的信息熵计算公式

    其中 k 表示样本 D 被分为 k 个部分。


    信息增益表示数据集 D 在特征 A 的作用后,其信息熵减少的值。公式如下:


    图 4. 信息熵差值计算公式


    对于决策树节点最合适的特征选择,就是 Gain(A) 值最大的特征。


    3.4 基尼指数

    基尼指数是另一种数据的不纯度的度量方法,其公式为:


    图 5. 基尼指数计算公式

    其中 c 表示数据集中类别的数量,Pi 表示类别 i 样本数量占所有样本的比例。 从该公式可以看出,当数据集中数据混合的程度越高,基尼指数也就越高。当数据集 D 只有一种数据类型,那么基尼指数的值为最低 0。


    如果选取的属性为 A,那么分裂后的数据集 D 的基尼指数的计算公式为:


    图 6. 分裂后的基尼指数计算公式

    其中 k 表示样本 D 被分为 k 个部分,数据集 D 分裂成为 k 个 Dj 数据集。


    对于特征选取,需要选择最小的分裂后的基尼指数。也可以用基尼指数增益值作为决策树选择特征的依据。公式如下:


    图 7. 基尼指数差值计算公式

    在决策树选择特征时,应选择基尼指数增益值最大的特征,作为该节点分裂条件。


    接下来介绍剪枝。在分类模型建立的过程中,很容易出现过拟合的现象。过拟合是指在模型学习训练中,训练样本达到非常高的逼近精度,但对检验样本的逼近误差随着训练次数而呈现出先下降后上升的现象。过拟合时训练误差很小,但是检验误差很大,不利于实际应用。


    决策树的过拟合现象可以通过剪枝进行一定的修复。剪枝分为预先剪枝和后剪枝两种。


    预先剪枝指在决策树生长过程中,使用一定条件加以限制,使得产生完全拟合的决策树之前就停止生长。预先剪枝的判断方法也有很多,比如信息增益小于一定阀值的时候通过剪枝使决策树停止生长。但如何确定一个合适的阀值也需要一定的依据,阀值太高导致模型拟合不足,阀值太低又导致模型过拟合。


    后剪枝是在决策树生长完成之后,按照自底向上的方式修剪决策树。后剪枝有两种方式,一种用新的叶子节点替换子树,该节点的预测类由子树数据集中的多数类决定。


    另一种用子树中最常使用的分支代替子树。预先剪枝可能过早的终止决策树的生长,后剪枝一般能够产生更好的效果。但后剪枝在子树被剪掉后,决策树生长的一部分计算就被浪费了。


    3.5 决策树模型评估

    建立了决策树模型后需要给出该模型的评估值,这样才可以来判断模型的优劣。学习算法模型使用训练集 (training set) 建立模型,使用校验集 (test set) 来评估模型。本文通过评估指标和评估方法来评估决策树模型。 评估指标有分类准确度、召回率、虚警率和精确度等。而这些指标都是基于混淆矩阵 (confusion matrix) 进行计算的。


    混淆矩阵是用来评价监督式学习模型的精确性,矩阵的每一列代表一个类的实例预测,而每一行表示一个实际的类的实例。以二类分类问题为例,如下表所示:

                                     表 1. 混淆矩阵


    P (Positive Sample):正例的样本数量。其中

    N(Negative Sample):负例的样本数量。

    TP(True Positive):正确预测到的正例的数量。

    FP(False Positive):把负例预测成正例的数量。

    FN(False Negative):把正例预测成负例的数量。

    TN(True Negative):正确预测到的负例的数量。

    根据混淆矩阵可以得到评价分类模型的指标有以下几种。


    分类准确度,就是正负样本分别被正确分类的概率,计算公式为:

    图 8. 分类准确度计算公式

    召回率,就是正样本被识别出的概率,计算公式为:


    图 9. 召回率计算公式

    虚警率,就是负样本被错误分为正样本的概率,计算公式为:


    图 10. 虚警率计算公式

    精确度,就是分类结果为正样本的情况真实性程度,计算公式为:


    图 11. 精确度计算公式

    评估方法有保留法、随机二次抽样、交叉验证和自助法等。


    保留法 (holdout) 是评估分类模型性能的最基本的一种方法。将被标记的原始数据集分成训练集和检验集两份,训练集用于训练分类模型,检验集用于评估分类模型性能。但此方法不适用样本较小的情况,模型可能高度依赖训练集和检验集的构成。


    随机二次抽样 (random subsampling) 是指多次重复使用保留方法来改进分类器评估方法。同样此方法也不适用训练集数量不足的情况,而且也可能造成有些数据未被用于训练集。


    交叉验证 (cross-validation) 是指把数据分成数量相同的 k 份,每次使用数据进行分类时,选择其中一份作为检验集,剩下的 k-1 份为训练集,重复 k 次,正好使得每一份数据都被用于一次检验集 k-1 次训练集。该方法的优点是尽可能多的数据作为训练集数据,每一次训练集数据和检验集数据都是相互独立的,并且完全覆盖了整个数据集。也存在一个缺点,就是分类模型运行了 K 次,计算开销较大。


    自助法 (bootstrap) 是指在其方法中,训练集数据采用的是有放回的抽样,即已经选取为训练集的数据又被放回原来的数据集中,使得该数据有机会能被再一次抽取。用于样本数不多的情况下,效果很好。

    4.决策树建模

    在本节中,将通过 R 和 IBM SPSS Modeler 两种建模工具分别对其实际案例进行决策树建模。

    4.1 R

    R是一个用于统计计算及统计制图的优秀的开源软件,也是一个可以从大数据中获取有用信息的绝佳工具。它能在目前各种主流操作系统上安装使用,并且提供了很多数据管理、统计和绘图函数。


    下面本节就将使用 R 所提供的强大的函数库来构建一棵决策树并加以剪枝。

    清单 1. 构建决策树及其剪枝的 R 代码

    根据代码,运行步骤如下:

    1、导入需要的函数库。当然如果本地开发环境没有相应的库的话,还需要通过 install.packages 函数对库进行安装。

    2、查看本次构建决策树的数据源。stagec 是一组前列腺癌复发的研究数据。

    3、通过 rpart 函数构建决策树,以研究癌复发与病人年龄、肿瘤等级、癌细胞比例,癌细胞分裂状况等之间的关系。

    4、查看决策树的具体信息。 绘制构建完成的决策树图。

    5、通过 prune 函数对该决策树进行适当的剪枝,防止过拟合,使得树能够较好地反映数据内在的规律并在实际应用中有意义。

    6、绘制剪枝完后的决策树图。 该案例决策树的拟合结果与剪枝前后的树如下图所示:


    图 12. 决策树案例拟合图


    图 13. 未剪枝的决策树图


    图 14. 剪枝后的决策树图

    4.2 SPSS Modeler

    IBM SPSS Modeler 是一个预测分析平台,能够为个人、团队、系统和企业做决策提供预测性信息。它可提供各种高级算法和技术 (包括文本分析、实体分析、决策管理与优化),帮助您选择可实现更佳成果的操作。


    在 SPSS Modeler 中有很多应用实例,其中就包括一个决策树算法模型的案例。此示例使用名为 druglearn.str 的流,此流引用名为 DRUG1n 的数据文件。这些文件可在任何 IBM SPSS Modeler 安装程序的 Demos 目录中找到。操作步骤如下:

    1、添加“变量文件”节点 GRUGln,打开该节点,添加 DRUGln 文件。

    2、创建新字段 Na_to_K, 通过对 Na 和 K 数据的观察,发现可以用 Na 和 K 的比例来预测药物 Y。

    3、添加过滤器 (Discard Fields),过滤掉原始的字段 Na 和 K,以免在建模算法中重复使用。

    4、添加类型节点 (Define Types),设置字段的角色,将药物字段设置为目标,其他的字段设置为输入。

    5、添加 C5.0 节点,使用默认的参数设置。 

    6、点击运行,生成一个模型 Drug。

    图15. 模型流图

    在生成模型 Drug 以后,我们可以在模型页面中浏览 Drug 模型。打开 Drug 模型以后,可在规则浏览框中以决策树形式显示 C5.0 节点所生成的规则集。还可以通过更复杂的图表形式查看同一决策树。如下图所示:


                                    图16. 生成模型的决策树图

    5.结束语

    本文也展开讨论了分类算法之间的相互比较和优缺点,特征选择与剪枝各种方法之间的相互比较,各个评估方法的优缺点等。通过这些讨论与分析,能够以更好的方法论来解决实际生产环境下的问题。

    同时,决策树只是整个机器学习领域的冰山一角,而机器学习领域又是当前大数据分析领域的热点,因此还有很多很多值得我们去学习、去研究的地方。

    展开全文
  • 原标题:决策树案例:基于python的商品购买能力预测系统数据分析入门与实战 公众号: weic2chttp://www.cnblogs.com/baiboy/p/ml3.html目录1 决策树/判定树(decision tree)2 构造决策树的基本算法:判定顾客对商品...

    原标题:决策树案例:基于python的商品购买能力预测系统

    数据分析入门与实战 公众号: weic2c

    http://www.cnblogs.com/baiboy/p/ml3.html

    目录

    1 决策树/判定树(decision tree)

    2 构造决策树的基本算法:判定顾客对商品购买能力

    3 基于python代码的决策树算法实现:预测顾客购买商品的能力

    4 完整项目下载

    回复公众号“决策树”获取。1 决策树/判定树(decision tree)

    1 决策树(Dicision Tree)是机器学习有监督算法中分类算法的一种,有关机器学习中分类和预测算法的评估主要体现在:

    准确率:预测的准确与否是本算法的核心问题,其在征信系统,商品购买预测等都有应用。

    速度:一个好的算法不仅要求具备准确性,其运行速度也是衡量重要标准之一。

    强壮行:具备容错等功能和扩展性等。

    可规模性:能够应对现实生活中的实际案例

    可解释性:运行结果能够说明其含义。

    2 判定树是一个类似于流程图的树结构:其中,每个内部结点表示在一个属性上的测试,每个分支代表一个属性输出,而每个树叶结点代表类或类分布。树的最顶层是根结点。

    如上案例判断是否去打球?根节点显示14天中9天适合打球,其中5天不适合打球。这里面没有全部一致的情况,说明还需要细分:

    1 晴天:晴天中有2天适合打球,3天不适合打球,还需细分①湿度小于等于70时候有2天都适合打球,停止划分;②湿度大于70有3天都不适合打球,停止划分。

    2 阴天:共4天都适合打球,停止划分。

    3 雨天:3天适合打球,2天不适合打球,继续划分。①没有风的有3天且都适合打球,停止划分;②有风的2天且都不适合打球,停止划分。

    注意:有的时候不易太细的划分,特征过多过细的话反而会影响预测的准确率。把大多数归为一类,极少数的可以归到大多数之中。

    案例:如上决策树,如果某天是:晴天,湿度90 判定是否适合打球,可以由图知是不适合打球的。

    3 官方文档: http://scikit-learn.org/stable/modules/tree.html

    2 构造决策树的基本算法:判定顾客对商品购买能力

    2.1 算法结果图:

    根据决策树分析如下客户数据,判定新客户购买力。其中

    客户年龄age:青年、中年、老年

    客户收入income:低、中、高

    客户身份student:是学生,不是学生

    客户信用credit_rating:信用一般,信用好

    是否购买电脑buy_computer:购买、不购买

    2.2 在介绍决策树算法之前,我们引入熵的概念。熵的(entropy)概念:信息和抽象,如何度量?

    1948年,香农提出了 ”信息熵(entropy)“的概念,一条信息的信息量大小和它的不确定性有直接的关系,要搞清楚一件非常非常不确定的事情,或者是我们一无所知的事情,需要了解大量信息==>信息量的度量就等于不确定性的多少。

    例子:猜世界杯冠军,假如一无所知,猜多少次?每个队夺冠的几率不是相等的,比特(bit)来衡量信息的多少。

    采用如下方式求信息熵:

    1 当每个球队夺冠概率相等时候,32支参加世界杯夺冠球队的信息熵是5,计算是2^5=32,也就是你5次可以猜对那支球队夺冠。

    2 当球队夺冠概率不相等,比如巴西、德国、荷兰是强队概率较大,信息熵就小于5,也就是你用不到5次就可以猜出哪个球队夺冠。

    注:变量的不确定性越大,熵也就越大

    2.3 决策树归纳算法 (ID3)

    1970-1980, J.Ross. Quinlan首先提出ID3算法,第一步是选择属性判断结点,我们采用信息熵的比较。第二步是信息获取量(Information Gain):Gain(A) = Info(D) - Infor_A(D)通过A来作为节点分类获取了多少信息

    详解:

    信息获取量/信息增益(Information Gain):Gain(A) = Info(D) - Infor_A(D),例如age的信息增益,Gain(age) = Info(buys_computer) - Infor_age(buys_computer)。

    Info(buys_computer)是这14个记录中,购买的概率9/14,不购买的5/14,带入到信息熵公式。

    Infor_age(buys_computer)是age属性中,青年5/14购买概率是2/5,不购买3/5;中年4/14购买概率是1,不购买概率是0,老年5/14购买概率3/5,不购买概率是2/5.分别代入信息熵公式

    Info(buys_computer)与Infor_age(buys_computer)做差,即是age的信息增益,具体如下:

    类似,Gain(income) = 0.029, Gain(student) = 0.151, Gain(credit_rating)=0.048

    所以,选择信息增益最大的作为根节点即age作为第一个根节点

    重复计算即可。

    2.4 决策树算法:

    决策树算法的形式化描述如下:

    树以代表训练样本的单个结点开始(步骤1)。

    如果样本都在同一个类,则该结点成为树叶,并用该类标号(步骤2 和3)。

    否则,算法使用称为信息增益的基于熵的度量作为启发信息,选择能够最好地将样本分类的属性(步骤6)。该属性成为该结点的“测试”或“判定”属性(步骤7)。在算法的该版本中,

    所有的属性都是分类的,即离散值。连续属性必须离散化。

    对测试属性的每个已知的值,创建一个分枝,并据此划分样本(步骤8-10)。

    算法使用同样的过程,递归地形成每个划分上的样本判定树。一旦一个属性出现在一个结点上,就不必该结点的任何后代上考虑它(步骤13)。

    递归划分步骤仅当下列条件之一成立停止:

    (a) 给定结点的所有样本属于同一类(步骤2 和3)。

    (b) 没有剩余属性可以用来进一步划分样本(步骤4)。在此情况下,使用多数表决(步骤5)。

    这涉及将给定的结点转换成树叶,并用样本中的多数所在的类标记它。替换地,可以存放结

    点样本的类分布。

    (c) 分枝

    test_attribute=ai没有样本(步骤11)。在这种情况下,以samples中的多数类

    创建一个树叶(步骤12)

    在决策树ID3基础上,又进行了算法改进,衍生出 其他算法如:C4.5: (Quinlan) 和Classification and Regression Trees (CART): (L. Breiman, J. Friedman, R. Olshen, C. Stone)。这些算法

    共同点:都是贪心算法,自上而下(Top-down approach)

    区别:属性选择度量方法不同: C4.5 (gain ratio,增益比), CART(gini index,基尼指数), ID3 (Information Gain,信息增益)

    2.5 如何处理连续性变量的属性?

    有些数据是连续性的,其不像如上实验数据可以离散化表示。诸如根据天气情况预测打球案例中,其湿度是一个连续值,我们的做法是将湿度70作为一个分界点,这里就是连续变量离散化的体现。

    2.6 补充知识

    树剪枝叶(避免overfitting):为了避免拟合问题,我们可以对归于繁琐的树进行剪枝(就是降低树的高度),可以分为先剪枝和后剪枝。

    决策树的优点:直观,便于理解,小规模数据集有效

    决策树的缺点:处理连续变量不好、类别较多时,错误增加的比较快、可规模性一般

    3 基于python代码的决策树算法实现:预测顾客购买商品的能力

    3.1 机器学习的库:scikit-learnPython

    scikit-learnPython,其特性简单高效的数据挖掘和机器学习分析,简单高效的数据挖掘和机器学习分析,对所有用户开放,根据不同需求高度可重用性,基于Numpy, SciPy和matplotlib,开源,商用级别:获得 BSD许可。scikit-learn覆盖分类(classification), 回归(regression), 聚类(clustering), 降维(dimensionality reduction),模型选择(model selection), 预处理(preprocessing)等领域。

    3.2 scikit-learn的使用:Anaconda集成了如下包,不需要安装即可使用

    安装scikit-learn: pip, easy_install, windows installer,安装必要package:numpy, SciPy和matplotlib, 可使用Anaconda (包含numpy, scipy等科学计算常用package)

    安装注意问题:Python解释器版本(2.7 or 3.4?), 32-bit or 64-bit系统

    商品购买例子:

    转化为csv文件如下:

    3.3 运行效果如下:

    其中,datafile存放模型训练数据集和测试数据集,TarFile是算法生成文本形式的dot文件和转化后的pdf图像文件,两个py文件,一个是训练算法一个是测试训练结果。右侧预测值【0 1 1】代表三条测试数据,其中后两条具备购买能力。具体算法和细节下节详解。

    3.4 具体算法和细节

    python中导入决策树相关包文件,然后通过对csv格式转化为sklearn工具包中可以识别的数据格式,再调用决策树算法,最后将模型训练的结果以图形形式展示。

    包的导入:

    fromsklearn.feature_extraction import DictVectorizerimport csvfromsklearn import treefromsklearn import preprocessingfromsklearn.externals.six import StringIO

    1

    读取csv文件,将其特征值存储在列表featureList中,将预测的

    目标值存储在labelList中

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    '' '

    Deion:python调用机器学习库scikit-learn的决策树算法,

    实现商品购买力的预测,并转化为pdf图像显示

    Author:Bai Ningchao

    DateTime:2016年12月24日14:08:11

    Blog URL:http: //www.cnblogs.com/baiboy/

    '' '

    def trainDicisionTree(csvfileurl):

    '读取csv文件,将其特征值存储在列表featureList中,将预测的

    目标值存储在labelList中'

    featureList = []

    labelList = []

    #读取商品信息

    allElectronicsData=open(csvfileurl)

    reader = csv.reader(allElectronicsData)

    #逐行读取信息

    headers=str(allElectronicsData.readline()).split(',')

    #读取信息头文件

    print(headers)

    运行结果:

    存储特征数列和目标数列

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    '存储特征数列和目标数列'

    for row in reader:

    labelList.append(row[len(row)-1]) #读取最后一列的目标数据

    rowDict = {} #存放特征值的字典

    for i in range(1, len(row)-1):

    rowDict[headers[i]] = row[i]

    # print("rowDict:",rowDict)

    featureList.append(rowDict)

    print(featureList)

    print(labelList)

    运行结果:

    1

    将特征值数值化

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    'Vetorize features:将特征值数值化'

    vec = DictVectorizer() #整形数字转化

    dummyX = vec.fit_transform(featureList) .toarray() #特征值转化是整形数据

    print( "dummyX: " + str(dummyX))

    print(vec.get_feature_names())

    print( "labelList: " + str(labelList))

    # vectorize class labels

    lb = preprocessing.LabelBinarizer()

    dummyY = lb.fit_transform(labelList)

    print( "dummyY: n" + str(dummyY))

    运行结果:

    1

    如上算法就是将商品信息转化为机器学习决策树库文件可以识别的形式,

    即如下形式:

    1

    使用决策树进行分类预测处理

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    '使用决策树进行分类预测处理'

    # clf = tree.DecisionTreeClassifier()

    #自定义采用信息熵的方式确定根节点

    clf = tree.DecisionTreeClassifier(criterion= 'entropy' )

    clf = clf.fit(dummyX, dummyY)

    print( "clf: " + str(clf))

    # Visualize model

    with open( "../Tarfile/allElectronicInformationGainOri.dot" , 'w' ) as f:

    f = tree.export_graphviz(clf, feature_names=vec.get_feature_names(), out_file=f)

    运行结果:

    将其转化为图像形式展示,需要下载插件:安装 下载Graphviz:

    一路安装下来,然后打开cmd进入dos环境下,并进入../Tarfile/Tname.dot路径下;#2 输入dot -Tname.dot -o name.pdf命令,将dos转化为pdf格式

    打开文件可见:

    完整项目python源码下载:

    回复公众号“决策树”获取。

    公众号: weic2c

    据分析入门与实战

    责任编辑:

    展开全文
  • 1 决策树/判定树(decision tree)1 决策树(Dicision Tree)是机器学习有监督算法中分类算法的一种,有关机器学习中分类和预测算法的评估主要体现在:准确率:预测的准确与否是本算法的核心问题,其在征信系统,商品...

    1 决策树/判定树(decision tree)

    1 决策树(Dicision Tree)是机器学习有监督算法中分类算法的一种,有关机器学习中分类和预测算法的评估主要体现在:准确率:预测的准确与否是本算法的核心问题,其在征信系统,商品购买预测等都有应用。

    速度:一个好的算法不仅要求具备准确性,其运行速度也是衡量重要标准之一。

    强壮行:具备容错等功能和扩展性等。

    可规模性:能够应对现实生活中的实际案例

    可解释性:运行结果能够说明其含义。

    2 判定树是一个类似于流程图的树结构:其中,每个内部结点表示在一个属性上的测试,每个分支代表一个属性输出,而每个树叶结点代表类或类分布。树的最顶层是根结点。

    如上案例判断是否去打球?根节点显示14天中9天适合打球,其中5天不适合打球。这里面没有全部一致的情况,说明还需要细分:

    1 晴天:晴天中有2天适合打球,3天不适合打球,还需细分①湿度小于等于70时候有2天都适合打球,停止划分;②湿度大于70有3天都不适合打球,停止划分。

    2 阴天:共4天都适合打球,停止划分。

    3 雨天:3天适合打球,2天不适合打球,继续划分。①没有风的有3天且都适合打球,停止划分;②有风的2天且都不适合打球,停止划分。

    注意:有的时候不易太细的划分,特征过多过细的话反而会影响预测的准确率。把大多数归为一类,极少数的可以归到大多数之中。

    案例:如上决策树,如果某天是:晴天,湿度90 判定是否适合打球,可以由图知是不适合打球的。

    3 官方文档: http://scikit-learn.org/stable/modules/tree.html

    2 构造决策树的基本算法:判定顾客对商品购买能力

    2.1 算法结果图:

    根据决策树分析如下客户数据,判定新客户购买力。其中

    客户年龄age:青年、中年、老年

    客户收入income:低、中、高

    客户身份student:是学生,不是学生

    客户信用credit_rating:信用一般,信用好

    是否购买电脑buy_computer:购买、不购买

    2.2 在介绍决策树算法之前,我们引入熵的概念。熵的(entropy)概念:信息和抽象,如何度量?

    1948年,香农提出了 ”信息熵(entropy)“的概念,一条信息的信息量大小和它的不确定性有直接的关系,要搞清楚一件非常非常不确定的事情,或者是我们一无所知的事情,需要了解大量信息==>信息量的度量就等于不确定性的多少。

    例子:猜世界杯冠军,假如一无所知,猜多少次?每个队夺冠的几率不是相等的,比特(bit)来衡量信息的多少。

    采用如下方式求信息熵:

    1 当每个球队夺冠概率相等时候,32支参加世界杯夺冠球队的信息熵是5,计算是2^5=32,也就是你5次可以猜对那支球队夺冠。

    2 当球队夺冠概率不相等,比如巴西、德国、荷兰是强队概率较大,信息熵就小于5,也就是你用不到5次就可以猜出哪个球队夺冠。

    注:变量的不确定性越大,熵也就越大

    2.3 决策树归纳算法 (ID3)

    1970-1980, J.Ross. Quinlan首先提出ID3算法,第一步是选择属性判断结点,我们采用信息熵的比较。第二步是信息获取量(Information Gain):Gain(A) = Info(D) - Infor_A(D)通过A来作为节点分类获取了多少信息详解:

    信息获取量/信息增益(Information Gain):Gain(A) = Info(D) - Infor_A(D),例如age的信息增益,Gain(age) = Info(buys_computer) - Infor_age(buys_computer)。

    Info(buys_computer)是这14个记录中,购买的概率9/14,不购买的5/14,带入到信息熵公式。

    Infor_age(buys_computer)是age属性中,青年5/14购买概率是2/5,不购买3/5;中年4/14购买概率是1,不购买概率是0,老年5/14购买概率3/5,不购买概率是2/5.分别代入信息熵公式

    Info(buys_computer)与Infor_age(buys_computer)做差,即是age的信息增益,具体如下:

    类似,Gain(income) = 0.029, Gain(student) = 0.151, Gain(credit_rating)=0.048

    所以,选择信息增益最大的作为根节点即age作为第一个根节点

    重复计算即可

    2.4 决策树算法:

    决策树算法的形式化描述如下:树以代表训练样本的单个结点开始(步骤1)。

    如果样本都在同一个类,则该结点成为树叶,并用该类标号(步骤2 和3)。

    否则,算法使用称为信息增益的基于熵的度量作为启发信息,选择能够最好地将样本分类的属性(步骤6)。该属性成为该结点的“测试”或“判定”属性(步骤7)。在算法的该版本中,

    所有的属性都是分类的,即离散值。连续属性必须离散化。

    对测试属性的每个已知的值,创建一个分枝,并据此划分样本(步骤8-10)。

    算法使用同样的过程,递归地形成每个划分上的样本判定树。一旦一个属性出现在一个结点上,就不必该结点的任何后代上考虑它(步骤13)。

    递归划分步骤仅当下列条件之一成立停止:

    (a) 给定结点的所有样本属于同一类(步骤2 和3)。

    (b) 没有剩余属性可以用来进一步划分样本(步骤4)。在此情况下,使用多数表决(步骤5)。

    这涉及将给定的结点转换成树叶,并用样本中的多数所在的类标记它。替换地,可以存放结

    点样本的类分布。

    (c) 分枝

    test_attribute = a i 没有样本(步骤11)。在这种情况下,以 samples 中的多数类

    创建一个树叶(步骤12)

    在决策树ID3基础上,又进行了算法改进,衍生出 其他算法如:C4.5: (Quinlan) 和Classification and Regression Trees (CART): (L. Breiman, J. Friedman, R. Olshen, C. Stone)。这些算法

    共同点:都是贪心算法,自上而下(Top-down approach)

    区别:属性选择度量方法不同: C4.5 (gain ratio,增益比), CART(gini index,基尼指数), ID3 (Information Gain,信息增益)

    2.5 如何处理连续性变量的属性?

    有些数据是连续性的,其不像如上实验数据可以离散化表示。诸如根据天气情况预测打球案例中,其湿度是一个连续值,我们的做法是将湿度70作为一个分界点,这里就是连续变量离散化的体现。

    2.6 补充知识

    树剪枝叶 (避免overfitting):为了避免拟合问题,我们可以对归于繁琐的树进行剪枝(就是降低树的高度),可以分为先剪枝和后剪枝。

    决策树的优点:直观,便于理解,小规模数据集有效

    决策树的缺点:处理连续变量不好、类别较多时,错误增加的比较快、可规模性一般

    3 基于python代码的决策树算法实现:预测顾客购买商品的能力

    3.1 机器学习的库:scikit-learnPython

    scikit-learnPython,其特性简单高效的数据挖掘和机器学习分析,简单高效的数据挖掘和机器学习分析,对所有用户开放,根据不同需求高度可重用性,基于Numpy, SciPy和matplotlib,开源,商用级别:获得 BSD许可。scikit-learn覆盖分类(classification), 回归(regression), 聚类(clustering), 降维(dimensionality reduction),模型选择(model selection), 预处理(preprocessing)等领域。

    3.2 scikit-learn的使用:Anaconda集成了如下包,不需要安装即可使用安装scikit-learn: pip, easy_install, windows installer,安装必要package:numpy, SciPy和matplotlib, 可使用Anaconda (包含numpy, scipy等科学计算常用package)

    安装注意问题:Python解释器版本(2.7 or 3.4?), 32-bit or 64-bit系统

    商品购买例子:

    转化为csv文件如下:

    3.3 运行效果如下:

    其中,datafile存放模型训练数据集和测试数据集,TarFile是算法生成文本形式的dot文件和转化后的pdf图像文件,两个py文件,一个是训练算法一个是测试训练结果。右侧预测值【0 1 1】代表三条测试数据,其中后两条具备购买能力。具体算法和细节下节详解。

    3.4 具体算法和细节

    python中导入决策树相关包文件,然后通过对csv格式转化为sklearn工具包中可以识别的数据格式,再调用决策树算法,最后将模型训练的结果以图形形式展示。

    包的导入:from sklearn.feature_extraction import DictVectorizer

    import csvfrom sklearn import treefrom sklearn import preprocessingfrom sklearn.externals.six import StringIO读取csv文件,将其特征值存储在列表featureList中,将预测的目标值存储在labelList中'''

    Description:python调用机器学习库scikit-learn的决策树算法,实现商品购买力的预测,并转化为pdf图像显示

    Author:Bai Ningchao

    DateTime:2016年12月24日14:08:11

    Blog URL:http://www.cnblogs.com/baiboy/

    '''

    def trainDicisionTree(csvfileurl):

    '读取csv文件,将其特征值存储在列表featureList中,将预测的目标值存储在labelList中'

    featureList = []

    labelList = []

    #读取商品信息

    allElectronicsData=open(csvfileurl)

    reader = csv.reader(allElectronicsData) #逐行读取信息

    headers=str(allElectronicsData.readline()).split(',') #读取信息头文件

    print(headers)

    运行结果:

    存储特征数列和目标数列'存储特征数列和目标数列'

    for row in reader:

    labelList.append(row[len(row)-1]) #读取最后一列的目标数据

    rowDict = {} #存放特征值的字典

    for i in range(1, len(row)-1):

    rowDict[headers[i]] = row[i]

    # print("rowDict:",rowDict)

    featureList.append(rowDict)

    print(featureList)

    print(labelList)

    运行结果:将特征值数值化'Vetorize features:将特征值数值化'

    vec = DictVectorizer() #整形数字转化

    dummyX = vec.fit_transform(featureList) .toarray() #特征值转化是整形数据

    print("dummyX: " + str(dummyX))

    print(vec.get_feature_names())

    print("labelList: " + str(labelList))

    # vectorize class labels

    lb = preprocessing.LabelBinarizer()

    dummyY = lb.fit_transform(labelList)

    print("dummyY: \n" + str(dummyY))

    运行结果:如上算法就是将商品信息转化为机器学习决策树库文件可以识别的形式,即如下形式:使用决策树进行分类预测处理'使用决策树进行分类预测处理'

    # clf = tree.DecisionTreeClassifier()

    #自定义采用信息熵的方式确定根节点

    clf = tree.DecisionTreeClassifier(criterion='entropy')

    clf = clf.fit(dummyX, dummyY)

    print("clf: " + str(clf))

    # Visualize model

    with open("../Tarfile/allElectronicInformationGainOri.dot", 'w') as f:

    f = tree.export_graphviz(clf, feature_names=vec.get_feature_names(), out_file=f)

    运行结果:

    将其转化为图像形式展示,需要下载插件:安装 下载Graphviz:

    一路安装下来,然后打开cmd进入dos环境下,并进入../Tarfile/Tname.dot路径下;#2 输入dot -Tname.dot -o name.pdf命令,将dos转化为pdf格式

    打开文件可见:

    展开全文
  • 一、回顾 什么是决策树,信息熵 构建决策树的过程 ...上面三篇,主要介绍了相关的理论知识,其中构建决策树的过程可以很好地帮助我们理解决策树的分裂属性的选择。 二、决策树的Python实现 ...
  • 文 | 菊子皮 (转载请注明出处)同名B站:AIAS编程有道「摘要:」 决策树是非常基础的算法,其不仅能够进行分类还可以进行回归处理,也就是回归树。要想提高决策树的性能还需要做好剪枝的工作。「关键词:」 回归树,...
  • 摘要这一篇简单介绍一下使用决策树来进行分类任务, 同时我们会对决策树的结果进行可视化的显示. 这里会使用iris的例子进行分析.简介这一篇是对于决策树的介绍, 使用决策树来解决分类问题, 同时我们会将决策树的结果...
  • 摘要: 决策树是非常基础的算法,其不仅能够进行分类还可以进行回归处理,也就是回归树。要想提高决策树的性能还需要做好剪枝的工作。 关键词: 回归树,剪枝 1 回归树 之前已经介绍过决策树的基本理论了:【机器...
  • 【Machine Learning】决策树案例:基于python的商品购买能力预测系统 阅读目录 目录 1 决策树/判定树(decision tree) 2 构造决策树的基本算法:判定顾客对商品购买能力 3 基于python代码的决策树...
  • 【数据分析】决策树案例详解

    万次阅读 多人点赞 2018-06-20 14:28:51
    初识决策树决策树是一个类似于人们决策过程的树结构,从根节点开始,每个分枝代表一个新的决策事件,会生成两个或多个分枝,每个叶子代表一个最终判定所属的类别。例如,如下是一个决策树,代表薪水大于30W的男性会...
  • 上篇的决策树案例链接 结合实例来学习更加容易一些 先看一段代码: import csv with open('tree(1).csv') as f: data = csv.reader(f) #reader 方法将读取csv文件中的每一行,并作为列表返回 for row ...
  • 决策树案例理解

    千次阅读 2017-12-14 15:12:30
    第二步,决策树的剪枝:决策树的剪枝是对上一阶段生成的决策树进行检验、校正和修下的过程,主要是用新的样本数据集(称为测试数据集)中的数据校验决策树生成过程中产生的初步规则,将那些影响预衡准确性的分枝剪除...
  • 决策树(Decision Tree)是有监督学习中的一种算法,并且是一种基本的分类与回归的方法。有分类树和回归树两种。 决策树的算法本质是树形结构,我们可以把决策树看成是一个if-then规则的集合。将决策树转换成if-then...
  • 简单的python决策树案例

    千次阅读 2018-09-06 10:25:42
    机器学习入门——决策树的实例 数据集 tree(1).csv 长这样: RID age income student credit_rating buy 1 youth high no fair no 2 youth high no excellent no 3 middle_aged ...
  • 摘要: 决策树是非常基础的算法,其不仅能够进行分类还可以进行回归处理,也就是回归树。要想提高决策树的性能还需要做好剪枝的工作。关键词: 回归树,剪枝1 回归树之前已经介绍过决策树的基本理论了:这份分类决策...
  • 文章目录前言背景一、python环境...问题:在使用决策树实现算法(ID3)过程中,得到模型结果,为了能够可视化展示, 解惑:故遇到了graphviz的问题。 配置: 1、python3.6 2、Windows环境 背景 画出数据网络的布...
  • 如果你想了解机器学习,决策树是最佳起点之一。 决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。 决策树更是常见的机器学习方法,可以帮助我们...
  • 003-决策树案例

    2018-09-28 18:17:00
    - 10.min_impurity_split 这个值限制了决策树的增长,如果某节点的不纯度(基尼系数,信息增益,均方差,绝对差)小于这个阈值则该节点不再生成子节点。即为叶子节点 。 - n_estimators:要建立树的个数     ...
  • 初识决策树 决策树是一个类似于人们决策过程的树结构,从根节点开始,每个分枝代表一个新的决策事件,会生成两个或多个分枝,每个叶子代表一个最终判定所属的类别。 例如,如下是一个决策树,代表薪水大于30W的...
  • 摘要: 决策树是非常基础的算法,其不仅能够进行分类还可以进行回归处理,也就是回归树。要想提高决策树的性能还需要做好剪枝的工作。关键词: 回归树,剪枝1 回归树之前已经介绍过决策树的基本理论了:这份分类决策...
  • 决策树算法3要素: 1、特征选择 2、决策树生成 3、决策树剪枝 关于决策树生成: 决策树的生成过程就是 使用满足划分准则的特征不断的将数据集划分为纯度更高,不确定性更小的子集的过程。对于当前数据集D的每一次的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,376
精华内容 550
关键字:

决策树案例