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

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)

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

时间: 2024-10-25 13:31:56

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

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

参考书籍:<机器学习>(周志华) 说       明:本篇内容为读书笔记,主要参考教材为<机器学习>(周志华).详细内容请参阅书籍——第4章 决策树.部分内容参考网络资源,在此感谢所有原创者的工作. ================================================================= 第一部分 理论基础 1. 纯度(purity) 对于一个分支结点,如果该结点所包含的样本都属于同一类,那么它的纯度为1,而我们总是希望纯度越高越好,也就是

【读书笔记】机器学习-周志华 &amp; 机器学习实战(Python)

这两本放在一起看吧.当然了,我觉得Spark上面的实践其实是非常棒的.有另一个系列文章讨论了Spark. /Users/baidu/Documents/Data/Interview/机器学习-数据挖掘/<机器学习_周志华.pdf> 一共442页.能不能这个周末先囫囵吞枣看完呢.哈哈哈. P1 一般用模型指全局性结果(例如决策树),用模式指局部性结果(例如一条规则). P3 如果预测的是离散值,那就是分类-classification:如果预测的是连续值,那就叫回归-regression. P3

机器学习-周志华

机器学习的一些小tips周志华Tom M.Mitchell,是卡内基梅隆大学的教授,讲授“机器学习”等多门课程:美国人工智能协会(AAAL)的主席:美国<Machine Learning>杂志.国际机器学习年度会议(ICML)的创始人:多种技术杂志的撰稿人,曾发表过许多文章,出版过多本专著,是机器学习领域的著名学者. 本书展示了机器学习中核心的算法和理论,并阐明了算法的运行过程.本书综合了许多的研究成果,例如统计学.人工智能.哲学.信息论.生物学.认知科学.计算复杂性和控制论等,并以此来理解问

机器学习周志华——学习器性能度量

衡量模型泛化能力的评价标准,就是性能度量(performance measure). (1)错误率与精度 (2)查准率.查全率与F1 基于样例真实类别,可将学习器预测类别的组合划分为真正例(true positive).假正例(false positive).真反例(true negative).假反例(false negative),TP.FP.TN.FN分别表示其对应的样例数,则有TP+FP+TN+FN=样例总数. 查准率P与查全率R分别定义为: P= TP/(TP+FP)=>正例结果中真正

周志华:关于机器学习的一点思考

https://mp.weixin.qq.com/s/sEZM_o5D6AhyMgvocbsFhw 演讲:周志华 整理:肖琴.闻菲 [新智元导读]机器学习如今大获成功的原因有哪些?如何才能取得进一步的突破?南京大学周志华教授在AI WORLD 2018大会上分享他关于机器学习的一点思考:我们需要设计新的.神经网络以外的深度模型:让智能体在弱监督条件下也能够学习,以及考虑开放动态任务环境下的学习. 播放 震撼!AI WORLD 2018世界人工智能峰会开场视频 南京大学计算机系主任.人工智能学院院

机器学习是什么--周志华

机器学习是什么--周志华 机器学习现在是一大热门,研究的人特多,越来越多的新人涌进来. 不少人其实并没有真正想过,这是不是自己喜欢搞的东西,只不过看见别人都在搞,觉着跟大伙儿走总不会吃亏吧. 问题是,真有个“大伙儿”吗?就不会是“两伙儿”.“三伙儿”?如果有“几伙儿”,那到底该跟着“哪伙儿”走呢? 很多人可能没有意识到,所谓的machine learning community,现在至少包含了两个有着完全不同的文化.完全不同的价值观的群体,称为machine learning "communit

(转)周志华:“深”为什么重要,以及还有什么深的网络

周志华老师大家应该都很熟悉吧,今天偶然看到他在今年IJCAI大会上的发言稿,感觉读完受益匪浅,故摘录下来与大家分享,也方便日后复习查看. 本文由雷锋网整理完成,原文地址:https://ai.yanxishe.com/page/reportDetail/14317 这里只是用于学习用途,非商业用途,如有侵权,请联系博主删除. 深度学习就等于深度神经网络吗? 深度学习今天已经有各种各样的应用,到处都是它,不管图像也好,视频也好,声音自然语言处理等等.那么我们问一个问题,什么是深度学习? 我想大多数

偶尔转帖:AI会议的总结(by南大周志华)

偶尔转帖:AI会议的总结(by南大周志华) 说明: 纯属个人看法, 仅供参考. tier-1的列得较全, tier-2的不太全, tier-3的很不全. 同分的按字母序排列. 不很严谨地说, tier-1是可以令人羡慕的, tier-2是可以令 人尊敬的,由于AI的相关会议非常多, 所以能列进tier-3的也是不错的 tier-1: IJCAI (1+): International Joint Conference on Artificial Intelligence AAAI (1): Na

看周志华教授的一番话有感

[看周志华教授的一番话有感] " 有点幽默,但很朴实,深度学习现在差不多就是民工活,调来调去,刷来刷去.文章发得飞快,貌似热闹,但有多少是能积淀下来的实质真进展,又有多少是换个数据就不靠谱了的蒙事撞大运?既缺乏清澈干净的内在美感,又不致力于去伪存真.正本清源,只图热闹好看,迟早把 arXiv 变成废纸堆. " 周志华教授的这段话在一定程度上说的就是我, 总是把别人的代码拿下来跑, 好像跑通了就会很有成就感 其实这种想法很危险, 在当前深度学习的浪潮里,非常需要能静下心研究出真正的东西而