scikit-learn是Python一个机器学习的库,安装简单,不过需要提前装好numpy,Scipy和matplotlib等科学计算的包。
实践代码如下:
from sklearn.feature_extraction import DictVectorizer
#属性类型转化要用到的包
import csv #因为下面用于生成决策树的原始数据是csv电子表格的形式,故导入此包
from sklearn import tree #导入树相关的包
from sklearn import preprocessing#导入结果标记类型转化要用的包
from sklearn.externals.six import StringIO#IO相关的包
#以上是导入一些要用的sklearn库中的包
# Read in the csv file and put features into list of dict and list of class label
allElectronicsData = open(r'D:/AllElectronics.csv', 'rb')
reader = csv.reader(allElectronicsData)
headers = reader.next()
#heades是属性的列表
#print(headers)
#这一段将csv文件中的数据读取到reader上
featureList = []
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]
featureList.append(rowDict)
#创建两个列表,通过循环将所有样例的结果放入labelList,将每个样例所有属性数据以字典的形式放入featureList中
#print(featureList)
# Vetorize features
vec = DictVectorizer()
dummyX = vec.fit_transform(featureList) .toarray()
#print("dummyX: " + str(dummyX))
#print(vec.get_feature_names())
#print("labelList: " + str(labelList))
# vectorize class labels
lb = preprocessing.LabelBinarizer()
dummyY = lb.fit_transform(labelList)
#print("dummyY: " + str(dummyY))
#以上两段分别用sklearn提供的包将样例各属性数据和结果数据,转化为生成决策树所需的dummy类型。也就是用0,1编码的类型。
# Using decision tree for classification
# clf = tree.DecisionTreeClassifier()
clf = tree.DecisionTreeClassifier(criterion='entropy')
#决策树的定义,criterion = 'entropy'表明决策树用ID3算法
clf = clf.fit(dummyX, dummyY)
#生成决策树
#print("clf: " + str(clf))
# Visualize model
with open("allElectronicInformationGainOri.dot", 'w') as f:
f = tree.export_graphviz(clf, feature_names=vec.get_feature_names(), out_file=f)
#以上是构建决策树的过程最终生成一个dot文件,可以在网上下载一个Graphviz工具将dot文件转化为pdf或png等可视化的树形图。
#oneRowX = dummyX[0, :]
#newRowX = oneRowX
#newRowX[1] = 1
#newRowX[2] = 0
#predictx = clf.predict(newRowX)
#print (str(newRowX))
#print("predictx:", str(predictx))
#这里是一个决策树的测试例子,用一条样例的各属性稍微改,调用predict函数预测,则通过各个属性的值直接预测出结果。
详细的sklearn库的API文档资料可以去官网查看。