【sklearn学习】决策树、分类树、剪枝策略
模块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如何影响模型?
确定不纯度的计算方法,找出最佳节点和最佳分枝,不纯度越低,决策树对训练集的拟合越好。
决策树的基本流程:
- 计算全部特征的不纯度指标
- 选取不纯度指标最优的特征来分枝
- 在第一个特征的分枝下,计算全部特征的不纯度指标
- 选取不纯度指标最优的特征继续分枝
导入需要的算法库和模块
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学习】决策树、分类树、剪枝策略相关推荐
- 【菜菜的sklearn课堂笔记】决策树-分类树
视频作者:菜菜TsaiTsai 链接:[技术干货]菜菜的机器学习sklearn[全85集]Python进阶_哔哩哔哩_bilibili 关键概念:节点 根节点:没有进边,有出边.包含最初的,针对特征的 ...
- sklearn 决策树(分类树、回归树)的 重要参数、属性、方法理解
文章目录 决策分类树 引入 重要参数 1,criterion 2,splitter 3,max_depth 4,min_samples_leaf 5,min_samples_split 6,max_f ...
- Python——决策树分类模型剪枝
目录 1 决策树模型数据分类 2 决策树剪枝缓解过拟合问题 常见的决策树算法有ID3.C4.5和CART算法.ID3算法,是由澳大利亚计算机科学家Quinlan在1986年提出的,它是经典的决策树算法 ...
- 决策树(分类树、回归树)
决策树 前言:第一篇博客,最近看完决策树,想着归纳一下,也方便自己以后回顾.写的会比较全面一些,可能会有很多不太正确的地方,欢迎大家交流指正 : ) 决策树模型: 决策树模型是运用于分类以及回归的一种 ...
- 数据挖掘学习——决策树分类算法理论(包含Iris实战)
目录 1.决策树分类算法概述及相关公式 (1)基本思路 (2)熵公式 (3)基尼(Gini)系数公式 2.ID3算法 3.C4.5算法 4.CART算法 5.各类决策树分类算法比较 6.过拟合与决策树 ...
- python+sklearn训练决策树分类模型(绘制学习曲线和验证曲线)
本文所用文件的链接 链接:https://pan.baidu.com/s/1RWNVHuXMQleOrEi5vig_bQ 提取码:p57s 关于决策树的初级应用,可以看我之前的文章: https:// ...
- python中sklearn实现决策树及模型评估_sklearn实现决策树
sklearn是一个功能非常强大的工具,可以用几行代码实现丰富的机器学习算法. 本文介绍使用sklearn实现决策树 决策树是经典的机器学习算法,很多复杂的机器学习算法都是由决策时演变而来.它是一种使 ...
- 使用Sklearn学习朴素贝叶斯算法
目录 1,sklearn中的贝叶斯分类器 1.1,高斯朴素贝叶斯GaussianNB 1.1.1,认识高斯朴素贝叶斯 1.1.2,参数说明 1.1.3,高斯朴素贝叶斯建模案例 1.1.4,探索高斯朴素 ...
- 决策树分类算法(1) - 决策树简介及ID3/CS4.5算法
1. 引言 在现实生活中,我们会遇到各种选择,不论是相亲,还是挑选水果,都是基于以往的经验来做判断.如果把判断背后的逻辑整理成一个结构图,你会发现它实际上是一个树状图,这就是我们今天要讲的决策树. 2 ...
- sklearn学习-朴素贝叶斯
文章目录 一.概述 1.真正的概率分类器 2.sklearn中的朴素贝叶斯 二.不同分布下的贝叶斯 1.高斯朴素贝叶斯GaussianNB 2.探索贝叶斯:高斯朴素贝叶斯擅长的数据集 3.探索贝叶斯: ...
最新文章
- 【每日一学】复杂度分析
- go mongodb排序查询_【赵强老师】MongoDB中的索引(下)
- 第二阶段团队项目冲刺第七天
- spring的注解开发@Component @Bean @Value @Autowired、@Qualifier @PropertySource @Configuration
- html 闪烁文本,HTML最简单的文字闪烁代码
- sl animation sample
- python与html5搭建聊天室_html5 websocket 新版协议聊天室 服务端(python版)
- 网站显示网页加载时间代码-Typecho
- nacos修改端口号
- pcap文件linux怎么打开,pcap文件用什么打开
- Vscode tab键使用
- token与refresh_token
- SWAN之ikev2协议crl-revoked配置测试
- k8s部署(多节点)
- 把一个用阿拉伯数字表示的正整数转换成汉字大写表示
- 阿里云王牌架构师杨曦:也谈系统缓存设计误区及高阶使用技巧
- 业界领先的对话式人工智能招聘官Mya震撼市场,两年内增加120家企业客户,包括40家财富500强公司
- 服务器异常网站被百度转码,使用百度云加速后网站访问出现416错误
- Python-Pycharm-模块无法导入:Pycharm奇怪的导入问题
- 华为云服务器远程桌面连接锁定