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章 决策树 笔记 理论及实现——“西瓜树”——CART决策树的更多相关文章

  1. 【Todo】【读书笔记】机器学习-周志华

    书籍位置: /Users/baidu/Documents/Data/Interview/机器学习-数据挖掘/<机器学习_周志华.pdf> 一共442页.能不能这个周末先囫囵吞枣看完呢.哈哈 ...

  2. 机器学习周志华 pdf统计学习人工智能资料下载

    周志华-机器学习 pdf,下载地址: https://u12230716.pipipan.com/fs/12230716-239561959 统计学习方法-李航,  下载地址: https://u12 ...

  3. 周志华-机器学习西瓜书-第三章习题3.5 LDA

    本文为周志华机器学习西瓜书第三章课后习题3.5答案,编程实现线性判别分析LDA,数据集为书本第89页的数据 首先介绍LDA算法流程: LDA的一个手工计算数学实例: 课后习题的代码: # coding ...

  4. 《AlphaGo世纪对决》与周志华《机器学习》观后感

    这两天看了<AlphaGo世纪对决>纪录片与南大周志华老师的<机器学习>,想谈谈对人工智能的感想. 首先概述一下视频的内容吧,AlphaGo与李世石对战的过程大家都有基本的了解 ...

  5. 周志华《机器学习》高清电子书pdf分享

    周志华<机器学习>高清电子书pdf下载地址 下载地址1:https://545c.com/file/20525574-415455837 下载地址2: https://pan.baidu. ...

  6. CCF系列奖获奖名单公布,鲍虎军、周志华获CCF王选奖 | CNCC 2017

    本文讲的是CCF系列奖获奖名单公布,鲍虎军.周志华获CCF王选奖 | CNCC 2017, 由中国计算机学会(CCF)主办,福州市人民政府.福州大学承办,福建师范大学.福建工程学院协办的2017中国计 ...

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

    偶尔转帖:AI会议的总结(by南大周志华) 说明: 纯属个人看法, 仅供参考. tier-1的列得较全, tier-2的不太全, tier-3的很不全. 同分的按字母序排列. 不很严谨地说, tier ...

  8. 【转载】 AI会议的总结(by南大周志华)

    原文地址: https://blog.csdn.net/LiFeitengup/article/details/8441054 最近在查找期刊会议级别的时候发现这篇博客,应该是2012年之前的内容,现 ...

  9. AI产业将更凸显个人英雄主义 周志华老师的观点是如此的有深度

    今天无意间在网上看的了一则推送,<周志华:AI产业将更凸显个人英雄主义> http://tech.163.com/18/0601/13/DJ7J39US00098IEO.html 摘录一些 ...

随机推荐

  1. mysql函数总结

    MySQL函数 MySQL数据库提供了很多函数包括: 数学函数:字符串函数:日期和时间函数:条件判断函数:系统信息函数:加密函数:格式化函数: 一.数学函数 数学函数主要用于处理数字,包括整型.浮点数 ...

  2. python--操作系统介绍,进程的创建(并发)

    一 .  操作系统的作用: 1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口 2:管理.调度进程,并且将多个进程对硬件的竞争变得有序 二 多道技术: 所谓多道程序设计技术,就是指允许多个程序同时进入内存 ...

  3. python 基础知识汇总—— if else while continue

    1.if 语句 什么是if语句?if语句用来干什么的? if语句说通俗点,就是判断,如果判断条件为真,那么就执行语句,就像我们生活中例子,如果你饿了,判断为真,就要吃饭,于是你就会执行吃饭这个动作,如 ...

  4. (转)iOS开发之Pch预编译文件的创建

    本文转自 http://www.cnblogs.com/496668219long/p/4568265.html 在Xcode6之前,创建一个新工程xcode会在Supporting files文件夹 ...

  5. errno的定义

    ./include/asm-generic/errno-base.h -->包含errno=~ ./arch/arm/include/asm/errno.h -->包含/include/a ...

  6. C++ 实验六

    Part.2 // 合并两个文件内容到一个新文件中. // 文件名均从键盘输入 #include <iostream> #include <fstream> #include ...

  7. jmeter压力测试入门

    http://www.51testing.com/html/80/n-853680.html http://blog.csdn.net/vincy_zhao/article/details/70238 ...

  8. TMG 模拟公司网络架构要点

    1.部署的router 有且只有一个网关,指向TMG服务器 2.router 确认有默认路由,指向TMG服务器 3.TMG 只能设置一个网关,指向模拟公网关 4.TMG 要手工创建指向router的路 ...

  9. PYDay9-正则表达式、计算器

    1.什么是正则表达式? 正则表达式,又称规则表达式,是一门小型的语言,通常被用来检索.替换那些符合某个模式(规则)的文本. 2.匹配字符: . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线 ...

  10. Leetcode 322.零钱兑换

    零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: 输入: co ...