【人工智能Ⅰ】7-KNN 决策树

【人工智能Ⅰ】7-KNN & 决策树

7-1 KNN(K near neighbour)

思想:一个样本与数据集中的k个样本最相似,若这k个样本大多数属于某类别,则该个样本也属于这类别

距离度量

样本相似性用欧氏距离定义
L p ( x i , x j ) = ( Σ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ p ) 1 / p L_p(x_i,x_j)=(Σ_{l=1}^{n}|x_i^{(l)}-x_j^{(l)}|^p)^{1/p} Lp(xi,xj)=(Σl=1nxi(l)xj(l)p)1/p

流程

1:计算已知类别数据集中的点与当前点之间的距离

2:按递增排序距离

3:选取与当前点距离最小的k个点

4:统计k个点的类别及其频率

5:返回频率最高的类别,作为当前点的预测分类

优点

1:简单有效

2:适用大样本自动分类

缺点

1:类别分类不标准化

2:不均衡性

3:计算量较大

k值选择

1:误差

  • 近似误差:对现有训练集的训练误差(过小说明过拟合
  • 估计误差:对测试集的测试误差(过小说明对未知数据的预测能力好

2:k值

  • 过小:近似误差小,估计误差大
  • 过大:估计误差小,近似误差大
  • k值一般取一个较小的数,采用【交叉验证法】择优

3:交叉验证法

将数据集划分为N个大小相似的互斥子集,并且尽量保证每个子集数据分布的一致性

这样可获取N组训练 - 测试集,从而进行N次训练和测试。

7-2 决策树(Decision tree)

根据特征解决数据分类问题

  • 每个节点选择一个特征提出问题,通过判断将数据分为2类,再继续提问
  • 问题是在已知各种情况发生概率基础上,构成决策树,求取值大于等于0的概率
  • 再投入新数据时,根据树上的问题,将数据划分到合适叶子上
  • 事先确定每个样本的属性和类别,节点表示属性测试,分支表示测试输出,叶子节点表示类别

数据

1:训练数据(构造决策树,即决策机制)

2:测试数据(验证决策树的错误率)

构造树的依据

1:信息熵

表示信息的复杂程度
H = − ∑ i = 1 n p i ∗ l o g 2 ( p i ) H=-∑_{i=1}^np_i*log_2(pi) H=i=1npilog2(pi)
2:信息增益

划分数据集前后,信息熵的差值

决策树过程

1:选择根节点

计算决策的信息熵H,和每个属性的信息熵

信息增益是【H - 选定属性的信息熵】

选取信息增益最大的属性作为根节点

2:选择新的节点

3:构建完整树

4:剪枝

减少树的高度,避免过拟合

(1)预剪枝干:设定一个树高度,当构建树达到高度时停止

(2)后剪枝:任由决策树构建完成,从底部开始判断哪些枝干应该剪掉

预剪枝更快,后剪枝更精确

决策树总结

1: 一棵决策树包含一个根节点、若干个内部结点和若干个叶结点

2:在决策过程中提出的每个判定问题都是对某个属性的“测试”(节点)

3:每个测试的结果或导出最终结论,或导出进一步的判定问题

4:根节点包含了样本全集,其中叶节点对应于决策结果(是或否),其他每个结点对应于一个属性测试

5:从根节点到每个叶节点的路径对应一个判定测试序列

决策树叶子节点的生成

递归过程

导致递归返回的情况:

1:当前节点包含的样本全属于同一类别,无需划分

2:当前属性为空或所有样本在所有属性上取值相同,无需划分。把当前节点标记为叶节点,并将其类别设定为该节点所含样本最多的类别

3:当前节点包含的样本集为空,不能划分,同样把当前节点标记为叶节点

决策树学习的生成算法

根据不同的目标函数,算法分为ID3、C4.5、CART

建立决策树的关键,即在当前状态下选择哪个属性作为分类依据

算法类别ID3C4.5CART
划分标准信息增益信息增益率基尼指数(最小)

决策树优缺点

优点

1:易于理解和实现,需要的背景知识少,直接体现数据特点

2:数据准备简单或不必要,可同时处理数据型和常规型属性

3:易于通过静态测试对模型评测(可信度)、逻辑表达式

缺点

1:对连续性的字段比较难预测

2:对有时间顺序的数据,需要预处理

3:若类别过多,错误增加快

7-3 集成学习

通过建立几个模型组合,解决单一预测问题

工作原理:生成多个分类器

集成学习方法分类

1:基于boosting(提升)

Adaboost
梯度提升决策树(GBDT)
XGBoost(extreme gradient boosting)
LightGBM

基本思想:

(1)每个样本均赋予一个权重

(2)T次迭代,每次迭代后对分类错误的样本加大权重,下次迭代更加关注分类错误的样本

特点:

前面的学习器改变后面学习器的权重,学习器采用串联方式连接

采用线性加权方式进行组合,每个基学习器都有相应的权重,对于错误率小的基学习器会有更大的权重

2:基于bagging(装袋)

随机森林(Random Forest)
极端随机树(Extremely randomized trees,Extra-Trees)

基本思想:

对原始训练样本集采用自助随机采样,即有放回的随机采样,产生n个新的训练样本子集,以此分别训练n个基学习器,最后采用某种组合策略集成为强学习器

特点:

对于分类问题,通常使用简单投票法;对于回归问题,通常使用简单平均法

Adaboost

1: 初始化训练样本的权重分布,每个样本具有相同权重

2:训练一个弱分类器,如果样本分类正确,则在构造下一个训练集中,它的权重就会被降低;反之,提高样本的权重

3:用更新过的样本集去训练下一个弱分类器

4:各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,降低分类误差率大的弱分类器的权重

5: 将所有弱分类组合成强分类器

随机森林

随机:随机选取训练样本集、随机选取分裂属性集

森林:多棵决策树

过程:决策树的生长和投票

(依靠决策树的投票选择,决定最后的分类结果)

每棵树的生成

1:有放回的采样N个样本,构成训练集

2:无放回的随机选择m个特征,计算其信息增益并择优(通常 m = sqrt(M))

3:使用一般决策树的构建方法,得到一棵分类或预测的决策树

4:重复1-3步,得到H棵决策树,将某个测试样本输入H棵树得到H个结果,使用投票机制或最终分类结果判别测试样本所属的类别

随机森林的生成

分类效果(错误率)的相关因素:

1:森林中任意2棵树的相关性

相关性越大,错误率越大

2:森林中每棵树的分类能力

每棵树的分类能力越强,整个森林的错误率越低

随机森林唯一的参数:特征选择个数m

减少m,树的相关性和分类能力会降低

袋外错误率OOB error

最优m的选择,主要依据计算袋外错误率

第k棵树的袋外样本数据:没有参与第k棵树生成的训练实例

袋外错误率:对每棵树用未被选中的训练样本点,统计每棵树的误分率,最后取平均值得到随机森林的袋外错误率

随机森林特点

优点:

1-两个随机性的引入,不容易陷入过拟合,具有很好的抗噪声能力

2-对数据集适应能力强,可处理连续型和离散型数据,数据无需规范化,可运行大数据集

3-不需要降维,可处理高维特征的输入样本

4-在生成过程中,可获得内部生成误差的无偏估计

5-可处理缺省值问题

缺点:

1-噪声较大,可能过拟合

2-对有不同级别属性的数据,级别划分较多的属性会对随机森林产生更大的影响,随机森林在这类数据上产出的属性权值不可信

投票机制

1:简单投票机制

假设每个分类器平等

一票否决
少数服从多数
有效多数
阈值表决

2:贝叶斯投票机制

基于每个基本分类器在过去的分类表现,设定一个权值,按照这个权值进行投票

7-4 机器学习概念回顾

有监督学习:分类,回归

无监督学习:聚类,降维

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

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

相关文章

kicad源代码研究:symbol properties窗口中为SCH_SYMBOL添加或删除一个sch_field

向grid中添加一个sch_field FIELDS_GRID_TABLE<SCH_FIELD>* m_fields; WX_GRID* m_fieldsGrid; simEnableFieldRow (int) m_fields->size(); m_fields->emplace_back( VECTOR2I( 0, 0 ), simEnableFieldRow, m_symbol, SIM_ENABLE_FIELD ); // notify the grid w…

前端 vue 面试题 (一)

文章目录 v-if,v-show差别v-for和v-if虚拟dom解决什么问题vue的data为什么返回函数不返回对象比较vue&#xff0c;reactvue双向绑定原理vue虚拟dom 的diff算法vue 虚拟dom的diff算法的时间复杂度vue2与vue3的区别vue数据缓存&#xff0c;避免重复计算单页应用怎么跨页面传参vue…

在MySQL上实现间隔5分钟汇总取数及相关字符串、时间处理方法实践

1. 实践案例需求描述 查询mysql数据库&#xff0c;按每5分钟分组获取3个小时内的电量数据&#xff0c;参考SQL语句如下。 select sd.RecordTime RecordTime, sd.sddl sddl,sd.pvdl ,cap.capdl capdl from ((SELECT CONCAT(DATE_FORMAT(RecordTime,%Y-%m-%d %H:), LPAD(floor(…

Ubuntu20.04 通过nmcli命令查看网卡状态为unmanaged

问题描述&#xff1a; 通过下述指令查看网卡状态为 "unmanaged" nmcli dev status 解决方法&#xff1a; cd /usr/lib/NetworkManager/conf.d/ sudo mv 10-globally-managed-devices.conf 10-globally-managed-devices.conf.bak sudo cp 10-globally-managed-devic…

Java 设计模式——中介者模式

目录 1.概述2.结构3.案例实现3.1.抽象中介类3.2.抽象同事类3.3.具体同事类3.4.具体中介类3.5.测试 4.优缺点5.使用场景 1.概述 &#xff08;1&#xff09;一般来说&#xff0c;同事类之间的关系是比较复杂的&#xff0c;多个同事类之间互相关联时&#xff0c;他们之间的关系会…

Python爬取股票交易数据代码示例及可视化展示。

文章目录 前言一、开发环境二、第三方模块三、爬虫案例步骤四、爬虫程序全部代码1.分析网页2.导入模块3.请求数据4.解析数据5.翻页6.保存数据 五、实现效果六、数据可视化全部代码1.导入数据2.读取数据3.可视化图表4.效果展示关于Python技术储备一、Python所有方向的学习路线二…

Windows本地配置带GPU的Pytorch环境

首先需要安装并配置好Anaconda环境&#xff0c;安装教程教程随便找一个就好。 第一步&#xff1a;安装好之后创建conda虚拟环境&#xff1a; conda create -n your_env_name pythonx.x 第二步&#xff1a;安装需要版本的pytorch&#xff1a;pytorch下载链接 cu100/torch-1.2…

VUE基础的一些总结

首先推荐观看VUE官方文档 目录 创建一个 Vue 应用 要创建一个 Vue 应用&#xff0c;你需要按照以下步骤操作&#xff1a; 步骤 1&#xff1a;安装 Node.js 和 npm 确保你的计算机上已经安装了 Node.js。你可以在 Node.js 官网 上下载并安装它。安装完成后&#xff0c;npm&…

算法之Eigen库

Eigen库是用于线性代数运算的C++模板库,提供了矩阵、向量、数值求解器等线性代数相关算法的实现。以下是Eigen库的一些基本用法示例: 1. 安装Eigen库 首先,你需要下载并安装Eigen库。你可以从Eigen的官方网站上获取最新版本:Eigen官方网站 2. 定义矩阵和向量: #includ…

sqlalchemy查询数据为空,查询范围对应的数据在数据库真实存在

记录一个开发过程遇到的小bug&#xff0c;构造些伪数据还原并解释。 """ 场景&#xff1a;传参触发了查询条件&#xff0c;数据库中是存在传参对应范围的数据&#xff0c;但是通过查询条件得到的查询结果为空 """ 入参场景一&#xff1a; start_…

修复img实际有正确的链接,但是不显示 (chrome 插件保存的html)--google镜像chatgpt

打开目标html文件 chrome 控制台 执行以下脚本 //删除侧边栏 $x("//div[idsidebar]")[0].remove();//修复img实际有正确的链接&#xff0c;但是不显示 (chrome 插件保存的html&#xff09; //img.data-savepage-src 复制到 img.src imgs$x("//img"); imgs…

小黑完成了最后一节健身课,顺利完成了跳绳比赛,乘飞机到达南京准备第二天领物资和南京城内闲逛的leetcode之旅:215. 数组中的第K个最大元素

小黑代码 class Solution:def findKthLargest(self, nums: List[int], k: int) -> int:# 数组长度n len(nums)nums list(map(lambda x:-x, nums))q []for i in range(n):heapq.heappush(q, nums[i])# 出堆target -1for i in range(k):target heapq.heappop(q)return -…

Java Web——TomcatWeb服务器

目录 1. 服务器概述 1.1. 服务器硬件 1.2. 服务器软件 2. Web服务器 2.1. Tomcat服务器 2.2. 简单的Web服务器使用 1. 服务器概述 服务器指的是网络环境下为客户机提供某种服务的专用计算机&#xff0c;服务器安装有网络操作系统和各种服务器的应用系统服务器的具有高速…

《向量数据库指南》——2023云栖大会现场,向量数据库Milvus Cloud成关注焦点

近期,广受关注的2023 云栖大会正式收官,来自全球各地的开发者集聚一堂,共同探索 AI 时代的更多可能性。 云栖大会是由阿里巴巴集团主办的科技盛宴,是中国最早的开发者创新展示平台。据悉,今年云栖大会的主题为“计算,为了无法计算的价值”,共吸引了全球 44 个国家和地区…

Qt DragDrop拖动与放置

本文章从属于 Qt实验室-CSDN博客系列 拖放操作包括两个动作&#xff1a;拖动(drag)和放下(drop或称为放置)。 拖动允许 对于要拖出的窗口或控件&#xff0c;要setDragEnabled(true) 对于要拖入的窗口或控件&#xff0c;要setAcceptDrops(true) 下面以一个具体的用例进行说…

Neo4j数据库介绍及简单使用

图数据库介绍 图数据库是一种专门设计用于存储和管理图形数据的数据库类型。在图数据库中&#xff0c;数据以图的形式表示&#xff0c;其中节点表示实体&#xff0c;边表示实体之间的关系。这种表示方式非常适合处理具有复杂关系的数据&#xff0c;如社交网络、推荐系统、网络…

vuekeyclock 集成

前端集成keycloak鉴权的主要写法&#xff0c; 在main.js里面写 import VueKeycloakJs from dsb-norge/vue-keycloak-js import { KeycloakInstance } from "keycloak-js";// 回调地址 const pageIndex process.env.NODE_ENV production ? http://xxxx/#/ : http:…

2023数据结构期中测验-2023秋-计算机+未来网络专业

数据结构期中测验 选择题函数题6-1 求链式表的表长6-2 逆序数据建立链表6-3 删除单链表偶数节点6-4 求二叉树高度6-5 先序输出叶结点 为了防止不自觉的朝答案看去&#xff0c;特意用了浅色字体 选择题 2-1 下述程序段的时间复杂度为&#xff08; &#xff09; for&#xff0…

LightDB23.4 支持双引号+字段名大写兼容oracle数据库

背景介绍 由于Oracle数据库默认是将列名以大写的形式存储的&#xff0c;LightDB数据库默认以小写的形式存储列名&#xff0c;为了兼容Oracle数据库的SQL语句&#xff0c;LightDB23.4版本支持双引号字段名大写来操作以小写形式存储的列名。这个功能仅在Oracle兼容模式下生效&am…

Edge最新版本,关闭侧边栏,不需命令,更改设置就可

边栏展示 说明&#xff1a;Edge自动更新版本后&#xff08;版本 119.0.2151.58&#xff09;&#xff0c;出现了侧边栏&#xff0c;看着很不舒服&#xff0c;效果如上图 修改&#xff1a; 1、在设置找到侧栏 2、点击Copilot后&#xff0c;展示的页面中会有始终显示边栏这一开…