机器学习:决策树(基尼系数)

一、基础理解

 1)公式

  1. k:数据集中样本类型数量;
  2. Pi:第 i 类样本的数量占总样本数量的比例

 2)实例计算基尼系数

  • 3 种情况计算基尼系数:
  • 基尼系数的性质与信息熵一样:度量随机变量的不确定度的大小
  1. G 越大,数据的不确定性越高;
  2. G 越小,数据的不确定性越低;
  3. G = 0,数据集中的所有样本都是同一类别;

 3)只有两种类别的数据集

  1. x:两类样本中,其中一类样本数量所占全部样本的比例;
  2. 当 x = 0.5,两类样本数量相等时,数据集的确定性最低;

二、使用基尼系数划分节点数据集

 1)格式

  • from sklearn.tree import DecisionTreeClassifier
    
    dt_clf = DecisionTreeClassifier(max_depth=2, criterion=‘gini‘)
    dt_clf.fit(X, y)
  1. criterion=‘gini‘:使用 “基尼系数” 方式划分节点数据集;
  2. criterion=‘entropy‘:使用 “信息熵” 方式划分节点数据集;

 2)代码实现

  • 导入数据集

    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn import datasets
    
    iris = datasets.load_iris()
    X = iris.data
    y = iris.target
  • 封装函数:

  1. split():划分数据集;
  2. gini():计算数据集的基尼系数;
  3. try_split():寻找最佳的特征、特征值、基尼系数;

    from collections import Counter
    from math import log
    
    def split(X, y, d, value):
        index_a = (X[:, d] <= value)
        index_b = (X[:, d] > value)
        return X[index_a], X[index_b], y[index_a], y[index_b]
    
    def gini(y):
        counter = Counter(y)
        res = 1.0
        for num in counter.values():
            p = num / len(y)
            res += -p**2
        return res
    
    def try_split(X, y):
    
        best_g = float(‘inf‘)
        best_d, best_v = -1, -1
        for d in range(X.shape[1]):
            sorted_index = np.argsort(X[:,d])
            for i in range(1, len(X)):
                if X[sorted_index[i-1], d] != X[sorted_index[i], d]:
                    v = (X[sorted_index[i-1], d] + X[sorted_index[i], d]) / 2
                    x_l, x_r, y_l, y_r = split(X, y, d, v)
                    g = gini(y_l) + gini(y_r)
                    if g < best_g:
                        best_g, best_d, best_v = g, d, v
    
        return best_g, best_d, best_v
  • 第一次划分

    best_g, best_d, best_v = try_split(X, y)
    X1_l, X1_r, y1_l, y1_r = split(X, y, best_d, best_v)
    
    gini(y1_l)
    # 数据集 X1_l 的基尼系数:0.0
    
    gini(y1_r)
    # 数据集 X1_r 的基尼系数:0.5

    # 判断:数据集 X1_l 的基尼系数等于 0,不需要再进行划分,;数据集 X1_r 需要再次进行划分;

  • 第二次划分

    best_g2, best_d2, best_v2 = try_split(X1_r, y1_r)
    X2_l, X2_r, y2_l, y2_r = split(X1_r, y1_r, best_d2, best_v2)
    
    gini(y2_l)
    # 数据集 X2_l 的基尼系数:0.1680384087791495
    
    gini(y2_r)
    # 数据集 X2_l 的基尼系数:0.04253308128544431

    # 判断:数据集 X2_l 和 X2_r 的基尼系数不为 0,都需要再次进行划分;

三、信息熵  VS  基尼系数

  • 信息熵的计算比基尼系数慢
  1. 原因:计算信息熵 H 时,需要计算一个 log(P),而基尼系数只需要计算 P2
  2. 因此,scikit-learn 中的  DecisionTreeClassifier()  类中,参数  criterion = ‘gini‘,默认选择基尼系数的方式进行划分节点数据集;
  • 大多数时候,二者没有特别的效果优劣;

原文地址:https://www.cnblogs.com/volcao/p/9478314.html

时间: 2024-08-08 13:16:13

机器学习:决策树(基尼系数)的相关文章

机器学习-决策树的基本思想

机器学习-决策树的基本思想 决策树算法是最早的机器学习算法之一. 算法框架 1.决策树主函数 各种决策树的主函数都大同小异,本质上是一个递归函数.该函数的主要功能是按照某种规则生长出决策树的各个分支节点,并根据终止条件结束算法.一般来讲,主函数需要完成如下几个功能. (1)输入需要分类的数据集和类别标签 (2)根据某种分类规则得到最优的划分特征,并创建特征的划分节点--计算最优特征子函数 (3)按照该特征的每个取值划分数据集为若干部分--划分数据集子函数 (4)根据划分子函数的计算结果构建出新的

机器学习-决策树实现-python

