python實現決策樹程式碼
阿新 • • 發佈:2018-12-09
資料圖片
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))