《机器学习》(周志华)第4章决策树笔记理论及实现——“西瓜树”——cart决策树

君以沫 君以沫     2022-10-03     752

关键词:

CART决策树

(一)《机器学习》(周志华)第4章 决策树 笔记 理论及实现——“西瓜树”

参照上一篇ID3算法实现的决策树(点击上面链接直达),进一步实现CART决策树。

其实只需要改动很小的一部分就可以了,把原先计算信息熵和信息增益的部分换做计算基尼指数,选择最优属性的时候,选择最小的基尼指数即可。

#导入模块
import pandas as pd
import numpy as np
from collections import Counter

#数据获取与处理
def getData(filePath):
    data = pd.read_excel(filePath)
    return data

def dataDeal(data):
    dataList = np.array(data).tolist()
    dataSet = [element[1:] for element in dataList]
    return dataSet

#获取属性名称
def getLabels(data):
    labels = list(data.columns)[1:-1]
    return labels

#获取类别标记
def targetClass(dataSet):
    classification = set([element[-1] for element in dataSet])
    return classification
    
#将分支结点标记为叶结点,选择样本数最多的类作为类标记
def majorityRule(dataSet):
    mostKind = Counter([element[-1] for element in dataSet]).most_common(1)
    majorityKind = mostKind[0][0]
    return majorityKind

##计算基尼值
def calculateGini(dataSet):
    classColumnCnt = Counter([element[-1] for element in dataSet])
    gini = 0
    for symbol in classColumnCnt:
        p_k = classColumnCnt[symbol]/len(dataSet)
        gini = gini+p_k**2
    gini = 1-gini
    return gini

#子数据集构建
def makeAttributeData(dataSet,value,iColumn):
    attributeData = []
    for element in dataSet:
        if element[iColumn]==value:
            row = element[:iColumn]
            row.extend(element[iColumn+1:])
            attributeData.append(row)
    return attributeData

#计算基尼指数
def GiniIndex(dataSet,iColumn):
    index = 0.0
    attribute = set([element[iColumn] for element in dataSet])
    for value in attribute:
        attributeData = makeAttributeData(dataSet,value,iColumn)
        index = index+len(attributeData)/len(dataSet)*calculateGini(attributeData)
    return index

#选择最优属性                
def selectOptimalAttribute(dataSet,labels):
    bestGini = []
    for iColumn in range(0,len(labels)):#不计最后的类别列
        index = GiniIndex(dataSet,iColumn)
        bestGini.append(index)
    sequence = bestGini.index(min(bestGini))
    return sequence
    
#建立决策树
def createTree(dataSet,labels):
    classification = targetClass(dataSet) #获取类别种类(集合去重)
    if len(classification) == 1:
        return list(classification)[0]
    if len(labels) == 1:
        return majorityRule(dataSet)#返回样本种类较多的类别
    sequence = selectOptimalAttribute(dataSet,labels)
    optimalAttribute = labels[sequence]
    del(labels[sequence])
    myTree = {optimalAttribute:{}}
    attribute = set([element[sequence] for element in dataSet])
    for value in attribute:
        subLabels = labels[:]
        myTree[optimalAttribute][value] =  \
                createTree(makeAttributeData(dataSet,value,sequence),subLabels)
    return myTree

#定义主函数
def main():
    filePath = 'watermelonData.xls'
    data = getData(filePath)
    dataSet = dataDeal(data)
    labels = getLabels(data)
    myTree = createTree(dataSet,labels)
    return myTree

#读取数据文件并转换为列表(含有汉字的,使用CSV格式读取容易出错)
if __name__ == '__main__':
    myTree = main()
    print (myTree)

 结果竟然是一样的,深度怀疑做错了。

周志华机器学习--模型评估与选择

周志华机器学习–模型评估与选择第一章绪论第二章模型评估与选择第三章线性模型第四章决策树第五章支持向量机第六章神经网络第七章贝叶斯分类器第八章集成学习和聚类文章目录周志华机器学习--模型评估与选择一、泛化... 查看详情

《机器学习》周志华习题答案4.3

  原题,对西瓜数据集用决策树来进行划分,此处我只选取了西瓜的密度和含糖率这两个连续属性来进行划分,#!/usr/bin/python#-*-coding:utf-8-*-importnumpyasnpimportmatplotlib.pyplotaspltfrommatplotlibimportcolorsfromsklearn.discriminant_analysisimportQuadra 查看详情

《机器学习》周志华习题答案8.3

原题,以不剪枝的决策树作为基学习器,对西瓜数据集实现Adaboost分类。#!/usr/bin/python#-*-coding:utf-8-*-importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.ensembleimportAdaBoostClassifierfromsklearn.treeimportDecisionTreeClassi 查看详情

