1. 程式人生 > >python實現決策樹程式碼

python實現決策樹程式碼

資料圖片

from sklearn.feature_extraction import DictVectorizer
import csv
from sklearn import preprocessing
from numpy import *
import numpy as np
from sklearn import tree
from sklearn.externals.six import StringIO

DecistionTreeData = open(r'F:\機器學習\資料\01-ML-Decision Tree.csv', 'rt')
reader = csv.reader(DecistionTreeData)
headers = next(reader)
featureList = []
labelList = []
# 把資料轉換成一個包含特徵的list
for row in reader:
    labelList.append(row[len(row) - 1])
    rowDict = {}
    for i in range(1, len(row) - 1):
        # 相當於行成key:value這樣型別的資料,由於第一個列是id,所以只提取出第二個開始到最後一個
        rowDict[headers[i]] = row[i]
    featureList.append(rowDict)
print(featureList)

# 我們要把每個例項變成矩陣的形式進行儲存
# 也就是
# youth middle_age senor high medium low yes no fair excellent buy
# 1     0           0     1    0      0   0   1  1     0        0
# 每個特徵的選項都列舉出來,選中的特徵為1 未選中的為0
# 下面的步驟就是把每個例項,每行的值轉換成矩陣的格式
vec = DictVectorizer()
dummyX = vec.fit_transform(featureList).toarray()
print("dummyX:" + str(dummyX))

print("labelList:" + str(labelList))
# 將label分類也變成上面的格式
lb = preprocessing.LabelBinarizer()
dummyY = lb.fit_transform(labelList)
# print("dummyY:"+str(dummyY))

# 直接呼叫sklearn下的tree的分類器,並且指定使用熵的方式去解決,建立決策樹
clf = tree.DecisionTreeClassifier(criterion='entropy')
clf = clf.fit(dummyX, dummyY)
print("clf:" + str(clf))

with open("allElectronicInformation.dot", 'w') as f:
    # 生成一個.dot檔案是儲存決策樹資訊的
    f = tree.export_graphviz(clf, feature_names=vec.get_feature_names(), out_file=f)

oneRowX = dummyX[0, :]
print("oneRowX" + str(oneRowX))
newRowX = oneRowX
# 修改第一個特徵的值
newRowX[0] = 1
newRowX[2] = 0


#因為一直報錯需要我reshape把陣列變成矩陣,就做了如下的操作
newRowX = np.array(newRowX)
#第一個引數是代表矩陣行的長度,第二個引數矩陣代表列的長度
newRowX = newRowX.reshape(1,len(newRowX))
print("newRowX:" + str(newRowX))
predictedY = clf.predict(newRowX)
print(str(predictedY))