Python简单实现决策树
1 __author__ = '糖衣豆豆' 2 #决策树 3 import pandas as pda 4 fname="~/coding/python/data/lesson.csv" 5 dataf=pda.read_csv(fname,encoding="gbk") 6 x=dataf.iloc[:,1:5].as_matrix() 7 y=dataf.iloc[:,5].as_matrix() 8 for i in range(0,len(x)): 9 for j in range(0,len(x[i])): 10 thisdata=x[i][j] 11 if(thisdata=="是" or thisdata=="多" or thisdata=="高"): 12 x[i][j]=int(1) 13 else: 14 x[i][j]=int(-1) 15 for i in range(0,len(y)): 16 thisdata=y[i] 17 if(thisdata=="高"): 18 y[i]=int(1) 19 else: 20 y[i]=int(-1) 21 #容易错的地方:直接使用 22 #正确的做法:转化好格式,将x,y转化为数据框,然后再转化为数组并指定格式 23 xf=pda.DataFrame(x) 24 yf=pda.DataFrame(y) 25 x2=xf.as_matrix().astype(int) 26 y2=yf.as_matrix().astype(int) 27 28 #建立决策树 29 from sklearn.tree import DecisionTreeClassifier as DTC 30 dtc=DTC(criterion="entropy") 31 dtc.fit(x2,y2) 32 #直接预测决策树 33 import numpy as npy 34 x3=npy.array([[1,-1,-1,1],[1,1,1,1],[-1,1,-1,1]]) 35 rst=dtc.predict(x3) 36 print(rst) 37 #可视化决策树 38 from sklearn.tree import export_graphviz 39 from sklearn.externals.six import StringIO 40 41 with open("~/Downloads/dtc.dot","w") as file: 42 export_graphviz(dtc,feature_names=["combat","num","Promotion","datum"],out_file=file)
lesson.csv的日志如下
序号,实战,课时数,是否促销,是否提供配套资料,销量
1,是,多,是,否,高
2,否,少,是,是,低
3,是,少,是,否,低
4,是,多,否,否,低
5,是,少,否,是,高
6,是,多,是,是,高
7,否,多,是,否,低
8,否,少,是,是,高
9,是,多,是,否,高
10,否,少,否,否,低
11,是,少,否,否,高
12,否,多,是,否,低
13,是,少,否,是,高
14,是,多,否,是,高
15,否,少,是,是,低
16,是,多,否,否,低
17,是,多,否,否,低
18,是,多,否,是,高
19,否,多,是,否,高
20,是,少,否,是,低
21,是,多,否,否,高
22,否,少,是,是,低
23,否,少,否,否,低
24,否,多,是,是,高
25,是,少,否,是,高
26,是,多,否,否,低
27,是,多,是,是,高
28,否,少,否,否,低
29,是,少,是,是,高