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


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

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

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

    在基于信贷数据集的决策树实验中,可知决策树模型的性能和泛化能力受到许多因素的影响,包括决策树的深度、节点划分的准则、样本数量等。并且,注意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,即不限制最大深度。可以通过设置最大深度来控制模型的复杂度和防止过拟合。

     

    运行结果:

    打开信贷.pdf出现

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

    运行代码:

    1. from sklearn import tree
    2. import numpy as np
    3. from io import StringIO
    4. import pydotplus
    5. X = np.array([[1, 0, 125],[0, 1, 100],[0, 0, 70],[1, 1, 120],
    6. [0, 2, 95],[0, 1, 60],[1, 2, 220],[0, 0, 85],
    7. [0, 1, 75],[0, 0, 90]])
    8. y = np.array([[0], [0], [0], [0], [1],
    9. [0], [0], [1], [0], [1]])
    10. tree_model = tree.DecisionTreeClassifier(criterion='gini',
    11. max_depth=None,
    12. min_samples_leaf=1,
    13. ccp_alpha=0.0)
    14. tree_model.fit(X, y)
    15. dot_data = StringIO()
    16. feature_names = ['House', 'Marriage', 'Annual salary']
    17. target_names = ['No default', 'Default']
    18. tree.export_graphviz(tree_model,
    19. out_file=dot_data,
    20. feature_names=feature_names,
    21. class_names=target_names,
    22. filled=True,
    23. rounded=True,
    24. special_characters=True)
    25. graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
    26. graph.write_pdf("信贷.pdf")

  • 相关阅读:
    Spring Boot 整合 Camunda 实现工作流
    java毕业生设计预约挂号系统演示录像2021计算机源码+系统+mysql+调试部署+lw
    gitlab配置hook,commit message的时候校验提交的信息
    dockerfile的概念
    广域确定性网络技术概述
    海外监管机构出手制裁DeFi,去中心化成伪命题了吗?波卡将何去何从?
    C++实现并查集
    明远智睿IMX6Q烧写Ubuntu18系统,此方法同样适合其它系统!
    ubuntu python serial实现串口数据收发
    分享下我的tmux配置
  • 原文地址:https://blog.csdn.net/weixin_60530224/article/details/134026553