《统计学习方法》P59决策树绘制-sklearn版本
原始數據集見:
https://blog.csdn.net/ruggier/article/details/78756447
這個數據集的意思是:
因為銀行怕貸款申請者還不起貸款,所以要判斷貸款者的各種情況,以便絕對是否對貸款申請者發放貸款。
因為使用sklearn需要數字類型的數據,不能是字符串數據,所以下面對原始數據集進行轉化。
對照關系如下:
#年齡:
青年:0
中年:1
老年:2
#有工作:1
#沒工作:0
#有自己的房子:1
#沒有自己的房子:0
信貸情況:
一般:0
好:1
非常好:2
加粗樣式
P59的數據集lihang_p59_digit.csv如下:
ID 年齡 有工作 有自己的房子 信貸情況 類別
1 0 0 0 0 0
2 0 0 0 1 0
3 0 1 0 1 1
4 0 1 1 0 1
5 0 0 0 0 0
6 1 0 0 0 0
7 1 0 0 1 0
8 1 1 1 1 1
9 1 0 1 2 1
10 1 0 1 2 1
11 2 0 1 2 1
12 2 0 1 1 1
13 2 1 0 1 1
14 2 1 0 2 1
15 2 0 0 0 0
然后是構建決策樹模型test.py:
#-*- coding:utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8')from sklearn import tree import sys import os import numpy as np# 數據屬性:年齡、有工作、有自己的房子、信貸情況、類別(意思是是否接受該申請者的申請)import pandas as pd obj=pd.read_csv('lihang_p59_digit.csv') #下面開始,行數和列數都是從1開始數起來raw_data=np.array(obj.iloc[0:15,1:5]).tolist()#行范圍[0,15),列范圍(1,5] print"raw_data=",raw_data label=np.array(obj.iloc[0:15,5:6]).tolist() #行范圍[0,15),列范圍是(5,6] print "label=",label print"-----------" print"type(raw_data)=",type(raw_data) print"type(label)=",type(label)print"-----------------------------------------------------------------" clf = tree.DecisionTreeClassifier(criterion="entropy") print"------------------------查看下類型-----------------------------------------"data=np.array(raw_data) print"data=",data clf_tree= clf.fit(raw_data,label)with open("lihang_p59_dot", 'w') as f:dot_data = tree.export_graphviz(clf_tree, out_file=f, feature_names=['年齡', '有工作','有自己的房子','信貸情況'],class_names=["否","是"], filled=True, rounded=True, special_characters=True)運行方法:
python test.py
dot -Tpdf lihang_p59_dot -o lihang_p59_dot.pdf
打開lihang_p59_dot.pdf,圖形如下:
這個圖和書上的P64的圖5.5是一致的。
稍微做下解釋:
這里右下角samples=3的意思是“沒有房子”、“有工作”、“類別(是)”的數據總共有3條
總結
以上是生活随笔為你收集整理的《统计学习方法》P59决策树绘制-sklearn版本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: numpy.matrixlib.defm
- 下一篇: sklearn没有实现ID3算法