当前位置: 首页 > news >正文

【机器学习】决策树------迅速了解其基本思想,Sklearn的决策树API及构建决策树的步骤!!!

目录

🍔 案例剖析

🍔 通过sklearn实现决策树分类并进一步认识决策树

🍔 基于规则构建决策树

🍔 构建决策树的三个步骤

🍔 小结


学习目标

🍀 了解决策树算法的基本思想

🍀 了解Sklearn的决策树API

🍀 知道构建决策树的三个步骤

🍔 案例剖析

有的同学可能在大学学习过一门课程叫《数据结构》,里面有一个重要的结构就是“树”,和现实生活中的树一样,树的主要由四部分树根、树干、树枝、树叶组成,今天的决策树也是一种树结构,大家学习的时候可以想象现实生活中的树来来理解。

决策树算法是一种监督学习算法,英文是Decision tree。

决策树思想的来源非常朴素,试想每个人的大脑都有类似于if-else这样的逻辑判断,这其中的if表示的是条件,if之后的then就是一种选择或决策。程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法。

比如:你母亲要给你介绍男朋友,是这么来对话的:

女儿:多大年纪了?

母亲:26。

女儿:长的帅不帅?

母亲:挺帅的。

女儿:收入高不?

母亲:不算很高,中等情况。

女儿:是公务员不?

母亲:是,在税务局上班呢。

女儿:那好,我去见见。

于是你在脑袋里面就有了下面这张图:

作为女孩的你在决策过程就是典型的分类树决策。相当于通过年龄、长相、收入和是否公务员对将男人分为两个类别:见和不见。

🍔 通过sklearn实现决策树分类并进一步认识决策树

基于鸢尾花数据绘制图像

import numpy as np
import matplotlib.pyplot as plt
​
from sklearn import datasets
​
iris = datasets.load_iris()
X = iris.data[:,2:]
y = iris.target
​
plt.scatter(X[y==0,0],X[y==0,1])
plt.scatter(X[y==1,0],X[y==1,1])
plt.scatter(X[y==2,0],X[y==2,1])
​
plt.show()

训练决策树模型

from sklearn.tree import DecisionTreeClassifier
​
tree = DecisionTreeClassifier(max_depth=2,criterion="entropy")
tree.fit(X,y)

依据模型绘制决策树的决策边界

#找到模型的决策边界,并绘制图像(此方法所用到的api不需要掌握,能够调用就行)
def plot_decision_boundary(model,axis):x0,x1 = np.meshgrid(np.linspace(axis[0],axis[1],int((axis[1]-axis[0])*100)).reshape(-1,1),np.linspace(axis[2],axis[3],int((axis[3]-axis[2])*100)).reshape(-1,1))X_new = np.c_[x0.ravel(),x1.ravel()]y_predict = model.predict(X_new)zz = y_predict.reshape(x0.shape)from matplotlib.colors import ListedColormapcustom_map = ListedColormap(["#EF9A9A","#FFF59D","#90CAF9"])plt.contourf(x0,x1,zz,linewidth=5,cmap=custom_map)plot_decision_boundary(tree,axis=[0.5,7.5,0,3])
plt.scatter(X[y==0,0],X[y==0,1])
plt.scatter(X[y==1,0],X[y==1,1])
plt.scatter(X[y==2,0],X[y==2,1])
plt.show()

树模型可视化

from sklearn.tree import plot_tree
import matplotlib.pyplot as plt
​
plot_tree(tree,filled=True)
plt.show()

从上面的可视化图形中看出

  • X[1] <=0.8 作为第一次分割的依据,满足条件的所有样本均为统一类别

  • X[1]>0.8的,依据 X[1]<=0.75 为划分依据

  • 由于设置了树的最大深度为2,第二层的两个叶子节点没有完全区分开

🍔 基于规则构建决策树

在商业的数据挖掘中,不同的消费行为顾客特征的提炼和表述极为重要。

我们模拟了部分顾客及其消费行为数据,包括如下特征:

  • 用户是否购买某种产品(0购买,1不购买)

  • 年龄(青年0,中年1,老年2)

  • 收入(高0,中1,低2)

  • 学生(是1,否0)

  • 信誉(良0,优1)。

