如何构建决策树--原理分析

什么是决策树(判定树)

        判定树是一个类似于流程图的树结构:其中,每个内部结点表示在一个属性上的测试,每个分支代表一个属性输出,而每个树叶结点代表类或类分布。树的最顶层是根结点。

简单的说,就是每一个节点进行判断。

一条信息的信息量大小和它的不确定性有直接的关系,要搞清楚一件非常非常不确定的事情,或者是我们一无所知的事情,需要了解大量信息==>信息量的度量就等于不确定性的多少

如何 选择属性判断结点

有很多标准,这里以决策树归纳算法(ID3)为例,他的标准为

         信息获取量(Information Gain):Gain(A) =  Info(D) - Info_A(D)

举例如何计算(是否购买电脑):

决策树的优点:

     直观,便于理解,小规模数据集有效     

决策树的缺点:

       处理连续变量不好

       类别较多时,错误增加的比较快

# -×- encoding=utf-8 -*-
from sklearn.feature_extraction import DictVectorizer
import csv
from sklearn import preprocessing
from sklearn import tree
from sklearn.externals.six import StringIO

#read the csv file
allElectronicsData = open('play.csv','rb')
reader = csv.reader(allElectronicsData)
header=reader.next()

print(header)

featureList=[]
labelList=[]

for row in reader:
    labelList.append(row[len(row)-1])
    rowDict={}
    for i in range(1,len(row)-1):
        rowDict[header[i]]=row[i]
        
    featureList.append(rowDict)

print(featureList)

#vectorize feature
vec = DictVectorizer()
dumpyX = vec.fit_transform(featureList).toarray()

print("dunmpyX "+ str(dumpyX) )
print("feature_name"+str(vec.get_feature_names()))

print("labelList "+ str(labelList))

#vectorize class lables
lb = preprocessing.LabelBinarizer()
dummyY = lb.fit_transform(labelList)
print("dummyY:" +str(dummyY))


#use the decision tree for classfication

clf = tree.DecisionTreeClassifier(criterion='entropy')
clf = clf.fit(dumpyX,dummyY) #构造决策树

#打印构造决策树采用的参数
print("clf : "+str(clf))

#visilize the model

#with open('play.dot','w') as f:
#    f=tree.export_graphviz(clf,feature_names=vec.get_feature_names,out_file=f)
# dot -Tpdf in.dot -o out.pdf输出pdf文件

#验证数据,取一行数据,修改几个属性预测结果
oneRowX=dumpyX[0,:]
print("oneRowX: "+str(oneRowX))

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

predictedY = clf.predict(newRowX)
print("predictedY:"+str(predictedY))



       可规模性一般

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值