文章目录

  • 引言
  • 1. DecisionTreeClassifier
  • 2.DecisionTreeRegressor
  • 3.案例

引言

sklearn中实现的决策树都是二叉树

1. DecisionTreeClassifier

一般默认使用基尼指数即可,因为熵有对数运算,耗时
采用CART算法

from sklearn.tree import DecisionTreeClassifier
决策树分类器
DecisionTreeClassifier(*, criterion='gini', splitter='best', max_depth=None, min_samples_split=2,min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0,min_impurity_split=None, class_weight=None, ccp_alpha=0.0)

Parameters

criterion : {“gini”, “entropy”}, default=”gini,
度量分类质量,前者是基尼系数,后者是信息熵

splitter : {“best”, “random”}, default=”best”
选择分类点,控制用于在每个节点上的拆分策略
“best”支持最佳拆分,“random”支持最佳随机拆分

max_depth : int, default=None
决策树最大深度,常用于解决过拟合

min_samples_split : int or float, default=2
最小样本阈值
如果是int,则取传入值本身作为最小样本数;如果是float,则用ceil(min_samples_split * n_samples)的值作为最小样本数,向上取整

min_samples_leaf : int or float, default=1
叶子节点最小样本
如果是int,则取传入值本身作为最小样本数;
如果是float,则取ceil(min_samples_split * n_samples)的值作为最小样本数,向上取整
这个值限制了叶子节点最小的样本数,如果某叶子节点样本数小于最小样本数,则会和兄弟节点一起被剪枝

min_weight_fraction_leaf : float, default=0.0
叶子节点最小样本权重
在所有叶节点处(所有输入样本)的权重总和中的最小加权分数。
如果未提供sample_weight,则样本的权重相等

max_features : int, float or {“auto”, “sqrt”, “log2”}, default=None
考虑最佳分割时要考虑的特征数量
如果为int,则在每个拆分处考虑
如果为float,则max_features是一个分数,在每个拆分处都考虑int(max_features * n_features)个特征。
如果auto,max_features=sqrt(n_features).
如果 “sqrt”, max_features=sqrt(n_features).
如果“log2”, max_features=log2(n_features
默认则max_features=n_features.

random_state : int, RandomState instance or None, default=None
随机数种子

max_leaf_nodes : int, default=None
最大叶子节点数
如果特征不多,可以不考虑这个值;如果特征多,可以通过交叉验证得到这个值来加以限制

min_impurity_decrease : float, default=0.0
split损失阈值
这个值限制了决策树的增长,如果某个节点的信息增益或基尼指数小于这个阈值,则该节点不生成子结点

class_weight : dict, list of dict or “balanced”, default=None
类别权重
如果为None,则所有类的权重都应为1。
对于多输出问题,可以按与y列相同的顺序提供字典列表。
对于四类的多标签分类
[{0: 1, 1: 1}, {0: 1, 1: 5}, {0: 1, 1: 1}, {0: 1, 1: 1}] instead of [{1:1}, {2:5}, {3:1}, {4:1}].
“balanced”模式使用y的值自动将权重与输入数据中的类频率成反比地调整为n_samples /(n_classes * np.bincount(y))
对于多输出,y的每一列的权重将相乘。
请注意,如果指定了sample_weight,则这些权重将与sample_weight(通过fit方法传递)相乘

ccp_alpha : non-negative float, default=0.0
最小成本复杂性修剪的复杂性参数,默认不执行修剪

Attributes

classes_ : ndarray of shape (n_classes,) or list of ndarray
类标签(单输出问题)或类标签数组的列表(多输出问题)。

feature_importances_ : ndarray of shape (n_features,)
返回特征的重要性

max_features_ : int
最佳分割时要考虑的特征数量的推断值

n_classes_ : int or list of int
类数(用于单输出问题),或包含每个输出的类数的列表(用于多输出问题)

n_features_ : int
执行拟合时的特征数量

n_outputs_ : int
执行拟合时的输出数量

tree_ : Tree instance
Tree对象

Methods

apply(X[, check_input])
返回每个样本被预测的叶子的索引。

cost_complexity_pruning_path(X, y[, …])
在最小成本复杂性修剪期间计算修剪路径。

decision_path(X[, check_input])
返回树的决策路径

fit(X, y[, sample_weight, check_input, …])
从训练集(X,y)构建决策树分类器

get_depth()
返回决策树的深度

get_n_leaves()
返回决策树的叶子数

get_params([deep])
获得这个估计器的参数

predict(X[, check_input])
预测X的类

predict_log_proba(X)
预测输入样本X的类对数概率

predict_proba(X[, check_input])
预测输入样本X的类别概率

score(X, y[, sample_weight])
返回给定测试数据和标签的平均准确度

set_params(**params)
设置这个估计器的参数

>>> from sklearn.datasets import load_iris
>>> from sklearn.model_selection import cross_val_score
>>> from sklearn.tree import DecisionTreeClassifier
>>> clf = DecisionTreeClassifier(random_state=0)
>>> iris = load_iris()
>>> cross_val_score(clf, iris.data, iris.target, cv=10)
...
...
array([ 1.     ,  0.93...,  0.86...,  0.93...,  0.93...,0.93...,  0.93...,  1.     ,  0.93...,  1.      ])

2.DecisionTreeRegressor

from sklearn.tree import DecisionTreeClassifier
决策树回归器
DecisionTreeRegressor(*,  criterion='mse', splitter='best', max_depth=None, min_samples_split=2,
min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None,max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, ccp_alpha=0.0)DecisionTreeClassifier(*, criterion='gini', splitter='best', max_depth=None, min_samples_split=2,min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0,min_impurity_split=None, class_weight=None, ccp_alpha=0.0)

不多赘述,只叙述差别
Parameters

criterion : {“mse”, “friedman_mse”, “mae”, “poisson”}, default=”mse”
度量回归质量
均方误差“ mse”;平均绝对误差“ mae”;“ poisson”;使用泊松偏差的减少来寻找分裂

Attributes

没有classes_ ,n_classes_ 属性

Methods

predict(X[, check_input])
预测X的回归值

from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split
import numpy as npn_samples, n_features = 1000, 20
rng = np.random.RandomState(0)
X = rng.randn(n_samples, n_features)
# positive integer target correlated with X[:, 5] with many zeros:
y = rng.poisson(lam=np.exp(X[:, 5]) / 2)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=rng)
regressor = DecisionTreeRegressor(criterion='poisson', random_state=0)
regressor.fit(X_train, y_train)

3.案例

import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.preprocessing import LabelEncoder
from sklearn import tree
import pydotplus
import matplotlib as mpl# 加载数据
def loaddata():features = ["age", "work", "house", "credit"]x_train = pd.DataFrame([["青年", "否", "否", "一般"],["青年", "否", "否", "好"],["青年", "是", "否", "好"],["青年", "是", "是", "一般"],["青年", "否", "否", "一般"],["中年", "否", "否", "一般"],["中年", "否", "否", "好"],["中年", "是", "是", "好"],["中年", "否", "是", "非常好"],["中年", "否", "是", "非常好"],["老年", "否", "是", "非常好"],["老年", "否", "是", "好"],["老年", "是", "否", "好"],["老年", "是", "否", "非常好"],["老年", "否", "否", "一般"]])y_train = pd.DataFrame(["否", "否", "是", "是", "否", "否", "否", "是", "是", "是", "是", "是", "是", "是", "否"])y_type = [str(k) for k in np.unique(y_train)]# one-hot编码le_x = LabelEncoder()le_x.fit(np.unique(x_train))x_train = x_train.apply(le_x.transform)le_y = LabelEncoder()le_y.fit(y_train)y_train = le_y.transform(y_train)return x_train, y_train,features,le_x,le_y# 决策树可视化
def show(clf,feature,y_type):dot_data = tree.export_graphviz(clf,out_file=None,feature_names=feature,class_names=y_type,filled=True,rounded=True,special_characters=True)# 生成图片graph = pydotplus.graph_from_dot_data(dot_data)graph.write_png('DT_show.png')if __name__ == '__main__':mpl.rcParams["font.sans-serif"] = [u'simHei']mpl.rcParams['axes.unicode_minus'] = False# 加载数据x_train, y_train,features,le_x,le_y = loaddata()# 分类clf = DecisionTreeClassifier()clf.fit(x_train, y_train)y_type = [str(k) for k in np.unique(y_train)]# 可视化show(clf, features,y_type)# 预测X_show = pd.DataFrame([["青年", "否", "否", "一般"]])X_test = X_show.apply(le_x.transform)y_predict = clf.predict(X_test)# 结果输出X_show = [{features[i] :X_show.values[0][i]} for i in range(len(features))]print("{0}被分类为{1}".format(X_show,le_y.inverse_transform(y_predict)))[{'age': '青年'}, {'work': '否'}, {'house': '否'}, {'credit': '一般'}]被分类为['否']

