决策树算法实现:基于年龄、工作、房产和信贷情况的信用评估
决策树算法实现:基于年龄、工作、房产和信贷情况的信用评估
本文使用Python中的Scikit-learn库构建一个决策树模型,以年龄、工作、房产和信贷情况为特征,对信用情况进行分类。
代码实现
from sklearn.tree import DecisionTreeClassifier
from sklearn import preprocessing
import numpy as np
import pandas as pd
from sklearn import tree
import graphviz
features = ['年龄', '有工作', '有自己的房子', '信贷情况']
X_train = pd.DataFrame([
['青年', '否', '否', '一般'],
['青年', '否', '否', '好'],
['青年', '是', '否', '好'],
['青年', '是', '是', '一般'],
['青年', '否', '否', '一般'],
['中年', '否', '否', '一般'],
['中年', '否', '否', '好'],
['中年', '是', '是', '好'],
['中年', '否', '是', '非常好'],
['中年', '否', '是', '非常好'],
['老年', '否', '是', '非常好'],
['老年', '否', '是', '好'],
['老年', '是', '否', '好'],
['老年', '是', '否', '非常好'],
['老年', '否', '否', '一般']
])
y_train = pd.DataFrame(['否', '否', '是', '是', '否',
'否', '否', '是', '是', '是',
'是', '是', '是', '是', '否'])
le_x = preprocessing.LabelEncoder()
le_x.fit(np.unique(X_train))
X_train = X_train.apply(le_x.transform)
le_y = preprocessing.LabelEncoder()
le_y.fit(np.unique(y_train))
y_train = y_train.apply(le_y.transform)
model_tree = DecisionTreeClassifier(criterion='entropy')
model_tree.fit(X_train, y_train)
dot_data = tree.export_graphviz(model_tree, out_file=None,
feature_names=features,
class_names=[str(k) for k in np.unique(y_train)],
filled=True, rounded=True,
special_characters=True)
graph = graphviz.Source(dot_data)
graph.render('tree')
代码流程简要说明
- 数据准备: 定义特征列表
features,并使用pandas库创建包含样本数据的X_train和y_train数据框。 - 数据预处理: 使用
LabelEncoder将类别特征转换为数值型特征,方便模型训练。 - 模型构建: 创建
DecisionTreeClassifier模型,并使用entropy作为信息增益计算方法。 - 模型训练: 使用训练数据
X_train和y_train训练决策树模型。 - 决策树可视化: 使用
tree.export_graphviz生成 DOT 格式的决策树,并使用graphviz库将其渲染为图形文件。
计算验证
首先计算总的经验熵为:
然后我们让 A_1, A_2, A_3, A_4 分别表示年龄、有工作、有自己的房子和信贷情况 4 个特征,则计算出年龄的信息增益为:
同理其他的也可以计算出来,最终得到的是年龄的信息增益最大,因此选择以年龄为根节点进行划分,得到以下决策树:
年龄
├── 青年
│ ├── 有工作
│ │ ├── 否 -> 否
│ │ └── 是 -> 是
│ └── 无工作 -> 否
├── 中年
│ ├── 有房子
│ │ ├── 否 -> 否
│ │ └── 是 -> 是
│ └── 无房子
│ ├── 信贷情况=非常好 -> 是
│ └── 信贷情况=一般/好 -> 否
└── 老年
├── 有房子
│ ├── 否 -> 否
│ └── 是 -> 是
└── 无房子 -> 否
结论
可以看到,最终的决策树对样本进行了分类,分类结果与训练数据中的标签一致,说明模型学习得到的决策树是有效的。
总结
本文介绍了如何使用 Python 中的 Scikit-learn 库构建一个决策树模型,并以信用评估为例,展示了如何使用信息增益进行特征选择,以及如何使用 DOT 图可视化决策树。通过本文,我们可以了解到决策树模型的构建过程、信息增益的计算方法以及决策树可视化的方法。
原文地址: https://www.cveoy.top/t/topic/n6G4 著作权归作者所有。请勿转载和采集!