決策樹演算法及其應用案例
阿新 • • 發佈:2019-01-08
決策樹演算法主要分為三類:
ID3、C4.5、CART演算法
以ID3演算法為例:
對上表某圖書銷量進行預測.
思考:建立測試模型,各個變數資料權重?資料的轉化?
重點在於:計算各個資訊熵(資料預處理),可參考百度百科內容
決策樹演算法模組:
關注點:對資料需要進行預處理,轉化為結構化資料,然後進行分析處理,資訊熵的計算,權重大小的比較
資料的預處理模組:
#資料的處理模組 fname="C:/Users/Administrator/Desktop/pandashesuanfa/lesson.csv" df=pd.read_csv(fname) #備註:需要將csv檔案轉為utf-8格式再進行讀取檔案 #print(df) x=df.iloc[:,1:5].as_matrix() #提取變數值,並轉化為陣列 y=df.iloc[:,5].as_matrix() #等價於df.iloc[:,5:6] for i in range(0,len(x)): #遍歷所有資料 for j in range(0,len(x[i])): thisdata=x[i][j] if(thisdata=="是" or thisdata=="多" or thisdata=="高"): x[i][j]=int(1) #1的型別轉為整型 else: x[i][j]=int(-1) for i in range(0,len(y)): thisdata=y[i] if(thisdata=="高"): y[i]=1 else: y[i]=-1 ''' 容易錯的地方:直接拿資料進行訓練 原因dtype=object型別不對, 首先應該轉化格式,將x,y轉化為資料框,然後轉化為陣列並指定格式 ''' xf=pd.DataFrame(x) yf=pd.DataFrame(y) x2=xf.as_matrix().astype(int) y2=yf.as_matrix().astype(int)
建立決策樹模組:
#建立決策樹 from sklearn.tree import DecisionTreeClassifier as DTC dtc=DTC(criterion="entropy") dtc.fit(x2,y2) #方法一:通過程式碼實現輸出預測結果資料,如下 import numpy as np x3=np.array([[1,-1,-1,1],[1,1,1,1,],[-1,1,-1,1],[-1,-1,1,1]]) #預測四個資料的銷量高低 rst=dtc.predict(x3) #利用決策樹的方法predict進行計算 print(rst) #得出[ 1 1 -1 -1]四個預測結果:高,高,低,低 ''' #方法二:視覺化決策樹,人工根據決策樹圖形進行分析預測結果 from sklearn.tree import export_graphviz from sklearn.externals.six import StringIO with open("tree.dot","w") as file: #以寫入的方式建立並開啟 file=export_graphviz(dtc,feature_names=["shizhan","keshishu","chu3333xiao","ziliao"],out_file=file) ''' 輸出結果:[ 1 1 -1 -1]:高、高、低、低
完整程式碼如下:
#決策樹ID3演算法 import pandas as pd ''' fname="C:/Users/Administrator/Desktop/pandashesuanfa/lesson1.xls" df=pd.read_excel(fname) 編譯通過 ''' fname="C:/Users/Administrator/Desktop/pandashesuanfa/lesson.csv" df=pd.read_csv(fname) #備註:需要將csv檔案轉為utf-8格式再進行讀取檔案 #print(df) x=df.iloc[:,1:5].as_matrix() #提取變數值,並轉化為陣列 y=df.iloc[:,5].as_matrix() #等價於df.iloc[:,5:6] for i in range(0,len(x)): #遍歷所有資料 for j in range(0,len(x[i])): thisdata=x[i][j] if(thisdata=="是" or thisdata=="多" or thisdata=="高"): x[i][j]=int(1) #1的型別轉為整型 else: x[i][j]=int(-1) for i in range(0,len(y)): thisdata=y[i] if(thisdata=="高"): y[i]=1 else: y[i]=-1 ''' 容易錯的地方:直接拿資料進行訓練 原因dtype=object型別不對, 首先應該轉化格式,將x,y轉化為資料框,然後轉化為陣列並指定格式 ''' xf=pd.DataFrame(x) yf=pd.DataFrame(y) x2=xf.as_matrix().astype(int) y2=yf.as_matrix().astype(int) #建立決策樹 from sklearn.tree import DecisionTreeClassifier as DTC dtc=DTC(criterion="entropy") dtc.fit(x2,y2) #方法一:通過程式碼實現輸出預測結果資料,如下 import numpy as np x3=np.array([[1,-1,-1,1],[1,1,1,1,],[-1,1,-1,1],[-1,-1,1,1]]) #預測四個資料的銷量高低 rst=dtc.predict(x3) #利用決策樹的方法predict進行計算 print(rst) #得出[ 1 1 -1 -1]四個預測結果:高,高,低,低 ''' #方法二:視覺化決策樹,人工根據決策樹圖形進行分析預測結果 from sklearn.tree import export_graphviz from sklearn.externals.six import StringIO with open("tree.dot","w") as file: #以寫入的方式建立並開啟 file=export_graphviz(dtc,feature_names=["shizhan","keshishu","chu3333xiao","ziliao"],out_file=file) '''