您的位置:首页 > 编程语言 > Python开发

【机器学习】使用python构建决策树

2017-02-26 16:34 411 查看
在看了决策树相关内容和麦子学院讲解的利用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,在这个程序中生成的决策树如下图所示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: