机器学习—决策树构造算法的python实现
機器學習—決策樹算法的python實現
- 想要實現的效果
- 先來看下結果
- 程序原理
- 數據
- 完整代碼(附有具體解析)
想要實現的效果
對于這個不好玩的決策樹,我想要得到的就是通過決策樹訓練我的數據然后生成這棵決策樹,再進行測試,把辣雞數據輸入得出最后的預測結果
先來看下結果
1.得到的辣雞決策樹
哇,調用graph模塊竟然可直接生成如下的PDF圖片誒
2.那隨手在來張測試結果的截圖吧
程序原理
這個什么鬼原理就是先將訓練集的數據按age、spectacle-prescrip、astigmatism、tear-prod-rate、contact-lenses的分類提取特征數據,再轉化為如下的numpy矩陣。其中age有三中數據故前三位數代表age,以此類推。接著兩位數為astigmatism,再兩位為spectacle-prescrip,再為ear-prod-rate,右邊那3個就是代表contact-lenses。
這個總共有19行的數據蠻,就是代表有19組的數據(數據后面有的)
通過得到的上圖就可以推斷出各個數據所對應的代碼,下圖中把age下的三個數據代碼寫出來了,其他的蠻,emmmmm就留給你們了(假裝不是因為我懶哈哈哈哈哈哈)
得到樓上辣個矩陣后直接調用python的決策樹庫函數構建決策樹再生成一個決策樹PDF就好了,哈哈
數據
以下這些亂七八糟的數據是隱形眼鏡數據,屬性特征為:
age:{young,pre-presbyopic,presbyopic};
年齡 {年輕的,老花眼前期,老花眼}
astigmatism:{no,yes}
散光 {否,是}
spectacle-prescrip:{myope,hypermetrope};
眼睛處方 {近視者,遠視者}
tear-prod-rate {reduced, normal}
眼淚分泌率 {減少,正常}
contact-lenses {soft, hard, none}
隱形眼鏡 {軟性,硬性,不適合佩戴}
(我們最后就是要通過前面幾個屬性來預測這個孩子適合什么樣的眼鏡)
1.那就先給你看下訓練集數據吧
number,age,spectacle-prescrip,astigmatism,tear-prod-rate,contact-lenses
1,young,myope,no,reduced,none
2,young,myope,no,normal,soft
3,young,myope,yes,reduced,none
4,young,myope,yes,normal,hard
5,young,hypermetrope,no,reduced,none
6,young,hypermetrope,no,normal,soft
7,young,hypermetrope,yes,reduced,none
8,young,hypermetrope,yes,normal,hard
9,pre-presbyopic,myope,no,reduced,none
10,pre-presbyopic,myope,no,normal,soft
11,pre-presbyopic,myope,yes,reduced,none
12,pre-presbyopic,myope,yes,normal,hard
13,pre-presbyopic,hypermetrope,no,reduced,none
14,pre-presbyopic,hypermetrope,no,normal,soft
15,pre-presbyopic,hypermetrope,yes,reduced,none
16,pre-presbyopic,hypermetrope,yes,normal,none
17,presbyopic,myope,no,reduced,none
18,presbyopic,myope,no,normal,none
19,presbyopic,myope,yes,reduced,none
2.在來個測試數據
young,hypermetrope,yes,normal,hard
pre-presbyopic,hypermetrope,yes,reduced,none
pre-presbyopic,hypermetrope,yes,normal,none
presbyopic,hypermetrope,yes,reduced,none
presbyopic,hypermetrope,yes,normal,none
完整代碼(附有具體解析)
# pyinstaller -F agfd.py
import os
import csv
import sys
import pydotplus
from sklearn.feature_extraction import DictVectorizer
from sklearn import preprocessing
from sklearn import tree#導入挖掘數據
film_data = open('film.csv','r')
reader = csv.reader(film_data)
headers = next(reader)#展示數據內容
file = open('film.txt', 'r')
for line in file:print(line,end="")
file.close()#定義特征值數組,結果數組
feature_list = []
result_list = []#按行循環(huán)
for row in reader:#取結果 將每行最后一個添加到數組中result_list.append(row[-1])#取特征值 即除去序號和結果的中間部分其余留下,壓縮兩個數組為字典,添加到特征數組中feature_list.append(dict(zip(headers[1:-1],row[1:-1])))# print(result_list)
# print(feature_list)#轉化數據類型為numpy array
vec = DictVectorizer()#進行標準化處理數據
featue1 = vec.fit_transform(feature_list)
result1 = preprocessing.LabelBinarizer().fit_transform(result_list)# print(dummyX)
# print(dummyY)#調用決策樹,傳入信息熵類型
clf = tree.DecisionTreeClassifier(criterion='entropy',random_state=0)
#用fit方法傳入訓練集及結果集
clf = clf.fit(featue1,result1)
os.environ["PATH"] += os.pathsep + 'D:/Graphviz/bin/'#展示決策樹
dot_data = tree.export_graphviz(clf,feature_names=vec.get_feature_names(),filled=True, rounded=True,special_characters=True,out_file=None)
from IPython.display import display, Image
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_pdf("film.pdf")#測試數據,展示分類結果
age = input("age: ")
dct = {'young': '0,0,1', 'pre-presbyopic': '1,0,0', 'presbyopic': '0,1,0'}
age1 = dct[age]
# print(age1)ast = input("astigmatism: ")
dct = {'no': '1,0', 'yes': '0,1'}
ast1 = dct[ast]
# print(ast1)spe = input("spectacle-prescrip: ")
dct = {'myope': '0,1', 'hypermetrope': '1,0'}
spe1 = dct[spe]
# print(spe1)tear = input("tear-prod-rate: ")
dct = {'reduce': '0,1', 'normal': '1,0'}
tear1 = dct[tear]
# print(tear1)print("A=([[%s,%s,%s,%s]])" % (age1, ast1, spe1, tear1))
input("請將A值填入程序中的對應位置,填完后請輸入'1'確認:")A=([[0,0,1,0,1,1,0,1,0]])
predict_result = clf.predict(A)if sum((predict_result==[[0,0,1.]])[0])==3:predict_result = 'soft'print('預測結果:' + predict_result)if sum((predict_result==[[0,1,0.]])[0])==3:predict_result = 'none'print('預測結果:' + predict_result)if sum((predict_result==[[1,0,0.]])[0])==3:predict_result = 'hard'print('預測結果:' + predict_result)sys.exit()
總結
以上是生活随笔為你收集整理的机器学习—决策树构造算法的python实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下代码运行不了?看这里设置环境
- 下一篇: 卷积神经网络原理图文详解