博客
关于我
决策树(二)—— ID3和C4.5
阅读量:333 次
发布时间:2019-03-04

本文共 1259 字,大约阅读时间需要 4 分钟。

ID3和C4.5

决策树

看这张图就明白了。

决策树

简单来说就是根据特征构造一棵树,叶子结点代表了分类的结果,叶子结点到根节点的路径代表了不同特征的组合。

也就是说我们认为不同特征的组合造成了分类结果的不同。

ID3

那我们怎么构造这棵树呢?把哪些特征放在上面哪些放在下面呢?

上一篇博客提到了信息熵的相关知识。

ID3算法就是根据信息增益来排序的。

我们自然是把最重要的信息放在上面,这里的重要意味着有了这个信息,结果的不确定性就会小很多。

信息确定前后信息熵的变化称为信息增益,某特征的信息增益越大,也就说明这一特征与结果的相关性越高,对于分类的重要性也就越高了。

C4.5

不同于ID3,C4.5使用信息增益比来对特征进行排序。在上上一篇博客中也有对于信息增益比的介绍,这里不做赘述。

简单来说C4.5避免了特征多叉带来的信息增益过大问题,使用某特征单位熵下的信息增益来衡量特征的优先级。

sklearn的实现

sklearn默认使用CART算法,我们要用熵来算的话,把criterion='entropy’即可。这里的entropy代表用熵来算。

import csvfrom sklearn import treefrom sklearn import preprocessingfrom sklearn.feature_extraction import DictVectorizer# 读数据Dtree = open('../data/AllElectronics.csv','r')reader = csv.reader(Dtree)headers = reader.__next__()featureList = []labelList = []for row in reader:    labelList.append(row[-1])    rowDic = {   }    for i in range(1,len(row)-1):        rowDic[headers[i]] = row[i]    featureList.append(rowDic)# 把数据转化成01表示vec = DictVectorizer()x_data = vec.fit_transform(featureList).toarray()# print(vec.get_feature_names())# 将标签转化为01表示lb = preprocessing.LabelBinarizer()y_data = lb.fit_transform(labelList)# 创建决策树模型model = tree.DecisionTreeClassifier(criterion='entropy')model.fit(x_data,y_data)prediction = model.predict(x_data)print("预测值:",prediction)print("实际值:",y_data.T)

result

转载地址:http://drhe.baihongyu.com/

你可能感兴趣的文章
数据挖掘 如何做 Python数据分析与挖掘实战
查看>>
java 重写(override)和重载(overload)区别
查看>>
java 多态
查看>>
java 多态类型转换
查看>>
java ==和equals
查看>>
java 接口(Interface)
查看>>
java 接口(Interface)多态特性
查看>>
搜集整理随机产生人的姓名的2种方法
查看>>
最简单的Socket程序[入门篇]
查看>>
VS2005图标默认存放位置
查看>>
常用正则表达式
查看>>
C#中换行的代码
查看>>
用正则表达式过滤多余空格
查看>>
XML:采用XHTML和CSS设计可重用可换肤的WEB站点
查看>>
U盘“无法识别的USB设备”解决办法
查看>>
4-6 在Vue中使用插槽
查看>>
十二、 PHP (PDO)操作数据库
查看>>
二叉树 简单实现 问题解决
查看>>
第2章 可行性研究
查看>>
python入门——运算符
查看>>