模块sklarn.tree

sklearn中决策树的类都在“tree”这个模块之下,这个模块总共包含五个类:

tree.DecisionTreeClassifier 分类树
tree.DecisionTreeRegressor 回归树
tree.export_graphviz 将生成的决策树导出为DOT格式
tree.ExtraTreeClassifier 高随机版本的分类树
tree.ExtraTreeRegressor 高随机版本的回归树

分类树对应的代码

from sklearn import treeclf = tree.DecisionTreeClassifier()
clf = clf.fit(X_train, y_train)
result = clf.score(X_test, y_test)

DecisionTreeClassifier

重要参数

criterion

不纯度越低,决策树对训练集的拟合越好

树中的每个节点都会有一个不纯度,子节点的不纯度一定小于父节点的不纯度

entropy 信息熵

gini 基尼系数

信息熵对不纯度更加敏感,对不纯度的惩罚最强,但在实际应用中,两者效果基本相同。

criterion如何影响模型?

确定不纯度的计算方法,找出最佳节点和最佳分枝,不纯度越低,决策树对训练集的拟合越好。

决策树的基本流程:

  1. 计算全部特征的不纯度指标
  2. 选取不纯度指标最优的特征来分枝
  3. 在第一个特征的分枝下,计算全部特征的不纯度指标
  4. 选取不纯度指标最优的特征继续分枝

导入需要的算法库和模块

from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
import pandas as pd
pd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target),axis=1])
Xtrain, Xtest, ytrain, ytest = train_test_split(wine.data,wine.target,test_size=0.3)clf = tree.DecisionTreeClassifier(criterion="entropy",random_state=1,splitter="random")
clf = clf.fit(Xtrain, ytrain)
score = clf.score(Xtest, ytest)
import graphvizdot_data = tree.export_graphviz(clf, out_file=None, feature_names=wine.feature_names,  class_names=wine.target_names,  filled=True, # 填充颜色,表示特定的某个类别rounded=True,  # 圆角框special_characters=True)
graph = graphviz.Source(dot_data)
graph 
clf.feature_importances_
[*zip(wine.feature_name,clf.feature_importances_)]

random:高纬度时随机性会表现更明显,低维度的数据,随机性几乎不会显现

splitter=“random"(默认best):分枝时会更加随机,树会更深,对训练集的拟合将会降低。

为了让决策树有更好的泛化性,需要对决策树进行剪枝。

  • max_depth

限制树的最大深度,超过设定深度的树枝全部剪掉

  • min_sample_leaf

min_samples_leaf限定一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本,否则,分枝就不会发生,或者按照每个子节点包含min_samples_leaf个样本去分。

  • min_sample_split

min_samples_splits限定一个节点必须包含至少min_samples_splits个训练样本,这个节点才被允许分枝,否则,分枝就不会发生。

  • max_features

限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃

  • min_impurity_decrease

限制信息增益的大小,信息增益小于设定数值的分枝不会发生

确定最优的剪枝参数

import matplotlib.pyplot as plt
test = []
for i in range(10):clf = tree.DecisionTreeClassifier(max_depth = i + 1)clf = clf.fit(Xtrain, ytrain)score = clf.score(Xtest, ytest)test.append(score)
plt.plot(range(1,11),test,color="red",label="max_depth")
plt.legend()
plt.show()

目标权重参数

  • class_weight

完成样本标签平衡的参数,给少量的标签更多的权重,模型向偏向少数类的方向建模

  • min_weight_fraction_leaf

基于权重的剪枝参数,用基于权重的预修剪标准优化树结构,确保叶节点至少包含样本权重的总和的一小部分。

重要属性和接口

# apply返回每个测试样本所在的叶子节点的索引
clf.apply(Xtest)# predict返回每个测试样本的分类/回归结果
clf.predict(Xtest)

【sklearn学习】决策树、分类树、剪枝策略相关推荐

  1. 【菜菜的sklearn课堂笔记】决策树-分类树

    视频作者:菜菜TsaiTsai 链接:[技术干货]菜菜的机器学习sklearn[全85集]Python进阶_哔哩哔哩_bilibili 关键概念:节点 根节点:没有进边,有出边.包含最初的,针对特征的 ...

  2. sklearn 决策树(分类树、回归树)的 重要参数、属性、方法理解

    文章目录 决策分类树 引入 重要参数 1,criterion 2,splitter 3,max_depth 4,min_samples_leaf 5,min_samples_split 6,max_f ...

  3. Python——决策树分类模型剪枝

    目录 1 决策树模型数据分类 2 决策树剪枝缓解过拟合问题 常见的决策树算法有ID3.C4.5和CART算法.ID3算法,是由澳大利亚计算机科学家Quinlan在1986年提出的,它是经典的决策树算法 ...

  4. 决策树(分类树、回归树)

    决策树 前言:第一篇博客,最近看完决策树,想着归纳一下,也方便自己以后回顾.写的会比较全面一些,可能会有很多不太正确的地方,欢迎大家交流指正 : ) 决策树模型: 决策树模型是运用于分类以及回归的一种 ...

  5. 数据挖掘学习——决策树分类算法理论(包含Iris实战)

    目录 1.决策树分类算法概述及相关公式 (1)基本思路 (2)熵公式 (3)基尼(Gini)系数公式 2.ID3算法 3.C4.5算法 4.CART算法 5.各类决策树分类算法比较 6.过拟合与决策树 ...

  6. python+sklearn训练决策树分类模型(绘制学习曲线和验证曲线)

    本文所用文件的链接 链接:https://pan.baidu.com/s/1RWNVHuXMQleOrEi5vig_bQ 提取码:p57s 关于决策树的初级应用,可以看我之前的文章: https:// ...

  7. python中sklearn实现决策树及模型评估_sklearn实现决策树

    sklearn是一个功能非常强大的工具,可以用几行代码实现丰富的机器学习算法. 本文介绍使用sklearn实现决策树 决策树是经典的机器学习算法,很多复杂的机器学习算法都是由决策时演变而来.它是一种使 ...

  8. 使用Sklearn学习朴素贝叶斯算法

    目录 1,sklearn中的贝叶斯分类器 1.1,高斯朴素贝叶斯GaussianNB 1.1.1,认识高斯朴素贝叶斯 1.1.2,参数说明 1.1.3,高斯朴素贝叶斯建模案例 1.1.4,探索高斯朴素 ...

  9. 决策树分类算法(1) - 决策树简介及ID3/CS4.5算法

    1. 引言 在现实生活中,我们会遇到各种选择,不论是相亲,还是挑选水果,都是基于以往的经验来做判断.如果把判断背后的逻辑整理成一个结构图,你会发现它实际上是一个树状图,这就是我们今天要讲的决策树. 2 ...

  10. sklearn学习-朴素贝叶斯

    文章目录 一.概述 1.真正的概率分类器 2.sklearn中的朴素贝叶斯 二.不同分布下的贝叶斯 1.高斯朴素贝叶斯GaussianNB 2.探索贝叶斯:高斯朴素贝叶斯擅长的数据集 3.探索贝叶斯: ...

