机器学习3----决策树

这是前期准备

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#ID3算法
#每个特征的信息熵
# target : 账号是否真实,共2种情况
#    yes  7个   p=0.7
#    no   3个   p=0.3
info_D=-(0.7*np.log2(0.7)+0.3*np.log2(0.3))
info_D
#日志密度L
# 日志密度 3种结果
#   s   3个  0.3   1yes,2no
#   m   4个  0.4   3yes,1no
#   l   3个  0.3   3yes,0no
info_L_D = 0.3 * ( - ( (1/3) * np.log2(1/3)  + (2/3) * np.log2(2/3) ) ) \+ 0.4 * ( - ( (3/4) * np.log2(3/4)  + (1/4) * np.log2(1/4) ) ) # + 0.3 * ( - ( (3/3) * np.log2(3/3)  + (0/3) * np.log2(0/3) ) ) info_L_D
#而信息增益即为两者的差值
gain_L = info_D - info_L_D
gain_L
# 好友密度 3种结果
#   s   4个  0.4   1yes,3no
#   m   4个  0.4   4yes,0no
#   l   2个  0.2   2yes,0noinfo_F_D = 0.4 * ( - ( (1/4) * np.log2(1/4)  + (3/4) * np.log2(3/4) ) ) info_F_D
gain_F = info_D - info_F_D
gain_F
# 是否使用真实头像 2种结果
#   yes   5个  0.5   4yes,1no
#   no    5个  0.5   3yes,2noinfo_H_D = 0.5 * ( - ( (4/5) * np.log2(4/5)  + (1/5) * np.log2(1/5) ) )  \+ 0.5 * ( - ( (3/5) * np.log2(3/5)  + (2/5) * np.log2(2/5) ) ) info_H_D
gain_H = info_D - info_H_D
gain_H
# ID3算法
#   信息增益: gain_F > gain_L > gain_H
#                0.55 > 0.28   > 0.03# 优先分裂:好友密度
# 如果有类似ID的特征(每一个值都不一样)
#    ID有10种结果
#       1     有1个   0.1    1yes或1no
#       2     有1个   0.1    1yes或1no
#       3     有1个   0.1    1yes或1no
#       4     有1个   0.1    1yes或1no
#       5     有1个   0.1    1yes或1no
#       6     有1个   0.1    1yes或1no
#       7     有1个   0.1    1yes或1no
#       8     有1个   0.1    1yes或1no
#       9     有1个   0.1    1yes或1no
#      10     有1个   0.1    1yes或1no# info_ID_D = 0.1 * ( - ( (0/1) * np.log2(0/1)  + (1/1) * np.log2(1/1) ) )   * 10
info_ID_D  = 0# ID的信息增益
gain_ID = info_D - info_ID_D
gain_ID
### C4.5算法
# 解决的主要问题是: ID3算法中出现的ID属性的问题
# 单独计算每个特征的信息熵
# 信息增益率  
#  信息增益率 = 信息增益 / 每个特征单独的信息熵# 日志密度L
#   s   3个  0.3   
#   m   4个  0.4   
#   l   3个  0.3  info_L = - ( 0.3 * np.log2(0.3)  + 0.4 * np.log2(0.4) + 0.3 * np.log2(0.3) )
info_Lgain_L / info_L
# 好友密度F
#   s   4个  0.4 
#   m   4个  0.4   
#   l   2个  0.2  info_F = - ( 0.4 * np.log2(0.4)  + 0.4 * np.log2(0.4) + 0.2 * np.log2(0.2) )
info_Fgain_F / info_F
# 是否使用真实头像H
#   yes   5个  0.5
#   no    5个  0.5   info_H = - ( 0.5 * np.log2(0.5)  + 0.5 * np.log2(0.5)  )
info_Hgain_H / info_H
# ID
#   1    1个  0.1
#   2    1个  0.1   
#   ... 
#  10    1个  0.1   info_ID = - ( 0.1 * np.log2(0.1)  * 10 )
info_IDgain_ID / info_ID
#  好友密度最大 0.36  ###  CART算法
#gini_D = 1 - sum( p(x)**2 )
#gini : 基尼, 基尼系数,作用类似信息熵
%timeit np.log2(1000000)
%timeit 1000000**2 
# target : 账号是否真实,共2种情况
#    yes  7个   p=0.7
#    no   3个   p=0.3gini_D = 1 - ( 0.7**2 + 0.3**2 )
gini_D
# 日志密度 3种结果
#   s   3个  0.3   1yes,2no
#   m   4个  0.4   3yes,1no
#   l   3个  0.3   3yes,0nogini_L_D = 0.3 * ( 1 - ((1/3)**2 + (2/3)**2)) \+ 0.4 * ( 1 - ((1/4)**2 + (3/4)**2)) \+ 0.3 * ( 1 - ((3/3)**2 + (0/3)**2))gini_L_D
gini_D - gini_L_D
# 好友密度 3种结果
#   s   4个  0.4   1yes,3no
#   m   4个  0.4   4yes,0no
#   l   2个  0.2   2yes,0nogini_F_D = 0.4 * ( 1 - ((1/4)**2 + (3/4)**2) ) gini_F_D
gini_D - gini_F_D
# 是否使用真实头像 2种结果
#   yes   5个  0.5   4yes,1no
#   no    5个  0.5   3yes,2nogini_H_D = 0.5 * ( 1 - ( (4/5) **2  + (1/5) **2 ) )  \+ 0.5 * ( 1 - ( (3/5) **2  + (2/5) **2 ) ) gini_H_D
gini_D - gini_H_D
#决策树代码
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
data, target = load_iris(return_X_y=True)
data.shape, target.shape
#criterion='gini', gini系数, 默认使用CART算法,一般使用默认值
#- splitter='best',  分割方式, 默认是best,最好的分割方式
#- max_depth=None,   树的最大深度,数据量少的情况下不设置,默认没有限制深度,
#    -  数据量大的情况下需要设置,防止过拟合
#- min_samples_split=2, 最小分裂的样本数,数据量少的情况下不设置,默认是2
#    -  数据量大的话,可以增加该值
#- min_samples_leaf=1,  叶子节点所需要的最少样本数,
#   -  如果叶子节点上的样本数小于该值,则会被剪枝(兄弟节点一般也会被剪枝)
#    -  数据量不大的情况下,一般不设置,
#   -   如果数据量比较大(上万)的时候考虑增加该值
tree=DecisionTreeClassifier(max_depth=2)
tree=DecesionTreeClassifier(min_samples_split=4,min_samples_leas=4)
tree.fit(data).score(data,target)

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/683129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法学习——LeetCode力扣回溯篇4

