读取文件swimming.csv中的数据,作为训练集,使用sklearn中的决策树模型(参数选为criterion=‘entropy’),
训练模型并画出决策时
from sklearn import tree#调用sklearn决策树
import csv
from sklearn.feature_extraction import DictVectorizer#这个类将字符串转化为数据
from sklearn import preprocessing
featureList=[]#存放特征属性值
labels=[]
#DictReader创建的是一个字典对象,遍历后不包含表头(表格内容的第一行)
reader = csv.DictReader(open('swimming.csv'))
for x in reader:
#把第一行数据写成一个字典的形式
#print(reader)
value={
"outlook":x['outlook'],"TEMPERATURE":x['TEMPERATURE'],"HUMIDITY":x['HUMIDITY'],"WINDY":x['WINDY']
}
featureList.append(value)#特征属性值
labelV=x["PLAY"]
labels.append(labelV)
#print('featureList:',featureList)
print('labels:',labels)
vec=DictVectorizer()#这个类是专门将字典表的字符转化为数字
featureDate=vec.fit_transform(featureList).toarray()
#利用fit_ transform将 featurelist传进来,然后转化为数组
print(featureDate)
print('特征属性名:',vec.get_feature_names())
#类别二值化
lb=preprocessing.LabelBinarizer()
#字符审转化为数值,LabelBinarizer二值化; LabelEncoder多值化
labels=lb.fit_transform(labels)
print(labels)
print(lb.classes_)
#建立模型
swim=tree.DecisionTreeClassifier(criterion='entropy',max_depth=3)
#训练模型
swim.fit(featureDate,labels)
#画出缺策树
import graphviz
dot_data=tree.export_graphviz(swim,out_file=None,
feature_names=vec.get_feature_names(),#特征属性名
class_names=lb.classes_,#类别标盆
filled=True,#由颜色标识不纯度
#rounded=True,
special_characters=False)
graph=graphviz.Source(dot_data)
# graph. render( 'computer')
graph