最新文章

  1. 【每日一学】复杂度分析
  2. go mongodb排序查询_【赵强老师】MongoDB中的索引(下)
  3. 第二阶段团队项目冲刺第七天
  4. spring的注解开发@Component @Bean @Value @Autowired、@Qualifier @PropertySource @Configuration
  5. html 闪烁文本,HTML最简单的文字闪烁代码
  6. sl animation sample
  7. python与html5搭建聊天室_html5 websocket 新版协议聊天室 服务端(python版)
  8. 网站显示网页加载时间代码-Typecho
  9. nacos修改端口号
  10. pcap文件linux怎么打开,pcap文件用什么打开
  11. Vscode tab键使用
  12. token与refresh_token
  13. SWAN之ikev2协议crl-revoked配置测试
  14. k8s部署(多节点)
  15. 把一个用阿拉伯数字表示的正整数转换成汉字大写表示
  16. 阿里云王牌架构师杨曦:也谈系统缓存设计误区及高阶使用技巧
  17. 业界领先的对话式人工智能招聘官Mya震撼市场,两年内增加120家企业客户,包括40家财富500强公司
  18. 服务器异常网站被百度转码,使用百度云加速后网站访问出现416错误
  19. Python-Pycharm-模块无法导入:Pycharm奇怪的导入问题
  20. 华为云服务器远程桌面连接锁定

热门文章

  1. 虚拟计算机组成,计算机组成原理虚拟仿真实验平台研究
  2. android listview settag,Android View中setTag的二三事
  3. Android开发之自带阴影效果的shape
  4. 二维数组按行排序C语言,二维数组对每一行进行排序。。
  5. 视不可当:信息图与可视化传播
  6. Polemo Chat客户端行为
  7. 浅析MySQL JDBC连接配置上的两个误区
  8. shp与json互转(转载)
  9. 转:MVC3系列:~Html.BeginForm与Ajax.BeginForm
  10. C#开源资源大汇总(转)