學(xué)習(xí)python主要是來了解人工智能争舞、大數(shù)據(jù)及區(qū)塊鏈的底層架構(gòu),我們先從人工智能開發(fā)澈灼,先挑了一個最容易理解的人工智能模型:決策樹竞川,從業(yè)務(wù)場景挑選旅檢通關(guān)的處罰過程店溢,看看決策樹如何歸納一個旅客通關(guān)的處罰過程決策過程。
? ? 首先委乌,我們設(shè)定罰的金額小于200塊床牧,過程提取三個特征值:是否首次違規(guī)、違規(guī)金額是否超過50遭贸、旅客是否大于70歲戈咳。處罰結(jié)果是放行與處罰。我們提取案例的特征如下壕吹,并儲存為sample.csv文件:
決策樹主要原理是根據(jù)特征分類后計算樣本的信息熵值著蛙,計算決策特征值與結(jié)果的關(guān)聯(lián)性,公式如下:
我們不用太糾結(jié)里面的數(shù)學(xué)原理算利,先看怎么用册踩,代碼如下:
import pandas as pd
import numpy as np? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
from sklearn import tree
df = pd.read_csv('sample.csv',encoding="utf-8")? ? ? ? ? ? #導(dǎo)入數(shù)據(jù)源
X = df.drop('處罰結(jié)果',axis=1)? ? ? ? ? #提取特征值?
y = df.處罰結(jié)果? ? ? ? ? ? ? ? ? ? ? ? ? ?#提取結(jié)果
#調(diào)用決策樹方法計算,返回決策結(jié)果clf
clf = tree.DecisionTreeClassifier(max_depth=3)
clf = clf.fit(X, y)? ? ? ? ? #調(diào)用機器學(xué)習(xí)包 決策樹模型
#將決策結(jié)果寫入lc-is.dot文件
with open("lc-is.dot", 'w',encoding="utf-8") as f:
? ? f = tree.export_graphviz(clf,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? out_file=f,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? max_depth = 3,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? impurity = True,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? feature_names = list(X),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? class_names = ['處罰', '放行'],
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? rounded = True,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? filled= True )
是不是很簡單效拭,流程就是讀取文件暂吉,提取特征值和結(jié)果值,扔進去決策樹包里計算缎患,再將結(jié)果輸出 lc-is.dot文件慕的,但是輸出的dot文件還是不夠直觀,我們要把它畫出來挤渔,這里需要安裝兩個包:graphviz和pydot肮街,過程還是比較曲折,使用過程涉及中文亂碼判导,大概過程如下:
一嫉父、conda install graphviz
二、conda install pydot
三眼刃、在https://graphviz.gitlab.io/下載對應(yīng)的MSI安裝包安裝绕辖。
四、將路徑C:\Program Files (x86)\Graphviz2.38\bin 加入path系統(tǒng)環(huán)境變量
五擂红、測試dot.exe 提示正常即可仪际。
使用繪制圖形過程如下(涉及中文亂碼,搞了很久才解決):
打開lc-is.dot昵骤,把里面的 fontname=helvetica 改為?fontname="Microsoft YaHei"树碱,然后在開頭第一行空了兩格,也就是diagraph tree前面加了兩個空格变秦,然后就好了…(不要問為什么成榜,我也不知道為什么)
然后調(diào)用?graphviz執(zhí)行繪制圖形
dot -Tjpg lc-is.dot -o tree.jpg
結(jié)果如下: