02-25 scikit-learn库之决策树
更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html
scikit-learn库之决策树
在scikit-learn库中决策树使用的CART算法,因此该决策树既可以解决回归问题又可以解决分类问题,即下面即将讲的DecisionTreeClassifier
和DecisionTreeRegressor
两个模型。
接下来将会讨论这两者的区别,由于是从官方文档翻译而来,翻译会略有偏颇,有兴趣的也可以去scikit-learn官方文档查看https://scikit-learn.org/stable/modules/classes.html#module-sklearn.tree
一、DecisionTreeClassifier
1.1 使用场景
DecisionTreeClassifier
模型即CART算法实现的决策树,通常用于解决分类问题。
1.2 代码
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
iris = load_iris()
X = iris.data[:, [2, 3]]
y = iris.target
clf = DecisionTreeClassifier(random_state=0)
clf.fit(X, y)
DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,
max_features=None, max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, presort=False, random_state=0,
splitter='best')
cross_val_score(clf, iris.data, iris.target, cv=10)
array([1. , 0.93333333, 1. , 0.93333333, 0.93333333,
0.86666667, 0.93333333, 1. , 1. , 1. ])
1.3 参数详解
- criterion:特征选择,str类型。criterion='gini'表示基尼指数;criterion='entropy'表示信息增益,推荐使用'gini'。默认为'gini'。
- splitter:特征划分点选择,str类型。splitter='best'在特征的所有划分点中找出最优的划分点,适合小样本量;splitter='random'随机的在部分划分点中找到局部最优的划分点,适合大样本量。默认为'best'。
- max_depth:最大深度,int类型。如果样本特征数较少可以使用默认值,如果样本特征数较多一般用max_depty=10-100限制树的最大深度。默认为None。
- min_samples_split:内部节点划分需要最少样本数,float类型。限定子树继续划分的条件,如果某节点的样本数少于min_samples_split,则会停止继续划分子树。如果样本数量过大,建议增大该值,否则建议使用默认值。默认为2。
- min_samples_leaf:叶子节点最少样本数float类型。如果在某次划分叶子节点数目小于样本数,则会和兄弟节点一起剪枝。如果样本数量过大,建议增大该值,否则建议使用默认值。默认为1。
- min_weight_fraction_leaf:叶子节点最小的样本权重和,float类型。该参数限制了叶子节点所有样本权重和的最小值,如果小于该值,则会和兄弟节点一起剪枝。如果样本有角度的缺失值,或者样本的分布偏差较大,则可以考虑权重问题。默认为0。
- max_features:划分的最大特征数,str、int、float类型。max_depth='log2'表示最多考虑\(log_2n\)个特征;max_depth={'sqrt','auto'}表示最多考虑\(\sqrt{n}\)个特征;max_depth=int类型,考虑\(|int类型|\)个特征;max_depth=float类型,如0.3,则考虑\(0.3n\)个特征,其中\(n\)为样本总特征数。默认为None,样本特征数不大于50推荐使用默认值。
- random_state:随机数种子,int类型。random_state=None,不同时刻产生的随机数据是不同的;random_state=int类型,相同随机数种子不同时刻产生的随机数是相同的。默认为None。
- max_leaf_nodes:最大叶子节点数,int类型。限制最大叶子节点数,可以防止树过深,因此可以防止过拟合。默认为None。
- min_impurity_decrease:节点减小不纯度,float类型。如果某节点划分会导致不纯度的减少大于min_impurity_decrease,则停止该节点划分。默认为0。
- min_impurity_split:节点划分最小不纯度,float类型。如果某节点的不纯度小于min_impurity_split,则停止该节点划分,即不生成叶子节点。默认为1e-7(0.0000001)。
- class_weight:类别权重,dict类型或str类型。对于二元分类问题可以使用class_weight={0:0.9,1:0.1},表示0类别权重为0.9,1类别权重为0.1,str类型即为'balanced',模型将根据训练集自动修改不同类别的权重。默认为None。
- presort:数据是否排序,bool类型。样本量较小,presort=True,即让样本数据排序,节点划分速度更快;样本量较大,presort=True,让样本排序反而会增加训练模型的时间。通常使用默认值。默认值为False。
1.4 属性
- classes_:array类型。样本的类别标签列表。
- max_features_:int类型。最大的特征的推断值。
- n_classes_:int类型。fit之后训练集的类别数量。
- n_features_:int类型。fit之后训练集的特征数。
- n_outputs_:int类型。fit之后训练集的输出数量。
- tree_:Tree object类型。返回树结构对象地址。
1.5 方法
- apply(X[, check_input]):返回每个样本预测的叶子节点索引。
- decision_path(X[, check_input]):返回样本X在树中的决策路径。
- fit(X,y):把数据放入模型中训练模型。
- get_params([deep]):返回模型的参数,可以用于Pipeline中。
- predict(X):预测样本X的分类类别。
- predict_log_proba(X):返回样本X在各个类别上对应的对数概率。
- predict_proba(X):返回样本X在各个类别上对应的概率。
- score(X,y[,sample_weight]):基于报告决定系数\(R^2\)评估模型。
- set_prams(**params):创建模型参数。
二、DecisionTreeRegressor
DecisionTreeRegressor
即CART回归树,它与DecisionTreeClassifier
模型的区别在于criterion特征选择标准与分类树不同,它可以选择'mse'和'mae',前者是均方误差,后者是绝对值误差,一般而言'mse'比'mae'更准确。
02-25 scikit-learn库之决策树的更多相关文章
- (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探
一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...
- Scikit Learn: 在python中机器学习
转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...
- scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类 (python代码)
scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...
- 【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用
[网络爬虫入门02]HTTP客户端库Requests的基本原理与基础应用 广东职业技术学院 欧浩源 1.引言 实现网络爬虫的第一步就是要建立网络连接并向服务器或网页等网络资源发起请求.urllib是 ...
- (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探
目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...
- Scikit Learn
Scikit Learn Scikit-Learn简称sklearn,基于 Python 语言的,简单高效的数据挖掘和数据分析工具,建立在 NumPy,SciPy 和 matplotlib 上.
- Python第三方库(模块)"scikit learn"以及其他库的安装
scikit-learn是一个用于机器学习的 Python 模块. 其主页:http://scikit-learn.org/stable/. GitHub地址: https://github.com/ ...
- Sklearn库例子——决策树分类
Sklearn上关于决策树算法使用的介绍:http://scikit-learn.org/stable/modules/tree.html 1.关于决策树:决策树是一个非参数的监督式学习方法,主要用于 ...
- Query意图分析:记一次完整的机器学习过程(scikit learn library学习笔记)
所谓学习问题,是指观察由n个样本组成的集合,并根据这些数据来预测未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.假设现在有一个O2O领域的 ...
随机推荐
- 【Offer】[6] 【从尾到头打印链表】
题目描述 思路分析 Java代码 代码链接 题目描述 从尾到头打印链表,将其添加到ArrayList当中输出 思路分析 递归的思路 利用栈 Java代码 public class Offer006 { ...
- 【LeetCode】300-最长上升子序列
题目描述 给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 ...
- Linux-配置YUM仓库
范例:配置Yum仓库 Yum软件仓库的作用是为了进一步简化RPM管理软件的难度以及自动分析所需软件包及其依赖关系的技术.可以把Yum想象成是一个硕大的软件仓库,里面保存有几乎所有常用的工具,而且只需要 ...
- Failed to execute goal on project e3-manager: Could not resolve dependencies for project cn.e3mall:e3-manager:pom:0.0.1-SNAPSHOT: Could not find artifact cn.e3mall:e3-parent:jar:0.0.1-SNAPSHOT
新建好工程后一定要记得从底层开始clean和install 在启动新建的工程时到最后一步出现了这个问题: Failed to execute goal on project e3-manager-we ...
- docker-将自己的Linux打包为镜像
基于原始文件和目录从0开始制作镜像: 1).基于CentOS7 Linux纯净系统(初始化安装完成),将Linux整个系统打包成tar文件即可: cd /root/ tar --numeric-own ...
- 一文读懂NodeJS全栈开发利器:CabloyJS(万字长文)
目录 0 修订 0.1 修订说明 0.2 修订历史 1 基本概念 1.1 CabloyJS是什么 1.2 CabloyJS核心解决什么问题 1.3 CabloyJS的开发历程 2 数据版本与开发流程 ...
- Angular4+Koa2+MongoDB开发个人博客
**文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号.** ![file](https://img2018.cnblogs.com/blog/830272/201 ...
- linux 操作系统级别监控 TOP命令
Top命令是Linux下一个实时的.交互式的,对操作系统整体监控的命令,可以对CPU.内存.进程监控. 是Linux下最常用的监控命令. 第一行是任务队列信息 1 user 当前登录用户数load a ...
- SpringBoot的一个小彩蛋
彩蛋这种东西还算比较常见,在电影或者游戏里面我们也遇见过不少.今天就简单介绍一下SpringBoot里面的一个小彩蛋. 玩过SpringBoot的同志都知道,SpringBoot的启动界面是这酱紫的: ...
- 使用Shell脚本编译运行C++源码 输入输出重定向
在写C++控制台程序的时,如果使用Xcode或者Visual Studio之类的IDE,需要创建许多工程,会造成很多不便.有时,采用Vim或者Sublime text等编辑器编写简单的控制台程序能节省 ...