在看了决策树相关内容和麦子学院讲解的利用Python构建决策树的视频教程后,跟着视频做了构建决策树的过程
本次构建决策树的使用的算法是ID3算法,主要思想是利用不同特征值的信息熵来作为最优划分属性,决策树具体内容将在其余文章内给出。
1.环境搭建:
本次使用的环境是Mac OS + PyCharm + anaconda2.7 + GraphViz
需要用到的库主要是sklearn,此外,在Mac上装GraphViz只需在终端输入“brew install graphviz”即可,安装完成后,将下载的文件路径添加到系统环境变量中即可。添加方法:
终端下输入:export PATH="/usr/local/Cellar/graphviz/2.40.1/bin:$PATH" 其中的文件路径就是利用brew安装的文件路径。
配置好后,使用Pycharm新建工程文件“decisionTree”
写入如下程序:
# -*- coding: utf-8 -*-
# coding=utf-8
# 实现决策树并进行预测
from sklearn.feature_extraction import DictVectorizer
import csv
from sklearn import preprocessing
from sklearn import tree
# from ..items import DmozItem
# from sklearn.externals.six import StringIO
# read in the csv file and put features in a list of dict and list of class label
allElectronicsData = open('/Users/damu/study/AppData/ML/decisionTree/AllElectronics.csv', 'rb')
reader = csv.reader(allElectronicsData)
headers = reader.next()
# print(headers)
featuresList = []
labelList = []
for row in reader:
labelList.append(row[len(row)-1])
rowDict = {}
for i in range(1,len(row)-1):
rowDict[headers[i]]=row[i]
featuresList.append(rowDict)
# print(featuresList)
vec = DictVectorizer()
dummyX = vec.fit_transform(featuresList).toarray()
print("dummyX:"+str(dummyX))
print(vec.get_feature_names())
print("labelList:"+str(labelList))
lb = preprocessing.LabelBinarizer()
dummyY = lb.fit_transform(labelList)
print("dummyY:"+str(dummyY))
clf = tree.DecisionTreeClassifier(criterion='entropy')
clf = clf.fit(dummyX, dummyY)
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 = dummyX[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))
本程序的csv文件内容大致如下:
程序的目的就是对这14个样本进行构建决策树并对输入的新样本进行预测的过程。
程序的最后是进行预测的过程,最后程序输出为:
可以看到对于一个输入数据,成功的进行了预测。
此外,利用graphviz还可以很方便的将程序过程中生成的.dot文件转化为pdf文件进行显示决策树的样子,具体方法是在终端下输入:dot -Tpdf name.dot -o name1.pdf,在这个程序中生成的决策树如下图所示: