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

决策树算法上篇

决策树概述

决策树是属于有监督机器学习的一种,起源非常早,符合直觉并且非常直观,模仿人类做决策的过程,早期人工智能模型中有很多应用,现在更多的是使用基于决策树的一些集成学习的算法。

示例一:

2288e6e1395a44039715160ddd5f987c.png

上表根据历史数据,记录已有的用户是否可以偿还债务,以及相关的信息。通过该数据,构建的决策树如下

c70406d486074c1ca1b5395def3216b9.png

比如新来一个用户:无房产,单身,年收入55K,那么根据上面的决策树,可以预测他无法偿还债务(蓝色虚线路径)。从上面的决策树,还可以知道是否拥有房产可以很大的决定用户是否可以偿还债务,对借贷业务具有指导意义。

示例二:

女孩母亲要给她介绍对象,年龄是多少,母亲说24。长得帅吗?挺帅的。收入高吗?中等收入。是公务员吗?母亲说,是的。女孩:好,我去见见。

根据实力构建决策树:

625162e1241a41a9962e69294fc5da04.png

 

问题:图片是二叉树吗?

决策树是标准的二叉树,每个节点只有两个分支~

  • 上面那棵树中,属性:绿色的节点(年龄、长相、收入、是否是公务员)

    • 属性叫做,data,数据,一般使用X表示

    • 跟属性对应,目标值(橘色节点),一般使用y表示

  • 构建这棵树时,先后顺序,每个人,标准不同,树结构不同

  • 计算机,构建树,标准一致的,构建出来的树,一致

决策树算法特点

 

  • 可以处理非线性的问题

  • 可解释性强,没有方程系数𝜃

  • 模型简单,模型预测效率高 if else

 DecisionTreeClassifier使用

e132644dcc0c4f2ba0950813794237b6.png

其中s、m和l分别表示小、中和大。

账号是否真实跟属性:日志密度、好友密度、是否使用真实头像有关系~

 构建决策树并可视化

数据创建

import numpy as np
import pandas as pd
y = np.array(list('NYYYYYNYYN'))
print(y)
X = pd.DataFrame({'日志密度':list('sslmlmmlms'),'好友密度':list('slmmmlsmss'),'真实头像':list('NYYYYNYYYY'),'真实用户':y})
X

模型训练(报错,原因:数据类型是字符串)

from sklearn.tree import DecisionTreeClassifiermodel = DecisionTreeClassifier()model.fit(X,y)

数据修改(map函数,进行数据转换)  

X['日志密度'] = X['日志密度'].map({'s':0,'m':1,'l':2})
X['好友密度'] = X['好友密度'].map({'s':0,'m':1,'l':2})
X['真实头像'] = X['真实头像'].map({'N':0,'Y':1})
X

模型训练可视化

import matplotlib.pyplot as plt
# 使用信息熵,作为分裂标准
model = DecisionTreeClassifier(criterion='entropy')
model.fit(X,y)
plt.rcParams['font.family'] = 'STKaiti'
plt.figure(figsize=(12,16))
fn = X.columns
_ = tree.plot_tree(model,filled = True,feature_names=fn)
plt.savefig('./iris.jpg')

825bf4f5813446439fa185ad0f6863f0.png

数据可视化另一种方式

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
import graphviz
from sklearn import tree
model = DecisionTreeClassifier(criterion='entropy')
model.fit(X,y)
dot_data = tree.export_graphviz(model, out_file=None, feature_names= X.columns,# 特征名class_names=np.unique(y),# 类别名filled=True, # 填充颜色rounded=True) # 圆角
graph = graphviz.Source(dot_data)
graph.render('Account',format='png')

修改中文乱码  

import re
# 打开 dot_data.dot,修改 fontname="支持的中文字体"
f = open('Account', 'r', encoding='utf-8')
with open('./Account2', 'w', encoding="utf-8") as file:file.write(re.sub(r'fontname=helvetica', 'fontname=Fangsong', f.read()))
f.close()
# 从文件中加载,展示
graph = graphviz.Source.from_file('./Account2')
graph.render('Account')

269acbf555ec4b60ac970bb9afd93382.png

信息熵

  • 构建好一颗树,数据变的有顺序了(构建前,一堆数据,杂乱无章;构建一颗,整整齐齐,顺序),用什么度量衡表示,数据是否有顺序:信息熵

  • 物理学,热力学第二定律(熵),描述的是封闭系统的混乱程度

 

e609fa53a888489eb1ce09695b720175.gif

信息熵,和物理学中熵类似的  

54e8ae8ed22f45da89d2190a6bb4aa80.png


 b172b785cee64d089e68783314be4362.png

信息增益

信息增益是知道了某个条件后,事件的不确定性下降的程度。写作 g(X,Y)。它的计算方式为熵减去条件熵,如下

d91eab265fbb4716a8bc62c680a53459.png

表示的是,知道了某个条件后,原来事件不确定性降低的幅度。

 

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 数据结构——树(终极版)
  • 如何通过OceanBase的多级弹性扩缩容能力应对业务洪峰
  • Mac笔记本上查看/user/目录下的文件的几种方法
  • 搭建VUE前端项目流程——Node.js 、Yarn、npm、Vue、Vite、Webpack
  • 一个有趣的“苦无”测试探针笔的设计
  • Go语言开发im-websocket服务和vue3+ts开发类似微信pc即时通讯
  • jenkins入门
  • Java集合(八股)
  • 沉浸式利用自然语言无代码开发工具生成式AI产品应用(上)
  • 嵌入式软件工程师:科技浪潮中的关键角色
  • 使用iperf3测试局域网服务器之间带宽
  • 拖拽排序的实现示例demo
  • 物品识别——基于python语言
  • 人工智能GPT____豆包使用的一些初步探索步骤 体验不一样的工作
  • [NSSRound#4 SWPU]hide_and_seek-用gdb调试
  • Django 博客开发教程 16 - 统计文章阅读量
  • echarts花样作死的坑
  • interface和setter,getter
  • JAVA 学习IO流
  • JAVA之继承和多态
  • Linux快速复制或删除大量小文件
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • ng6--错误信息小结(持续更新)
  • spring + angular 实现导出excel
  • 从tcpdump抓包看TCP/IP协议
  • 大快搜索数据爬虫技术实例安装教学篇
  • 机器学习中为什么要做归一化normalization
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 力扣(LeetCode)965
  • 前端js -- this指向总结。
  • 世界上最简单的无等待算法(getAndIncrement)
  • 首页查询功能的一次实现过程
  • 小程序 setData 学问多
  • 译自由幺半群
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #etcd#安装时出错
  • #NOIP 2014#Day.2 T3 解方程
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (31)对象的克隆
  • (void) (_x == _y)的作用
  • (二)测试工具
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (四)stm32之通信协议
  • (四)图像的%2线性拉伸
  • (转)Linq学习笔记
  • ./configure,make,make install的作用(转)
  • .net 生成二级域名
  • .NET开源快速、强大、免费的电子表格组件
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • @html.ActionLink的几种参数格式
  • @软考考生,这份软考高分攻略你须知道