1. 程式人生 > >決策樹演算法及其應用案例

決策樹演算法及其應用案例

決策樹演算法主要分為三類:
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)
'''