算法学习——LeetCode力扣回溯篇4 332. 重新安排行程 332. 重新安排行程 - 力扣(LeetCode) 描述 给你一份航线列表 tickets ,其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票…

Vulnhub靶机:DC4

一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.15) 靶机:DC4(10.0.2.57) 目标:获取靶机root权限和flag 靶机下载地址:https://www.vulnhub.com/entry/dc-4,313/…

Midjourney绘图欣赏系列(一)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子,它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同,Midjourney 是自筹资金且闭源的,因此确切了解其幕后内容尚不…

【从Python基础到深度学习】7. 使用scp命令实现主机间通讯

一、生成 SSH 密钥对 ssh-keygen 是一个用于生成 SSH 密钥对的命令行工具,用于身份验证和加密通信 ssh-keygen 二、将本地主机上的 SSH 公钥添加到远程主机 ssh-copy-id 命令用于将本地主机上的 SSH 公钥添加到远程主机上的 authorized_keys 文件中,…

【初学者必看】迈入Midjourney的艺术世界:轻松掌握Midjourney的注册与订阅!

文章目录 前言一、Midjourney是什么二、Midjourney注册三、新建自己的服务器四、开通订阅 前言 AI绘画即指人工智能绘画,是一种计算机生成绘画的方式。是AIGC应用领域内的一大分支。 AI绘画主要分为两个部分,一个是对图像的分析与判断,即…

QlikSense财务聚合函数:IRR/NPV/XIRR/XNPV

IRR - 脚本函数 IRR() 函数用于返回聚合内部回报率,以揭示迭代于 group by 子句定义的大量记录上的表达式的数值表示的现金流系列。 这些现金流不必是均值,因为它们可用于年金。但是,现金流必须定期出现,例如每月或每年。内部收…

《合成孔径雷达成像算法与实现》Figure6.12

clc clear close all参数设置 距离向参数设置 R_eta_c 20e3; % 景中心斜距 Tr 2.5e-6; % 发射脉冲时宽 Kr 20e12; % 距离向调频率 alpha_os_r 1.7; % 距离过采样率 Nrg 320; % 距离线采样数 距离向…

