精华内容
下载资源
问答
  • 关于决策树的两个经典算法介绍!相信对大家有所帮助!
  • 文章目录一,概述1,什么是决策树2,特征选择3,香农熵及计算函数二,代码实现1,需要用到的库(pandas传送门)2,数据集3,计算香农熵4,信息增益5,数据集最佳切分函数找出最佳切分列按照给定列切分数据集6,递归...

    一,概述

    1,什么是决策树

    首先看一组图
    决策树的本身就是一种树形结构,可以通过一些精心设计的问题,对数据进行分类
    在这里插入图片描述
    决策树(Decision Tree)是监督学习中的一种算法,并且是一种基本的分类与回归的方法。
    决策树有两种:分类树 和 回归树

    需要了解的三个概念:
    在这里插入图片描述
    可以把决策树看作是一个 if-then 规则的集合:
    — 由决策树的根节点到叶节点的每一条路径构建一条规则

    2,特征选择

    随着划分过程不断进行,我们希望决策树的分支节点所包含的样本尽可能属于同一类别,也就是节点的纯度(purity)越来越高。
    下边三个图表示纯度越来越低的过程:
    在这里插入图片描述
    度量不纯度的指标有很多种,比如:熵、增益率、基尼值数。
    这里我们使用的是熵,也叫作香农熵

    3,香农熵及计算函数

    在这里插入图片描述

    二,代码实现

    1,需要用到的库(pandas传送门)

    import numpy as np
    import pandas as pd
    

    传送门:Pandas的教学

    2,数据集

    这里使用书上的数据集

    def createDatas():
        rew_data = {
            'no surfacing':[1,1,1,0,0],
            'flippers':[1,1,0,1,1],
            'fish':['yes','yes','no','no','no']}
        dataSet = pd.DataFrame(rew_data)
        return dataSet
    
    dataSet = createDatas()
    dataSet
    

    在这里插入图片描述

    3,计算香农熵

    输入:原始数据集
    输出:熵

    def calEnt(dataSet):
        n = dataSet.shape[0]
        iset = dataSet.iloc[:,-1].value_counts()
        p = iset / n
        ent = (-p * np.log2(p)).sum()
        return ent
    

    计算一下看看
    熵越高,信息的不纯度就越高。也就说明混合的数据就越多。

    calEnt(dataSet)
    >>>0.9709505944546686
    

    4,信息增益

    在这里插入图片描述
    在这里插入图片描述
    我们来计算一下 第0列信息增益
    在这里插入图片描述

    a = (3/5)*(-(2/3)*np.log2(2/3)-(1/3)*np.log2(1/3))
    calEnt(dataSet) - a
    >>>0.4199730940219749
    

    第1列信息增益

    a = (4/5)*(-(1/2)*np.log2(1/2)-(1/2)*np.log2(1/2)) + (1/5)*np.log2(1)
    calEnt(dataSet) - a
    >>>0.17095059445466854
    

    5,数据集最佳切分函数

    找出最佳切分列

    划分数据集的最佳准则是选择最大信息增益,也就是信息下降最快的方向
    函数功能:根据信息增益选择出最佳数据集切分的列
    输入:原始数据集
    输出:数据集最佳切分列的索引

    def bestSplit(dataSet):
        baseEnt = calEnt(dataSet)                                           # 计算原始的熵
        bestGain = 0                                                        # 初始化信息增益
        axis = -1                                                           # 初始化最佳切分列,标签列(索引)   
        for i in range(dataSet.shape[1] - 1):                               # 对每一个特征进行循环 
            levels = dataSet.iloc[:,i].value_counts().index                 # 当前列的所有取值(没有重复)
            ents = 0                                                        # 初始化子节点的信息熵
            for j in levels:                                                # 对每一列的每一个取值进行循环  
                childSet = dataSet[dataSet.iloc[:,i] == j]                  # 某个子节点的DataFarme
                ent = calEnt(childSet)                                      # 该子节点的信息熵
                
                ents += (childSet.shape[0] / dataSet.shape[0]) * ent        # 当前列的信息熵
                infoGain = baseEnt - ents                                   # 当前列的信息增益
                
                if infoGain > bestGain:                                     # 选择最大的信息增益
                    bestGain = infoGain
                    axis = i                                                # 返回所在列的索引
        return axis
    

    ↓ 可知:第0列为最佳列

    bestSplit(dataSet)
    >>>0
    

    (第0列 最佳增益:0.42 > 第1列 最佳增益:0.17)

    按照给定列切分数据集

    参数说明
    dataSet:原始数据集
    axis:指定列索引
    value:指定的属性值
    返回
    redataSet:按照指定列索引和属性值切分后的数据集

    def mySplit(dataSet, axis, value):
        col = dataSet.columns[axis]
        redataSet = dataSet.loc[dataSet[col] == value,:].drop(col,axis=1)
        return redataSet
    

    验证函数,以axis=0(最佳列),value=1为例

    mySplit(dataSet, bestSplit(dataSet), 1)
    

    在这里插入图片描述

    6,递归构建决策树

    ID3 算法

    在这里插入图片描述

    编写代码构建决策树

    函数功能:基于最大信息增益切分数据集,递归建决策树
    输入:原始数据集(最后一列为标签)
    输出:字典形式的树

    def createTree(dataSet):
        featlist = list(dataSet.columns)                       # 提取数据集所有列(名称)
        classlist = dataSet.iloc[:,-1].value_counts()          # 获取最后一列 类标签
        
        # 判断:最多标签数目==数据及行数    or 数据集只有一列
        if classlist[0] == dataSet.shape[0] or dataSet.shape[1] == 1:
            return classlist.index[0]                          # 是,则返回类标签(递归停止点)
        
        axis = bestSplit(dataSet)                              # 当前最佳切分列的索引
        bestfeat = featlist[axis]                              # 该列对应的特征
        myTree = {bestfeat:{}}                                 # 采用字典嵌套的方式存储树信息
        del featlist[axis]                                     # 删除当前特征
        valuelist = set(dataSet.iloc[:,axis])                  # 提取最佳切分列的所有属性值
    
        for value in valuelist:                                # 对每一个属性值递归建树    
            myTree[bestfeat][value] = createTree(mySplit(dataSet,axis,value))
        
        return myTree
    

    运行结果

    myTree = createTree(dataSet)
    myTree
    >>>{'no surfacing': {0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}}
    

    决策树的存储

    使用numpy中的save()函数,直接将字典形式的文件保存为 .npy文件
    调用时直接使用 load()函数即可

    # 树的存储
    np.save('myTree.npy', myTree)
    
    # 树的读取
    read_myTree = np.load('myTree.npy').item()
    read_myTree
    >>>{'no surfacing': {0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}}
    

    使用决策树执行分类预测

    函数功能:对一个测试实例进行分类
    参数说明
    inputTree:已经生成的决策树
    labels:存储选择的最优特征标签
    testVec:测试数据列表,顺序对应原数据集

    def classify(inputTree, labels, testVec):
        firstStr = next(iter(inputTree))       # 获取决策树的第一个节点
        secondDict = inputTree[firstStr]       # 下一个节点
        featIndex = labels.index(firstStr)     # 第一个节点所在列的索引
        for key in secondDict.keys():
            if testVec[featIndex] == key:
                if type(secondDict[key]) == dict:
                    classLabel = classify(secondDict[key], labels, testVec)
                else:
                    classLabel = secondDict[key]
        return classLabel
    

    函数功能:对测试集进行预测
    参数说明
    train:训练集
    test:测试集
    返回
    test:分类好的测试集(最后一列为测试结果)

    def acc_classify(train,test):
        inputTree = createTree(train)                      # 根据测试集生成一棵树
        labels = list(train.columns)                       # 数据集所有的列名称
        result = []
        for i in range(test.shape[0]):                     # 对数据集中的每一条(index)数据进行循环
            testVec = test.iloc[i,:-1]                     # 测试集中的一个实例
            classLabel = classify(inputTree,labels,testVec)# 预测该实例的分类
            result.append(classLabel)                      # 将实例追加在result表中
        test['predict'] = result                           # 将预测结果加在标的最后一列
        acc = (test.iloc[:,-1] == test.iloc[:,-2]).mean()  # 计算准确率
        print(f'模型预测准确率为{acc}')
        return test
    

    函数测试(使用 原始数据的前3行 作为测试集合)

    train = dataSet
    test = dataSet.iloc[:3,:]
    acc_classify(train,test)
    >>>模型预测准确率为1.0
    

    在这里插入图片描述

    7,使用sklearn中的包实现决策树的绘制

    需要使用的包

    from sklearn import tree
    from sklearn.tree import DecisionTreeClassifier
    

    数据的前处理

    数据集

    x_train = dataSet.iloc[:,:-1]
    x_train
    

    在这里插入图片描述
    标签集

    参考文献
    .unique()方法的用法
    .apply()方法 和 lambda 的用法

    y_train = dataSet.iloc[:,-1]
    labels = y_train.unique().tolist()                # 只留不同的数值,并进行排序
    y_train = y_train.apply(lambda x:labels.index(x)) # 将文本转为数字
    y_train
    >>>0    0
       1    0
       2    1
       3    1
       4    1
       Name: fish, dtype: int64
    

    构建决策树

    clf = DecisionTreeClassifier()
    clf = clf.fit(x_train, y_train)
    

    (2020 - 3 - 22 星期日)

    展开全文
  • 《机器学习实战》决策树python实现,《统计学习方法》第五章决策树,使用python实现决策树的一个例子,详细的注释,可读性更高。 参照我的博客链接https://blog.csdn.net/u012324136/article/details/80894993
  • 前面总结了信息熵,信息增益和基尼信息的定义,以及决策树三大算法的原理及迭代过程,今天介绍下Python中机器学习Sklearn库中决策树的使用参数 决策树既可以做分类,也可以做回归,两者参数大体相近,下面会先介绍...

    决策树系列目录(文末有大礼相送
    决策树①——信息熵&信息增益&基尼系数
    决策树②——决策树算法原理(ID3,C4.5,CART)
    决策树④——决策树Sklearn调参(GridSearchCV)
    决策树⑤——Python代码实现决策树
    决策树应用实例①——泰坦尼克号分类
    决策树应用实例②——用户流失预测模型
    决策树应用实例③——银行借贷模型
    决策树应用实例④——淘宝&京东白条(回归&均方差&随机森林)

    前面总结了信息熵,信息增益和基尼信息的定义,以及决策树三大算法的原理及迭代过程,今天介绍下Python中机器学习Sklearn库中决策树的使用参数

    决策树既可以做分类,也可以做回归,两者参数大体相近,下面会先介绍分类,再对回归不一样的参数做单独说明

    一、分类参数

    在这里插入图片描述
    1、 criterion: 特征选取方法,可以是gini(基尼系数),entropy(信息增益),通常选择gini,即CART算法,如果选择后者,则是ID3和C4,.5

    2、 splitter: 特征划分点选择方法,可以是best或random,前者是在特征的全部划分点中找到最优的划分点,后者是在随机选择的部分划分点找到局部最优的划分点,一般在样本量不大的时候,选择best,样本量过大,可以用random

    3、 max_depth: 树的最大深度,默认可以不输入,那么不会限制子树的深度,一般在样本少特征也少的情况下,可以不做限制,但是样本过多或者特征过多的情况下,可以设定一个上限,一般取10~100

    4、 min_samples_split:节点再划分所需最少样本数,如果节点上的样本树已经低于这个值,则不会再寻找最优的划分点进行划分,且以结点作为叶子节点,默认是2,如果样本过多的情况下,可以设定一个阈值,具体可根据业务需求和数据量来定

    5、 min_samples_leaf: 叶子节点所需最少样本数,如果达不到这个阈值,则同一父节点的所有叶子节点均被剪枝,这是一个防止过拟合的参数,可以输入一个具体的值,或小于1的数(会根据样本量计算百分比)

    6、 min_weight_fraction_leaf: 叶子节点所有样本权重和,如果低于阈值,则会和兄弟节点一起被剪枝,默认是0,就是不考虑权重问题。这个一般在样本类别偏差较大或有较多缺失值的情况下会考虑

    7、 max_features: 划分考虑最大特征数,不输入则默认全部特征,可以选 log2N,sqrt(N),auto或者是小于1的浮点数(百分比)或整数(具体数量的特征)。如果特征特别多时如大于50,可以考虑选择auto来控制决策树的生成时间

    8、 max_leaf_nodes:最大叶子节点数,防止过拟合,默认不限制,如果设定了阈值,那么会在阈值范围内得到最优的决策树,样本量过多时可以设定

    9、min_impurity_decrease/min_impurity_split: 划分最需最小不纯度,前者是特征选择时低于就不考虑这个特征,后者是如果选取的最优特征划分后达不到这个阈值,则不再划分,节点变成叶子节点

    10、class_weight: 类别权重,在样本有较大缺失值或类别偏差较大时可选,防止决策树向类别过大的样本倾斜。可设定或者balanced,后者会自动根据样本的数量分布计算权重,样本数少则权重高,与min_weight_fraction_leaf对应

    11、presort: 是否排序,基本不用管

    二、回归参数

    在这里插入图片描述
    区别在于以下两点,其余与分类一样

    1、criterion:特征选取方法,不再是gini或entropy,而是mse或mae,前者是均方差,后者是和均值的差的绝对值之和,一般用前者,因为前者通常更为精准,且方便计算

    2、class_weight:不适合回归,同样的min_weight_fraction_leaf 也没有


    本人互联网数据分析师,目前已出ExcelSQLPandasMatplotlibSeaborn机器学习统计学个性推荐关联算法工作总结系列。


    微信搜索并关注 " 数据小斑马" 公众号,回复“机器学习”就可以免费领取下方机器学习—周志华、统计学习方法-李航等9本经典书籍
    在这里插入图片描述

    展开全文
  • 决策树与决策表

    2021-05-06 15:57:19
    决策树 决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种...

    决策树

    决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干,故称决策树。在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。Entropy = 系统的凌乱程度,使用算法ID3, C4.5和C5.0生成树算法使用熵。这一度量是基于信息学理论中熵的概念。

    决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。

    一个决策树包含了三种类型的节点:决策结点、机会结点、终结点。
    决策结点:用方框表示,是对几种可能方案的选择,即最后选择的最佳方案。如果决策属于多级决策,则决策树的中间可以有多个决策点,以决策树根部的决策点为最终决策方案。
    机会结点:用三角形表示,代表备选方案的经济效果(期望值),通过各状态节点的经济效果的对比,按照一定的决策标准就可以选出最佳方案。由状态节点引出的分支称为概率枝,概率枝的数目表示可能出现的自然状态数目每个分枝上要注明该状态出现的概率。
    终结点:用三角形表示,将每个方案在各种自然状态下取得的损益值标注于结果节点的右端。

    决策表

    决策表又称判断表,是一种呈表格状的图形工具,适用于描述处理判断条件较多,各条件又相互组合、有多种决策方案的情况。精确而简洁描述复杂逻辑的方式,将多个条件与这些条件满足后要执行动作相对应。但不同于传统程序语言中的控制语句,决策表能将多个独立的条件和多个动作直接的联系清晰的表示出来。

    用表格的方式描述决策问题一种方法,这种表格也被称为决策矩阵。
    决策表是指一个以行、列形式来描述和表示决策规则和知识信息的表,如果决策问题的后果是用损失的费用表示,这个表也被称为损失矩阵。
    图片来源于百度
    决策表一般分为4个部分。 每个条件对应一个变量、关系或预测,“候选条件”就是它们所有可能的值;动作指要执行的过程或操作;动作入口指根据该入口所对应的候选条件集,是否或按怎样的顺序执行动作。 许多决策表在候选条件中使用“不关心”符号来化简决策表,尤其是当某一条件对应要执行的动作影响很小时。有时,所有的条件在开始时都被认为是重要的,但最后却发现没有一个条件对执行的动作有影响,都是无关的条件。
    在这4个部分的基础上,决策表根据候选条件和动作入口的表现方法的变化而变化。有些决策表使用true/false作为候选条件值(类似与if-then-else),有些使用数字(类似于switch-case),有些甚至使用模糊值或概率值。对应动作入口,可以简单的表示为动作是否执行(检查动作执行),或更高级些,罗列出要执行的动作(为执行的动作排序)。

    展开全文
  • 决策树⑤——Python代码实现决策树

    千次阅读 2019-06-22 14:56:27
    依据现代女生的审美标准,用python代码编写一颗简单的决策树

    决策树系列目录(文末有大礼相送
    决策树①——信息熵&信息增益&基尼系数
    决策树②——决策树算法原理(ID3,C4.5,CART)
    决策树③——决策树参数介绍(分类和回归)
    决策树④——决策树Sklearn调参(GridSearchCV)
    决策树应用实例①——泰坦尼克号分类
    决策树应用实例②——用户流失预测模型
    决策树应用实例③——银行借贷模型
    决策树应用实例④——淘宝&京东白条(回归&均方差&随机森林)

    上一篇总结了Sklearn库用GridSearchCV调参的过程,今天用python依据现代女生的审美创建一颗简单的决策树,看下是否能代表大众的心声~~

    from math import log
    import operator
    
    
    def calcShannonEnt(dataset):
        numEntries = len(dataset)  # 输入样本个数
        labelCounts = {}  # 存类别及相应的数量
        for featVec in dataset:  # 一行即是一个特征向量
            currentLable = featVec[-1] # 取每个样本的类别
            if currentLable not in labelCounts.keys():# 如果变量已经有类别,则在数量上+1,如果没有,则先新建一个再+1
                labelCounts[currentLable] = 0
            labelCounts[currentLable] += 1
        shannoEnt = 0
        for key in labelCounts:
            prob = float(labelCounts[key])/float(numEntries)
            shannoEnt += -prob*log(prob, 2)  # 计算所有样本的信息熵
        return shannoEnt
    
    
    def creaDataSet1():
        dataSet = [['高', '富', '帅','同意'],
                   ['高', '富', '丑','同意'],
                   ['高', '穷', '丑','同意'],
                   ['高', '穷', '帅','同意'],
                   ['矮', '穷', '帅','拒绝'],
                   ['矮', '富', '帅', '同意'],
                   ['矮', '穷', '丑', '拒绝'],
                   ['矮', '富', '丑', '拒绝']]
        labels = ['身高', '财富', '外貌']
        return dataSet, labels
    
    
    def splitDataSet(dataSet, axis, value):
        retDataset = []
        for feaVec in dataSet:  # 迭代每一个样本
            if feaVec[axis] == value:  # 如果样本的这个特征值=要求的值
                reducedFeatVec = feaVec[:axis] # 取这个样本的前N个特征,直到筛选的这个特征
                reducedFeatVec.extend(feaVec[axis+1:]) #拼接这个特征之后的所有特征值,相当于去掉这个特征
                retDataset.append(reducedFeatVec)  # 给出按这个特征值分类后的剩余特征
        return retDataset
    
    
    def chooseBestFeatureToSplit(dataset):
        numFeatures = len(dataset[0]) - 1  #特征个数
        baseEntropy = calcShannonEnt(dataset) # 计算信息熵
        bestInfoGain = 0
        bestFeature = -1
        for i in range(numFeatures):# 迭代每一个特征
            featList = [example[i] for example in dataset]  # 找出这个特征的所有属性值
            uniqueVals = set(featList)  # 这个特征的唯一属性值
            newEntropy = 0
            for value in uniqueVals:
                subDataset = splitDataSet(dataset, i, value)  # 按这个特征这个属性值分类后的子集
                prob = float(len(subDataset))/float(len(dataset))  # 子集在全样本集中的概率
                newEntropy += prob*calcShannonEnt(subDataset)  # 计算按这个特征这个属性分裂后的信息熵,直接迭代完这个特征所有的属性值,得到按这个特征分裂后所有的条件熵
            infoGain = baseEntropy - newEntropy # 计算信息增益
            if (infoGain>bestInfoGain):
                bestInfoGain = infoGain  # 最佳的信息增益
                bestFeature = i  # 最佳的特征
        return bestFeature
    
    
    def majorityCnt(classList):
        classCount = {}
        for vote in classList: # 对提供的样本类别列表进行计数
            if vote not in classCount.keys():
                classCount[vote] = 0
            classCount[vote] += 1
        sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True) # 倒排,找到个数最多的样品类别,则为这个节点的类别
        return sortedClassCount[0][0]
    
    
    def createTree(dataset, labels):
        classList = [example[-1] for example in dataset] # 得到所有样本的类别
        if classList.count(classList[0]) == len(classList): # 如果样本都是一个类别,则直接按这个类别就行了
            return classList[0]
        if len(dataset[0]) == 1: # 如果只剩下一个特征,?
            return majorityCnt(classList)
        bestFeat = chooseBestFeatureToSplit(dataset)  # 筛选最佳的特征
        print(labels) # 对应的特征名
        bestFeatLabel = labels[bestFeat] # 得到最佳的特征名
        myTree = {bestFeatLabel:{}}
        del (labels[bestFeat]) # 删除已经用于分裂的特征
        featValues = [example[bestFeat] for example in dataset]  # 按此特征的所有特征值
        uniqueVals = set(featValues)  # 特征值的唯一
        for value in uniqueVals:
            subLablels = labels[:] # 剩余可以用于分裂的特征
            print('sub"', subLablels)
            myTree[bestFeatLabel][value] = createTree(splitDataSet(dataset, bestFeat, value), subLablels)
    # 先按最优特征值的某一个属性分裂,得到子集,对子集再找最优特征分裂,直到全部类别一样,或者已经没有特征可选时采用最大投票法得出分类结果;迭代的结果全部依次存入mytree字典中
        return myTree
    
    
    if __name__ == '__main__':
        dataSet, labels = creaDataSet1()
        map = createTree(dataSet, labels)
        print(map)
    

    在这里插入图片描述
    从结果看出,女生在身高,财富和外貌中,最重视的还是身高,如果身高较高,不会在意其它2个条件,如果身高不高,则会再看财富,如果有钱且长得还行,能接受,如果有钱但长得不好则拒绝,如果没钱则直接拒绝。


    本人互联网数据分析师,目前已出ExcelSQLPandasMatplotlibSeaborn机器学习统计学个性推荐关联算法工作总结系列。


    微信搜索并关注 " 数据小斑马" 公众号,回复“机器学习”就可以免费领取下方机器学习—周志华、统计学习方法-李航等9本经典书籍
    在这里插入图片描述

    展开全文
  • 经典书籍《统计学习方法》李航,第5章 决策树(Decision Tree)-Python代码
  • 决策树、决策表

    2021-04-24 15:04:30
    决策树(Decision Tree) 是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。 决策树是一种树形...
  • 在现实生活中,我们每天都会面对各种抉择,例如根据商品的特征和价格决定是否购买。不同于逻辑回归把所有因素加权求和然后通过Sigmoid函数转换成概率进行决策,我们会依次判断各个特征是否满足预...
  • 基于决策树算法的心脏病诊断

    千次阅读 多人点赞 2020-04-12 13:24:51
    基于决策树算法的心脏病诊断 前言 提到机器学习常用的算法,决策树必须榜上有名。决策树算法
  • 决策树实例-ID3

    2021-02-28 10:39:11
    决策树-ID3实例 参考书籍: 《机器学习》周志华,第1版 《统计学习方法》李航,第2版 用来记录自己对书中知识的理解,加强自己的理解和记忆,同时提出自己迷惑不解的地方,提高自己编辑的表达能力。 代码参考博客:...
  • python 决策树算法之讲解实操(上) 序 这次讲解机器学习里面非常经典的一个算法模型——分类树。由于篇幅比较长,所以特分为上下两篇讲解。本篇主要讲解决策树的原理,实际应用以及参数。 算法介绍 1.分类树原理 ...
  • 基于决策树的推荐算法

    千次阅读 2019-01-13 19:16:10
    决策树中,一个叶子节点表示一条决策规则(通常叶子节点的类目等于该节点样本最多的类目),决策树算法的目标是得到准确率高的规则,而决策规则的准确率可以用叶子节点的复杂度来衡量。 1.2复杂度计算 下面列举2种...
  • 1决策树模型数据分类 2决策树剪枝缓解过拟合问题 常见的决策树算法有ID3、C4.5和CART算法。ID3算法,是由澳大利亚计算机科学家Quinlan在1986年提出的,它是经典的决策树算法之一。ID3算法在选择划分节点的属性时...
  • 决策树算法 MATLAB 简单实现

    万次阅读 多人点赞 2018-10-24 19:22:51
    决策树算法 前言 最近在数据挖掘与机器学习的课程上刚刚学到了决策树算法,于是,想自己用 MATLAB 简单实现一下。虽然拿其中最简单算法的进行实现,但是,从构思–...通过阅读机器学习的书籍首先了解决策树算法的基...
  • 公众号后台回复“图书“,了解更多号主新书内容 作者:林骥 来源:林骥 当我们做决策的时候,首先要明确界定自己面对的问题是什么,然后再去寻找合适的方法。今天介绍:决策...
  • [机器学习]决策树算法的MATLAB实现

    千次阅读 多人点赞 2020-11-22 11:42:43
    这是一篇关于决策树算法的MATLAB实现的文章,也是我的课堂实验,学习的书籍为西瓜书。此文章包含树的建立(使用信息增益,基尼指数),绘图,预测以及剪枝(后剪枝),部分代码为老师提供。文章中所有的代码以及老师...
  • Matplotlib绘制决策树代码: # coding=utf-8 import matplotlib.pyplot as plt ''' 遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载! ''' decisionNode = dict...
  • 2.补充上述代码(或自行完成代码编写),针对上述西瓜数据集,用信息增益作为决策准则,生成相应的决策树,输出对应的决策树决策过程, #调用一些包 import numpy as np import math import matplotlib.pyplot as ...
  • 决策树算法总结

    2018-07-18 14:00:12
    参考:《机器学习》Tom版 以及http://blog.csdn.net/v_july_v/article/details/7577684 一、简介 决策树是一个预测模型;他代表的是对象属性与对象值之
  • 决策树应用实例③——银行借贷模型

    千次阅读 多人点赞 2019-06-22 19:45:01
    本文将根据自建的一份包含借款人信息及银行是否借贷的数据集,创建一棵决策树,并进行预测,代码过程如下: 一、导入数据 # 导入库 import pandas as pd import numpy as np from sklearn.tree import De...
  • xgboost决策树是n颗cart决策树互相作用得到的一种决策树模型。 源代码: # -*- coding: utf-8 -*- import pandas as pd import os,sys import numpy as np import jieba from sklearn.externals import joblib from ...
  • [监督学习] 分类(决策树

    千次阅读 2020-04-11 11:47:36
    决策树 相关学习链接: 1决策树模型 1.1决策树场景 1.2决策树与条件概率分布 2决策树的构造 2.1信息增益 2.2代码计算经验熵 2.3代码计算信息增益 3决策树的生成与修剪 3.1 ID3算法 3.2 C4.5生成算法 3.3决策树的修剪 ...
  • 公众号后台回复“图书“,了解更多号主新书内容作者:周萝卜来源:萝卜大杂烩今天我们一起来学习决策树,那么什么是决策树呢,其实在生活中,我们无时无刻不在使用它。比如现在有朋友给海伦介绍约...
  • 决策树算法是一种常用的机器学习算法,既可以用于分类,也可以用于回归。决策树算法类似于程序设计语言中嵌套的多分支选择结构,根据不同的条件选择不同的分支路径,最终到达叶子节点,并给出单一输出结...
  • 画DFD、决策树、决策表、数据字典等.pptx
  • 【西瓜书】决策树ID3算法

    千次阅读 2020-12-07 16:56:34
    这里写自定义目录标题决策树原理解释ID3算法算法实现 决策树原理解释         决策树模型是很多集成模型的基础,比如:XGBoost、Adaboost 和随机森林等。决策树算法包括了 ...
  • 利用python决策树分析iris数据及树状图绘制 数据说明 数据划分 模型训练及评估 模型训练代码 模型大致评估 树状图绘制 Graphviz安装配置及入门 代码汇总 基地部门公众号 数据说明 数据来源:...分别为: 'feature_names...
  • 简单决策树模型(Python实现)

    千次阅读 2019-05-30 18:42:55
    可以看到,信息熵是从统计概率的特征得来的,和我们的思路一样嘛(哈哈),关于信息熵的更多知识请参考信息论相关书籍。 可以看出样例中某类样本占比越大,即p(x)越大,信息熵越小,数据的纯度越高。 我们希望...
  • 决策树原理及Python代码实现

    万次阅读 多人点赞 2017-03-16 15:31:47
    决策树其实就是按节点分类数据集的一种方法。在本文中,我将讨论数学上如何使用信息论划分数据集,并编写代码构建决策树。 创建决策树进行分类的流程如下: (1)创建数据集 (2)计算数据集的信息熵 (3)遍历所有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,436
精华内容 4,574
关键字:

关于决策树的书籍