深度学习基础课程1笔记-决策树(Desision Tree)

本篇内容是xxxx深度学习基础课程视频上的,如有侵权,请与我联系,谢谢!

一,理论知识
1)熵(entropy)的概念:
变量的不确定性越大,熵越大。
这里写图片描述
这里写图片描述

2)决策树归纳算法(ID3)-用于选择属性判断结点。
信息获取量(Information Gain):=Gain(A)=Info(D)-Info_A(D)
(就是没有A时的信息增益,减去有A时的信息增益)。得到的数据表示通过A来作为结点分类获取了多少信息。

  1. 示例数据
    这里写图片描述

4)计算过程
(1)没有根据任何属性来分类,目标类的信息增益:买电脑的概率是9/14,不买电脑的概率是5/14。
这里写图片描述

(2)以age来分类的信息熵计算:
这里写图片描述
第一个5/14,是youth(共有5个),(2/5表示这5个youth有2个买电脑,3/5表示有3个没有买电脑);
第二个4/14,是middle_aged(共有4个),(4/4表示这4个middle_aged有4个买电脑,0/4表示有0个没有买电脑);
第二个5/14,是senior(共有5个),(3/5表示这5个senior有3个买电脑,2/5表示有2个没有买电脑.

(3)拿总的Infor(D)减去age的Infor(D),就得到age的信息增益。
这里写图片描述

(4)同样的方法可以计算出其他属性的信息增益:
这里写图片描述
因为age的信息增益最大,所以选择age作为第一个根节点

(5)选age作为第一个节点后,可以得到如下图:
这里写图片描述
middle_aged的数据全是yes,所以不用再分了

(6)针对youth,需要再分。方法如(1)-(4)步

5)其他算法
C4.5,CART…
共同点:都是贪心算法,自上而下
区别:属性选择度量方法不同

6)避免overfitting方法
(1)先剪枝
(2)后剪枝

7)决策树优缺点
有点:直观,便于理解,小规模数据有效
缺点:处理连续变量不好,类别较多时,错误增加的比较快,可规模性一般。

二,Python编程实现

1)先将数据存在csv文件中
这里写图片描述

2)源代码

from sklearn.feature_extraction import DictVectorizer    #转换数据用
import csv    #存储原始数据
from sklearn import preprocessing   #处理
from sklearn import tree
from sklearn.externals.six import StringIO

allElectronicsData=open(r'E:\sxl_Programs\DecisionTree.csv','rt')  #
reader=csv.reader(allElectronicsData)
headers=next(reader)   #读取文件头
print (headers)

featureList=[]   #特征值
labelList=[]     #分类结果标签,是否买电脑,yes no


for row in reader:
    labelList.append(row[len(row)-1])        #读取分类标签值
    rowDict={}
    for i in range(1,len(row)-1):
        rowDict[headers[i]]=row[i]
    featureList.append(rowDict)              #读取特征值

print(featureList)

vec=DictVectorizer()
dumpyX=vec.fit_transform(featureList).toarray()  #将特征值转化成需要的格式

print("dumpyX:"+str(dumpyX))
print(vec.get_feature_names())

print("LabelList:"+str(labelList))

#Vectorize class labels
lb=preprocessing.LabelBinarizer()
dumpyY=lb.fit_transform(labelList)   #分类结果标签转换成需要的格式
print("dumpY:"+str(dumpyY))

#using decison tree for classification
# clf =tree.DecisionTreeClassifier()
clf=tree.DecisionTreeClassifier(criterion='entropy')  #产生决策树
clf=clf.fit(dumpyX,dumpyY)
print("clf:"+str(clf))

with open("allElectronicInformationGainOri.dot","w") as f:
    f=tree.export_graphviz(clf,feature_names=vec.get_feature_names(),out_file=f)

oneRowX=dumpyX[0,:]
print("oneRowX:"+str(oneRowX))

newRowX=oneRowX      #测试决策树

newRowX[0]=1
newRowX[2]=0
print("newRowX:"+str(newRowX))

3)生成的dot文件

这里写图片描述

4)dot转换成可视化的pdf(怎么转百度搜,有一个专门的工具)
这里写图片描述

欢迎扫码关注我的微信公众号

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值