我们收集了如表1-1的部分用户购买数据,建立了一张统一的调查表,统计几个月的销售数据。我们要对下表中潜在的客户进行分析,并根据得到的一些特征用于销售人员制定销售策略等工作。

总结为两个问题:

(1) 如何对客户进行分类?

(2) 如何根据分类的依据,给出销售人员的指导意见?

通过上述分析,即可解决问题:

(1)如何对客户进行分类?

答:根据数据集中收集的用户的特征信息

(2)如何根据分类依据,给出销售指导意见呢?

答:给出这样的销售意见:

中年人通常会无条件购买

青年人中如果是学生一般会购买

老年人中信誉好的常常会购买

下面我们思考,如何得到这样的分析结果信息?我们可以通过基于规则建树实现。

从定性的角度画出决策树:

从定量的角度画出决策树:

为什么需要从定量角度来分析呢?

答:这样会更精确的分析用户的特征信息,给出销售人员更准确的数据信息。

根据该树可以解决问题:

(1)如何对客户进行分类?

答:根据数据集中收集的用户的特征信息

(2)如何根据分类依据,给出销售指导意见呢?

答:给出这样的销售意见:

中年人通常会无条件购买

青年人中如果是学生一般会购买

老年人中信誉好的常常会购买

  • 以上就是基于规则建树,接下来我们总结构建决策树三要素。

  • 同时思考,上述建树过程有哪些地方可以优化?

接下来总结出构建决策树三要素

🍔 构建决策树的三个步骤

🐼 通过上述总结分析,归纳总结构建决策树包括三个步骤:

  • 特征选择:选取有较强分类能力的特征

  • 决策树生成

  • 决策树剪枝

🍔 小结

🍬 决策树算法:

  • 是非参数学习算法

  • 可以解决分类(多分类)问题

  • 可以解决回归问题:落在叶子节点的数据的平均值作为回归的结果

🍬 决策树API:

  • from sklearn.tree import DecisionTreeClassifier

  • from sklearn.tree import plot_tree

🍬 构建决策树的三个步骤:

  • 特征选择:选取有较强分类能力的特征

  • 决策树生成

  • 决策树剪枝

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于深度学习的金属锈蚀检测系统详细实施指南
  • HTML+CSS面试题总结:(第一天)
  • 【openwrt-21.02】T750 openwrt-21.02 pptp拨号失败问题分析及解决方案
  • 应对Java虚拟机(JVM)负载突然增大的全面指南
  • Stable Diffusion绘画 | 插件-宽高比调整助手:让计算器毕业
  • 密码管理最佳实践:安全存储与定期更换的艺术
  • Android系统定制--Settings
  • 将顺序表中的元素循环左移p个位置
  • 数学建模之入门篇
  • 《机器学习》数据分析之关键词提取、TF-IDF、项目实现 <下>
  • 如何永久解决 Memory overcommit must be enabled! 警告问题
  • c++单例模式(Singleton)多种实现方式及最优比较
  • 打手机检测算法源码样本展示打手机检测算法实际应用场景介绍
  • sort排序免忘记
  • 云轴科技ZStack产品升级,浙江分公司产品发布会成功举办
  • 《深入 React 技术栈》
  • Angular 响应式表单 基础例子
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • centos安装java运行环境jdk+tomcat
  • express.js的介绍及使用
  • Java 内存分配及垃圾回收机制初探
  • JavaScript 基本功--面试宝典
  • JS专题之继承
  • Octave 入门
  • vue-loader 源码解析系列之 selector
  • 和 || 运算
  • 码农张的Bug人生 - 见面之礼
  • 前端性能优化--懒加载和预加载
  • 前言-如何学习区块链
  • 入门级的git使用指北
  • 实现菜单下拉伸展折叠效果demo
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • # 数论-逆元
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (20050108)又读《平凡的世界》
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (Python) SOAP Web Service (HTTP POST)
  • (python)数据结构---字典
  • (二)linux使用docker容器运行mysql
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (转)编辑寄语:因为爱心,所以美丽
  • ***监测系统的构建(chkrootkit )
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET Micro Framework初体验(二)
  • .NET 常见的偏门问题
  • .netcore如何运行环境安装到Linux服务器
  • .net与java建立WebService再互相调用
  • .pyc文件是什么?
  • ::
  • @Autowired注解的实现原理
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构