更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html

scikit-learn库之决策树

在scikit-learn库中决策树使用的CART算法,因此该决策树既可以解决回归问题又可以解决分类问题,即下面即将讲的DecisionTreeClassifierDecisionTreeRegressor两个模型。

接下来将会讨论这两者的区别,由于是从官方文档翻译而来,翻译会略有偏颇,有兴趣的也可以去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'更准确。

最新文章

  1. 声明变量,一定要用 var!
  2. ecshop 变量表
  3. Flex入门笔记
  4. WPF 自定义Metro Style窗体
  5. java jdbc sqlhelper
  6. C 语言学习guideline
  7. inflate方法与findViewById的区别
  8. poj 3230 Travel(dp)
  9. gcc编译
  10. 深入解析java String中getBytes()的编码问题
  11. 转载《分布式任务调度平台XXL-JOB》
  12. 对Tomcat 8.0进行JVM层面的优化(基于Oracle JDK 8)
  13. Kafka吞吐量测试案例
  14. logging日志文件配置
  15. prestashop nginx rewrite rule
  16. 如何获得scala的帮助和退出
  17. ELK之nginx日志使用json格式输出
  18. CentOS6.X关闭防火墙
  19. Kolakoski数列
  20. OI中的一些模板

热门文章

  1. if __name__ = "main" 解释
  2. 全栈开发博客系统(nodejs+vuejs+mongodb)
  3. java中父类子类静态代码块、构造代码块执行顺序
  4. 1.mssql和mysql sql如何调优?
  5. java架构之路-(源码)mybatis执行流程源码解析
  6. IDEA 配置Springboot项目热部署
  7. Linux 笔记 - 第十六章 LNMP 之(一) 环境搭建
  8. DirectX12 3D 游戏开发与实战第一章内容
  9. RDD基本操作之Action
  10. [Leetcode] 第319题 灯泡开关