今天翻自己的书库的时候,才发现了之前买的一本<机器学习导论>.随手翻了翻,就直接看到了之前看到的决策树实现的问题理论. 闲来无事,也就得写点代码来play 一下: 决策树的概念想必大家都十分熟悉,特别想我们小时候玩的跳方格的游戏.或者说我们之前玩的你猜我猜的游戏,猜不对继续猜,总有一天你会猜对额 为了确定从哪一个特征来进行判别,我们需要一个衡量标准来分类. 1…香农熵 2…信息增益 那我们来实现第一个……香农熵 from math import log def calcShannonEnt(d

机器学习——决策树

1.介绍 决策树是一种依托决策而建立起来的一种树.在机器学习中,决策树是一种预测模型,代表的是一种对象属性与对象值之间的一种映射关系,每一个节点代表某个对象/分类,树中的每一个分叉路径代表某个可能的属性值,而每一个叶子节点则对应从根节点到该叶子节点所经历的路径所表示的对象的值 输入:一组对象属性 输出:对象值(分类算法中得到某个类别) 决策树中间计算过程: 统计学习方法中根据下表贷款数据表生成的决策树如下,当给定一个人的特征属性之后就能判断能不能给他贷款. 2.特征选择 看到上面的第一张决策树的

机器学习——决策树,DecisionTreeClassifier参数详解,决策树可视化查看树结构

0.决策树 决策树是一种树型结构,其中每个内部节结点表示在一个属性上的测试,每一个分支代表一个测试输出,每个叶结点代表一种类别. 决策树学习是以实例为基础的归纳学习 决策树学习采用的是自顶向下的递归方法,其基本思想是以信息熵为度量构造一棵熵值下降最快的树.到叶子节点的处的熵值为零,此时每个叶结点中的实例都属于同一类. 1.决策树学习算法的特点 决策树算法的最大优点是可以自学习.在学习的过程中,不需要使用者了解过多知识背景,只需要对训练实例进行较好的标注,就能够进行学习了. 在决策树的算法中,建立

机器学习-决策树 Decision Tree

咱们正式进入了机器学习的模型的部分,虽然现在最火的的机器学习方面的库是Tensorflow, 但是这里还是先简单介绍一下另一个数据处理方面很火的库叫做sklearn.其实咱们在前面已经介绍了一点点sklearn,主要是在categorical data encoding那一块.其实sklearn在数据建模方面也是非常666的.一般常用的模型都可以用sklearn来做的.既然它都这么牛逼了,咱们为啥还要学TensorFlow呢?其实主要的原因有两个,一是因为Google在流量方面的强势推广,导致绝

机器学习-决策树

一.简介 决策树学习是一种逼近离散值目标函数的方法,在这种方法中学习到的函数被表示为一棵决策树. 二.决策树的表示法 决策树通过把实例从艮节点排列到某个叶子结点来分类实例,叶子结点即为实例所属的分类.树上的每一个结点指定了对实例的某个属性的测试,并且该结点的每一个后继分支对应于该属性的一个可能值.分类实例的方法是从这棵树的根节点开始,测试这个结点的属性,然后按照给定实例的属性值对应的树枝向下移动.然后这个过程在以新结点的根的子树上重复. 决策树对应表达式: 三. 举例 首先计算四个属性的信息增益

机器学习—— 决策树(ID3算法)的分析与实现

KNN算法请参考:http://blog.csdn.net/gamer_gyt/article/details/47418223 一.简介         决策树是一个预测模型:他代表的是对象属性与对象值之间的一种映射关系.树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值.决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输出. 数据挖掘中决策树是一种经常要用到的技术,可以用于分析数据,同样也可以用

机器学习-决策树最优类别属性选择的三个方法

本文所用符号: \(D\):所有样本,如<西瓜书>中所有的西瓜样本 \(a\):用来划分样本的类别属性,a有V个可取值{\(a^1,a^2 \dots , a^V\)},如若用a表示"色泽",则a的取值是{\(a^1=青绿,a^2=乌黑,a^3=浅白\)},此时\(V=3\) \(D^v\):用a对样本D进行划分后属于\(a^v\)的样本子集 \(|y|\):\(y\)属性可取个数,下文中用y表示模型最终划分的结果集,如西瓜书中的{好瓜,坏瓜} 信息增益 使用信息熵\[En

【Machine Learn】决策树案例:基于python的商品购买能力预测系统

决策树在商品购买能力预测案例中的算法实现 作者:白宁超 2016年12月24日22:05:42 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结合视频学习和书籍基础的笔记所得.本系列文章将采用理论结合实践方式编写.首先介绍机器学习和深度学习的范畴,然后介绍关于训练集.测试集等介绍.接着分别介绍机器学习常用算法,分别是监督学习之分类(决策树.临近取样.支持向量机.神经网络算法)监督学习之回归(线性回归.非线性回归)非监督学习(

[机器学习]信息&amp;熵&amp;信息增益

关于对信息.熵.信息增益是信息论里的概念,是对数据处理的量化,这几个概念主要是在决策树里用到的概念,因为在利用特征来分类的时候会对特征选取顺序的选择,这几个概念比较抽象,我也花了好长时间去理解(自己认为的理解),废话不多说,接下来开始对这几个概念解释,防止自己忘记的同时,望对其他人有个借鉴的作用,如有错误还请指出. 1.信息 这个是熵和信息增益的基础概念,我觉得对于这个概念的理解更应该把他认为是一用名称,就比如‘鸡‘(加引号意思是说这个是名称)是用来修饰鸡(没加引号是说存在的动物即鸡),‘狗’是