1.概述

1.1 决策树是如何工作的?

决策树(Decision Tree)是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规则,并用树状图的结构来呈现这些规则,以解决分类和回归问题。决策树算法容易理解,适用各种数据,在解决各种问题时都有良好表现,尤其是以树模型为核心的各种集成算法,在各个行业和领域都有广泛的应用。
决策树算法的本质是一种图结构,我们只需要问一系列问题就可以对数据进行分类了。比如说,来看看下面这组数据集,这是一系列已知物种以及所属类别的数据:

目标是,将动物们分为哺乳类和非哺乳类。那根据已经收集到的数据,决策树算法为我们算出了下面的这棵决策树:

假如我们现在发现了一种新物种Python,它是冷血动物,体表带鳞片,并且不是胎生,我们就可以通过这棵决策树来判断它的所属类别。

决策树算法的核心是要解决两个问题:
1)如何从数据表中找出最佳节点和最佳分枝?
2)如何让决策树停止生长,防止过拟合?

1.2 sklearn中的决策树

sklearn中决策树的类都包含在tree这个模块下,这个模块一共包括五个类:

主要讲解:DecisionTreeClassifier

sklearn的建模过程:

对应的代码如下所示:

from sklearn import tree #导入需要的模块
clf = tree.DecisionTreeClassifier()     #实例化
clf = clf.fit(X_train,y_train) #用训练集数据训练模型
result = clf.score(X_test,y_test)

2.DecisionTreeClassifier

class sklearn.tree.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, presort=False
)

重要参数:criterion

为了要将表格转化为一棵树,决策树需要找出最佳节点和最佳的分枝方法,对分类树来说,衡量这个“最佳”的指标叫做“不纯度”。通常来说,不纯度越低,决策树对训练集的拟合越好。现在使用的决策树算法在分枝方法上的核心大多是围绕在对某个不纯度相关指标的最优化上。
不纯度基于节点来计算,树中的每个节点都会有一个不纯度,并且子节点的不纯度一定是低于父节点的,也就是说,在同一棵决策树上,叶子节点的不纯度一定是最低的。
Criterion这个参数正是用来决定不纯度的计算方法的。sklearn提供了两种选择:

  1. 输入“entropy”,使用信息熵(Entropy)
  2. 输入”gini“,使用基尼系数(Gini Impurity)

    利用sklearn实现决策树:
    1.导入所需要的算法库和模块
from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split

2.探索数据

#载入数据
wine = load_wine()
x = pd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1)
wine.feature_names
['alcohol','malic_acid','ash','alcalinity_of_ash','magnesium','total_phenols','flavanoids','nonflavanoid_phenols','proanthocyanins','color_intensity','hue','od280/od315_of_diluted_wines','proline']

3.划分训练集和测试集

#. 分训练集和测试集
x_train,x_test,y_train,y_test = train_test_split(wine.data,wine.target,test_size=0.3)
#建立模型
clf = tree.DecisionTreeClassifier(criterion="entropy")
clf = clf.fit(x_train,y_train)
score = clf.score(x_test,y_test)

经过测试,模型的准确率如下所示:

0.9629629629629629

4.查看重要的特征以及对应的权重

clf.feature_importances_
[*zip(wine.feature_names,clf.feature_importances_)]
[('alcohol', 0.018448661796409117),('malic_acid', 0.0),('ash', 0.0),('alcalinity_of_ash', 0.0),('magnesium', 0.0),('total_phenols', 0.0),('flavanoids', 0.43259590886482413),('nonflavanoid_phenols', 0.0),('proanthocyanins', 0.0),('color_intensity', 0.20507049195022564),('hue', 0.016757599408700523),('od280/od315_of_diluted_wines', 0.0),('proline', 0.32712733797984056)]

5.设置好criterion=“entropy”random_state=30splitter=“random”,改变max_depth,观察准确率的变化

import matplotlib.pyplot as plt
test = []
for i in range(10):clf = tree.DecisionTreeClassifier(max_depth=i+1,criterion="entropy",random_state=30,splitter="random")clf = clf.fit(x_train, y_train)score = clf.score(x_test, y_test)test.append(score)
plt.plot(range(1,11),test,color="red",label="max_depth")
plt.legend()
plt.show()


