机器学习实验七:决策树-基于信贷数据集,使用sklearn中相关库实现决策树的构造

决策树-基于信贷数据集,使用sklearn中相关库实现决策树的构造

如下图数据集,住房 (1表示拥有住房,0表示没有住房) ;婚姻 (0表示单身1表示已婚,2表示离异) ;年收入一栏中单位为1000元; (拖欠贷款一栏0表示不拖欠,1表示拖欠)

  1. 讨论sklearn中tree.DecisionTreeClassifier()重要的参数有哪些,怎么调整;
  2. 使用tree.DecisionTreeClassifier()、 graphviz函数,选择合适的算法,构造并绘制决策树

机器学习实验七:决策树-基于信贷数据集,使用sklearn中相关库实现决策树的构造_第1张图片

在基于信贷数据集的决策树实验中,可知决策树模型的性能和泛化能力受到许多因素的影响,包括决策树的深度、节点划分的准则、样本数量等。并且,注意tree.DecisionTreeClassifier()的重要参数,以及使用graphviz函数将构造出的决策树导出为DOT格式描述,并使用该库将其可视化展示。 

(a)sklearn中tree.DecisionTreeClassifier()重要的参数有:

  • criterion(划分质量指标):表示衡量划分质量的指标,常用的有基尼系数(gini)和信息熵(entropy)两种,默认为基尼系数。默认值为"gini",也可以选择"entropy"。可以通过设置不同的准则来调整模型的复杂度和性能。
  • Splitter选择节点分裂的策略:用于选择节点分裂的策略。默认值为"best",表示选择最优的分裂点。也可以选择"random",表示随机选择分裂点。通过选择不同的策略,可以调整模型的随机性和性能。
  • min_samples_leaf(叶子节点所需最小样本数:表示叶子节点最少需要的样本数,默认为1,表示叶节点至少包含1个样本。如果某个叶子节点的样本量太小,则会和其他叶子节点合并。可以通过设置最小样本数来控制模型的复杂度和防止过拟合。
  • min_samples_split(内部节点划分所需最小样本数):表示划分一个内部节点需要的最小样本数,默认为2,表示至少需要2个样本才能进行分裂,如果样本量太小则不适合使用决策树。可以通过增加或减少最小样本数来控制模型的复杂度和防止过拟合。
  • max_features(划分时考虑的最大特征数):表示在划分数据集时考虑的最大特征数,默认为 None,即考虑所有特征。可以选择"auto",表示考虑所有特征的平方根;"sqrt",表示考虑所有特征的平方根;"log2",表示考虑所有特征的对数;或者一个整数值,表示考虑固定数量的特征。可以通过调整特征数量来控制模型的复杂度和性能。
  • max_depth(最大深度):表示决策树的最大深度,用于防止过拟合,默认为 None,即不限制最大深度。可以通过设置最大深度来控制模型的复杂度和防止过拟合。

 机器学习实验七:决策树-基于信贷数据集,使用sklearn中相关库实现决策树的构造_第2张图片

运行结果:

打开信贷.pdf出现

机器学习实验七:决策树-基于信贷数据集,使用sklearn中相关库实现决策树的构造_第3张图片

如若没有查看是否在终端pip安装了 pydotplus和graphviz

运行代码:

from sklearn import tree
import numpy as np
from io import StringIO
import pydotplus

X = np.array([[1, 0, 125],[0, 1, 100],[0, 0, 70],[1, 1, 120],
              [0, 2, 95],[0, 1, 60],[1, 2, 220],[0, 0, 85],
              [0, 1, 75],[0, 0, 90]])
y = np.array([[0], [0], [0], [0], [1],
              [0], [0], [1], [0], [1]])
tree_model = tree.DecisionTreeClassifier(criterion='gini',
                                         max_depth=None,
                                         min_samples_leaf=1,
                                         ccp_alpha=0.0)
tree_model.fit(X, y)
dot_data = StringIO()
feature_names = ['House', 'Marriage', 'Annual salary']
target_names = ['No default', 'Default']
tree.export_graphviz(tree_model,
                     out_file=dot_data,
                     feature_names=feature_names,
                     class_names=target_names,
                     filled=True,
                     rounded=True,
                     special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())

graph.write_pdf("信贷.pdf")

你可能感兴趣的:(机器学习,机器学习,决策树,sklearn)