以統計學習方法(李航)這本書的例子為基礎
需要注意的地方:
- 我用的是pycharm
- python版本是3.7
- graphviz是一個軟件,在pycharm里面下了還得去官網下
下完之后得加入環境變量可能還需要重啟電腦 - 缺啥庫就安啥庫
- 那個數據是我自己設置的,手敲的。
貸款申請樣本數據表
ID | 年齡 | 有工作 | 有自己的房子 | 信貸情況 | 類別 |
---|---|---|---|---|---|
1 | 青年 | 否 | 否 | 一般 | 否 |
2 | 青年 | 否 | 否 | 好 | 否 |
3 | 青年 | 是 | 否 | 好 | 是 |
4 | 青年 | 是 | 是 | 一般 | 是 |
5 | 青年 | 否 | 否 | 一般 | 否 |
6 | 中年 | 否 | 否 | 一般 | 否 |
7 | 中年 | 否 | 否 | 好 | 否 |
8 | 中年 | 是 | 是 | 好 | 是 |
9 | 中年 | 否 | 是 | 非常好 | 是 |
10 | 中年 | 否 | 是 | 非常好 | 是 |
11 | 老年 | 否 | 是 | 非常好 | 是 |
12 | 老年 | 否 | 是 | 好 | 是 |
13 | 老年 | 是 | 否 | 好 | 是 |
14 | 老年 | 是 | 否 | 非常好 | 是 |
15 | 老年 | 否 | 否 | 一般 | 否 |
數據集
特征量 | 表示 |
---|---|
年齡 | 青年:1 中年:2 老年:3 |
有工作 | 是:1 否:0 |
有自己的房子 | 是1:否:0 |
信貸情況 | 一般:1 好:2 非常好:3 |
類別 | 是:1 否:0 |
dataset=[
[1,0,0,1,0],
[1,0,0,2,0],
[1,1,0,2,1],
[1,1,1,1,1],
[1,0,0,1,0],
[2,0,0,2,0],
[2,0,0,2,0],
[2,1,1,2,1],
[2,0,1,3,1],
[2,0,1,2,1],
[3,0,1,3,1],
[3,0,1,2,1],
[3,1,0,3,1],
[3,1,0,3,1],
[3,0,0,1,0]
]
X = [x[0:4] for x in dataset] #取出特征值
print(X)
Y = [y[-1] for y in dataset]#取Y值
print(Y)
用sklearn的求決策樹的方法求出決策樹,再利用graphviz進行可視化
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import export_graphviz
dataset=[
[1,0,0,1,0],
[1,0,0,2,0],
[1,1,0,2,1],
[1,1,1,1,1],
[1,0,0,1,0],
[2,0,0,2,0],
[2,0,0,2,0],
[2,1,1,2,1],
[2,0,1,3,1],
[2,0,1,2,1],
[3,0,1,3,1],
[3,0,1,2,1],
[3,1,0,3,1],
[3,1,0,3,1],
[3,0,0,1,0]
]
feature =['年齡','沒有工作','沒有自己的房子','信貸情況']
classname =['不借','借']
X = [x[0:4] for x in dataset]
print(X)
Y = [y[-1] for y in dataset]
print(Y)
tree_clf = DecisionTreeClassifier(max_depth=4)
tree_clf.fit(X, Y)
上面是求決策樹的方法但是不能可視化,然后在此基礎上加上下面的代碼
export_graphviz(
tree_clf,
out_file=("loan.dot"),
feature_names=feature,
class_names=classname,
rounded=True,
filled=True,
)
運行代碼會在本目錄生成loan.dot文件
再在pycharm里面的本地終端中進入當前目錄執行以下命令
dot -Tpng loan.dot -o loan.png
就會生成png的圖片。
我的目錄如下
但是你會發現會出現中文亂碼
那么你繼續加以下代碼
import re
# 打開 dot_data.dot,修改 fontname="支持的中文字體"
f = open("./loan.dot", "r+", encoding="utf-8")
open('./Tree_utf8.dot', 'w', encoding="utf-8").write(re.sub(r'fontname=helvetica', 'fontname="Microsoft YaHei"', f.read()))
f.close()
然后看看效果圖
整個代碼如下
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import export_graphviz
dataset=[
[1,0,0,1,0],
[1,0,0,2,0],
[1,1,0,2,1],
[1,1,1,1,1],
[1,0,0,1,0],
[2,0,0,2,0],
[2,0,0,2,0],
[2,1,1,2,1],
[2,0,1,3,1],
[2,0,1,2,1],
[3,0,1,3,1],
[3,0,1,2,1],
[3,1,0,3,1],
[3,1,0,3,1],
[3,0,0,1,0]
]
feature =['年齡','沒有工作','沒有自己的房子','信貸情況']
classname =['不借','借']
X = [x[0:4] for x in dataset]
print(X)
Y = [y[-1] for y in dataset]
print(Y)
tree_clf = DecisionTreeClassifier(max_depth=4)
tree_clf.fit(X, Y)
export_graphviz(
tree_clf,
out_file=("loan.dot"),
feature_names=feature,
class_names=classname,
rounded=True,
filled=True,
)
import re
# 打開 dot_data.dot,修改 fontname="支持的中文字體"
f = open("./loan.dot", "r+", encoding="utf-8")
open('./Tree_utf8.dot', 'w', encoding="utf-8").write(re.sub(r'fontname=helvetica', 'fontname="Microsoft YaHei"', f.read()))
f.close()
'''
dot -Tpng loan.dot -o loan.png
生成圖片
'''