3.1 API : DecisionTreeClassifier、DecisionTreeRegressor相关推荐

  1. 转载-- http接口、api接口、RPC接口、RMI、webservice、Restful等概念

    http接口.api接口.RPC接口.RMI.webservice.Restful等概念 收藏 Linux一叶 https://my.oschina.net/heavenly/blog/499661 ...

  2. Android开发:4-3、Activity常用其他API接口、屏幕旋转

    Activity常用其他API接口 API 屏幕方向改变的一般实现方法: API 1.onSaveInstanceState方法:在onPause之前调用,调用情形 1.在Activity被覆盖或者退 ...

  3. 微信商户号 API 密钥、API 证书配置

    一个全新的商户号如何生成 API 密钥.API 证书的操作教程 商户号关联小程序是为了在小程序中能够使用商户号进行微信支付, 关联公众号亦如此 只是使用商户号的支付功能可以不配置 API 证书,因为 ...

  4. onedrive php映射,Microsoft OneDrive空全局账号自建API(Rclone、OneManager-php)

    OneDrive申请空全局账号,然后登陆Azure自建API(Rclone.OneManager-php)使用,可避免使用公共API因使用频率过高导致的Rclone.网盘列目录程序OneManager ...

  5. URI API——公交、驾车、步行导航

    URI API--公交.驾车.步行导航 接口说明: http://lbsyun.baidu.com/index.php?title=uri/api/web wm_sample.php ......ca ...

  6. Kudu 原理、API使用、代码

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 大数据组件使用 总文章  Impala 操作/读写 Kudu, ...

  7. Page Visibility(页面可见性) API介绍、微拓展

    Page Visibility(页面可见性) API介绍.微拓展 这篇文章发布于 2012年11月29日,星期四,23:30,归类于 web综合. 阅读 66103 次, 今日 2 次 旭哥推荐:3月 ...

  8. 效率神器Apifox_API 文档、API 调试、API Mock、API 自动化测试工具推荐

    文章目录 前言 API 文档设计 - 代码未写 文档先行 核心功能 快速上手 接口路径 基础信息 请求参数 参数中使用环境变量(或全局变量/临时变量) 返回响应 接口调试 / 接口用例 快速上手 保存 ...

  9. 拼多多商品详情页 API接口、拼多多商品SKU数据接口 API接口、拼多多关键词搜索接口 API接口 API接口、拼多多关键词采集 API接口、拼多多采集接口 API接口、拼多多详情 API接口

    拼多多API接口,提供商品解析,商品采集等. 拼多多采购项目.店群项目等都可以对接 下方点击注册就可以对接了 点击注册 拼多多商品详情页 API接口.拼多多商品SKU数据接口 API接口.拼多多关键词 ...

  10. 京东商品详情页API接口、京东商品销量API接口、京东商品列表API接口、京东APP详情API接口、京东详情API接口,京东SKU信息接口

    京东商品详情页API接口.京东商品销量API接口.京东商品列表API接口.京东APP详情API接口.京东详情API接口,京东SKU信息接口,通过商品ID提取商品详情页各项数据,包含商品标题,sku i ...

最新文章

  1. apache tomcat下32还是64_linux平台下Tomcat的安装与优化
  2. wxWidgets:wxBitmapComboBox类用法
  3. java多线程wait notify join
  4. TOMCAT部署项目的方式
  5. java 按位_Java中的按位运算
  6. 还在为入门深度学习发愁吗?其实你只需要一周的时间 !
  7. [转]windows和linux进行socket通信
  8. 可遇不可求的Question之error: Failed dependencies: MySQLconflicts 错误篇
  9. 微信小程序实现登录注册页面
  10. 三菱Q系列总线型项目程序全套,三菱PLC程序+proface触摸屏双屏+电气图纸+程序注释规划表
  11. 【嵌入式09】STM32串口通信,发送Hello Windows示例
  12. 韩信点兵(中国剩余定理)
  13. python多元函数求解_使用遗传算法求二元函数的最小值
  14. python- re模块(正则表达式)
  15. Python模拟鼠标按键(长按)
  16. JavaScript内容回顾第十天
  17. 最简单的单例模式,Go版本的实现你写对了吗?
  18. 有人在Github上用几行代码就造了个锤子便签
  19. 从WebService到面向服务架构SOA理解【二】
  20. 服务器未能启动w3svc,win10,iis10无法启动,w3svc服务无法启动

热门文章

  1. 吸血鬼数字—THINKING IN JAVA中一道习题
  2. Connect By在10g中得增强, nocycle关键字等
  3. iOS中控制器的实践和学习(2)-认识XCode4模版(A1,A3,B2简易图)
  4. [Javascript]基于ExplorerCanvas绘制表盘时钟
  5. 30天敏捷结果(24):恢复你的精力
  6. 【转载】VMware完全卸载
  7. windows10 右键 manage 没反应
  8. WebServce之拦截器
  9. 2018.08.22 NOIP模拟 string(模拟)
  10. C#OOP之十一 委托和事件