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,是,少,是,是,高