机器学习决策树理论第二卷

决策树内容来至于《统计学习与方法》李航,《机器学习》周志华,以及《机器学习实战》PeterHarringTon,相互学习,不足之处请大家多多指教!本卷的大纲为1CART算法1.1CART回归树1.2CART分类树2CART剪枝3总结1CART算法CART分类与回归树(classi... 查看详情

开啃《机器学习》(周志华)-第5章神经网络

基本概念:NeuralNetworks:神经网络,由具有适应性的简单单元组成的广泛并行互联的网络,能够模拟生物神经系统对真实物体之间做出的交互反应Neuron:神经元,神经网络的组成单元,收到的输入超过阀值时,会被激活,并传递... 查看详情

《机器学习》周志华习题答案8.5

  用Bagging,以决策树为树桩,在西瓜数据集上实现。#!/usr/bin/python#-*-coding:utf-8-*-importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.ensembleimportBaggingClassifierfromsklearn.treeimportDecisionTreeClassifierfile1 查看详情

决策树周志华

一、书籍  查看详情

《机器学习》西瓜书习题第4章(代码片段)

习题4.1  试证明对于不含冲突数据(即特征向量完全相同但标记不同)的训练集,必存在与训练集一致(即训练误差为0)的决策树.  既然每个标记不同的数据特征向量都不同,只要树的每一条(从根解点到一个叶节点算一条)枝干代... 查看详情

《机器学习》(周志华)笔记

2.3性能度量2.3.1回归任务中的性能度量均方误差2.3.2分类任务中的性能度量精度  acc=(TP+TN)/(TP+FN+FP+TN)错误率E=(FN+FP)/(TP+FN+FP+TN)准确率P=TP/(TP+FP)             & 查看详情

机器学习-决策树(代码片段)

最近在看周志华的《机器学习》,感觉讲的还是条理清晰,循序渐进的。但是只是看了很快概念就混淆,导致脑子里一片混乱,所以准备将看过的内容及学到的东西放在这里和大家相互学习交流。  本文转自:http://blog.csdn.net/... 查看详情

周志华机器学习笔记

首先的阶段由卷积层和池化层组成,卷积的节点组织在特征映射块(featuremaps)中,每个节点与上一层的featuremaps中的局部块通过一系列的权重即过滤器连接。加权和的结果被送到非线性函数中如ReLU。一个featuremaps中所有的节点... 查看详情

《机器学习》--周志华版(西瓜书)--课后参考答案

《机器学习》--周志华版(西瓜书)--课后参考答案  对机器学习一直很感兴趣,也曾阅读过李航老师的《统计学习导论》和Springer的《统计学习导论-基于R应用》等相关书籍,但总感觉自己缺乏深入的理解和系统的实践。... 查看详情

周志华老师的机器学习第五页中,若色泽,根蒂和敲声分别有3,2,2种可能

周志华老师的机器学习第五页中,若色泽,根蒂和敲声分别有3,2,2种可能取值,这我们面临的假设空间规模大小为4×3×3+1=37为什么加1😂参考技术A∅,世界上没有“好瓜”这个东西 查看详情

《机器学习》周志华版(西瓜书)--课后参考答案

第一章绪论 http://blog.csdn.net/icefire_tyh/article/details/52065224第二章模型评估与选择 http://blog.csdn.net/icefire_tyh/article/details/52065867第三章线性模型 http://blog.csdn.net/icefire_tyh/article/detai 查看详情

周志华的《机器学习》这本书怎么来学习

参考技术A先把我网盘的这两本书,和一个word资料看一遍,基本可以懂了。百度网盘下载链接:http://pan.baidu.com/s/1cxIXB4 查看详情

周志华《机器学习初步》绪论

周志华《机器学习初步》绪论Datawhale2022年12月组队学习✌文章目录周志华《机器学习初步》绪论一.机器学习二.典型的机器学习过程三.计算学习理论PAC模型思考两个问题问题性质角度计算要求的角度四.基本术语五.归纳偏好六.NFL... 查看详情

机器学习周志华读书笔记第三章线性模型(代码片段)

1.基本形式f(?)=ω1X1+ω2X2十...+ωdXd+b,2.线性回归均方误差有非常好的几何意义--它对应了常用的欧几里得距离或简称"欧氏距离"(Euclideandistance).基于均方误差最小化来进行模型求解的方法称为"最小二乘法"(leastsqu町emethod).在线性回归... 查看详情

[机器学习与scikit-learn-14]:算法-决策树-工作原理图解

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客本文网址:https://blog.csdn.net/HiWangWenBing/article/details/123340741目录第1章什么是决策树1.1生活中的决策树二分类决策1.2类决策树... 查看详情