版权声明:本文为博主原创文章,可以随便转载 https://blog.csdn.net/appleyuchi/article/details/82951479
原始数据集见:
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
#-*- 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条