【头歌·计组·自己动手画CPU】三、存储系统设计(HUST)(理论版) 【计算机硬件系统设计】

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux 😘欢迎 ❤️关注 👍点赞 🙌收藏 ✍️留言 文章目录 一、课程设计目的二、课程设计内容三、课程设计步骤四、课程设计总结 一、课程设计目的 理解计算机…

猫头虎分享:2024年值得程序员关注的技术发展动向分析

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

HarmonyOS鸿蒙学习基础篇 - Column/Row 组件

前言 Row和Column组件是线性布局容器,用于按照垂直或水平方向排列子组件。Row表示沿水平方向布局的容器,而Column表示沿垂直方向布局的容器。这些容器具有许多属性和方法,可以方便地管理子组件的位置、大小、间距和对齐方式。例如&#xff0c…

从C向C++7——继承

一.继承 1.理解继承 C中的继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承类似,例如儿子继承父亲的财产。 继承可以理解为一个类从另一个类获取成员变量和成员函数的过程。例如类 B 继承于类 A,那么 B 就…

Codeforces Round 924(Div.2) A~E

A.Rectangle Cutting (模拟) 题意: 给出一个长方形,通过平行于原始矩形的一条边进行切割,将该矩形切割成两个边长为整数的矩形。询问是否能通过旋转和移动这两个矩形,得到新的矩形。 分析: 可以发现拼成的新长方形…

Python算法探索:从经典到现代(三)

一、引言 随着信息技术的飞速发展,数据已经成为现代社会不可或缺的资源。Python,作为数据处理和分析的利器,为我们提供了大量强大的库和工具,用于从经典到现代的各种算法探索。本文将带你领略Python在算法领域的魅力,从…

COW AI接入到微信 保姆教程 (部署在服务器,插件安装)

此文章不涉及国外的AI模型,也无需翻墙,跟某AI模型无关,审核大哥别弄错了 最近的AI开始越开越火了,开始介入到我们生活中的方方面面。就有人好奇AI是否能接入到微信吗?我在GitHub上搜索的时候还真有除了对话外还可以通…

MySQL 基础知识(五)之数据增删改

目录 1 插入数据 2 删除数据 3 更改数据 创建 goods 表 drop table if exists goods; create table goods ( id int(10) primary key auto_increment, name varchar(14) unique, stockdate date )charsetutf8; 1 插入数据 当要插入的数据为日期/时间类型时,如果…

Spring Boot 笔记 021 项目部署

1.1 引入坐标,并双击package打包成jar包 1.2 在服务器上运行jar包 1.3 使用postman测试 2.1 运行配置 2.1.1 命令更改端口 java -jar big-event-1.0-SNAPSHOT.jar --server.port7777 2.1.2 环境变量更新(略) 2.1.3 外部配置文件&#xff0c…

日期类运算符重载以及const成员详细解析

个人主页:点我进入主页 专栏分类:C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 算法 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂 目录 一.前言 二.运算符重载 2.1概念 2.2比较的符号重载 2.2.1…

ZBX_NOTSUPPORTED: Unsupported item key. 原因排查

进行自定义监控项时,在zabbix-agent端测试没问题,却在zabbix-server进行测试时,出现 ZBX_NOTSUPPORTED: Unsupported item key. 1.在zabbix-agent测试没问题,证明自定义监控项的脚本没问题,却在zabbix-server端测试出…

点击侧边栏菜单时只切换 <router-view> 中的内容,而不是进行整个页面的路由跳转(动态路由)

解决方法&#xff1a;在 <el-menu> 的 select 事件中调用了 handleMenuSelect 方法来处理菜单项的选择。你可以在 handleMenuSelect 方法中根据菜单项的 index 来执行相应的操作&#xff0c;例如更新组件内的数据或者切换组件。由于整个页面的路由路径并没有改变&#xf…

平时积累的FPGA知识点(7)

平时在FPGA群聊等积累的FPGA知识点&#xff0c;第七期&#xff1a; 11 描述扇出的xilinx官方文档是&#xff1f; 解释&#xff1a;ug949 12 在BD中如何指定某个IP用global&#xff0c;其他的用OOC模式&#xff1f;因为某个模块引用的IP带着XPM&#xff0c;综合不了 解释&am…