关于决策树剪枝的相关知识,参考如下文档:
链接:https://pan.baidu.com/s/1kL8S5r55ozqyZgdV6U6fKg
提取码:1b3r

努力加油a啊

机器学习之决策树的原理及sklearn实现相关推荐

  1. 机器学习之决策树原理

    机器学习之决策树原理 1 决策树简介 2 数学知识 ① 信息熵 ② 条件熵 ③ 信息增益 ④ 信息增益比(信息增益率) ⑤ 基尼指数(基尼系数) 3 决策树的构建过程 4 三种决策树算法 ① ID3 ...

  2. 利用计算机语言实现ID3算法,机器学习之决策树学习-id3算法-原理分析及c语言代码实现.pdf...

    机器学习之决策树学习-id3算法-原理分析及c语言代码实现.pdf 还剩 23页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保 ...

  3. (机器学习)决策树及其sklearn应用

    用途: 回归:房价预测.贷款风险评估 分类:邮件分类.保险行业的险种推广预测.医疗的辅助诊断 优点: 计算复杂度不高 输出结果容易理解 对中间值的缺失不敏感 可以处理不相关特征 缺点: 容易过拟合 使 ...

  4. 【机器学习】决策树(Decision Tree)

    [机器学习]k近邻算法(KNN) [机器学习]决策树(Decision Tree) [机器学习]朴素贝叶斯(Naive Bayes) 一.概述 决策树(Decision Tree)是有监督学习中的一种 ...

  5. 机器学习实战-决策树(二)Python实现

    转载请注明作者和出处: http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 一 前 ...

  6. Scikit-Learn 机器学习笔记 -- 决策树

    Scikit-Learn 机器学习笔记 – 决策树 参考文档: handson-ml import numpy as np# 加载鸢尾花数据集 def load_dataset():from skle ...

  7. 机器学习实战-决策树-22

    机器学习实战-决策树-叶子分类 import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplo ...

  8. 机器学习-分类之AdaBoost原理及实战

    AdaBoost算法 简介 当一个分类器正确率不那么高时,称其为"弱分类器",或者说该分类器的学习方法为"弱学习方法".与之对应的,存在"强分类器&q ...

  9. 无监督学习 | 层次聚类 之凝聚聚类原理及Sklearn实现

    文章目录 1. 层次聚类 1.1 凝聚聚类 1.2 层次图 1.3 不同凝聚算法比较 2. Sklearn 实现 2.1 层次图可视化 参考文献 相关文章: 机器学习 | 目录 机器学习 | 聚类评估 ...

最新文章

  1. maven引入本地jar包
  2. ceph-deploy mod add_我的世界基座(Pedestals)Mod
  3. 基于python的快速傅里叶变换FFT(二)
  4. 实例Python处理XML文件的方法
  5. 异步通知和同步通知_CCF NOI 2020 网上同步赛报名通知
  6. GBDT和RF的区别
  7. 设置计算机的启动顺序CDROM.C.A,amibios怎么设置cdrom
  8. LeetCode 605 种花问题
  9. java中volatile关键字的含义_Java里volatile关键字是什么意思
  10. python中统计特征
  11. C++中的异常处理(上)
  12. 「洛谷P1231」教辅的组成 解题报告
  13. string和wstring相互转换以及wstring显示中文问题
  14. 《Java开发实战经典》 —— 视频列表
  15. Anaconda 安装python时出错:Collecting package metadata (current_repodata.json): failed
  16. 服务器上连接无线路由器,手把手教你怎么设置连接两个无线路由器上网
  17. React + Taro 小程序跳转公众号
  18. python用户管理系统
  19. Android之FileProvider详解
  20. web前端入门到实战:CSS颜色、背景和剪切

热门文章

  1. C#中Tuple的使用
  2. IOS基础使用PCH文件全局定义宏常量
  3. prometheus 发送恢复 值_Prometheus监控神器-Rules篇
  4. proxifier代理失败原因_上海财务代理
  5. django不修改数据库创外键_Django——model(建表,增删改查,外键,多对多)
  6. java swing jbutton_Java 反射
  7. c++11中thread join和detach的区别
  8. Android开发之购物车添加商品实现抛物线动画
  9. UI组件库从1到N开发心得-组件篇
  10. Spring动态注入泛型集合Bean