机器学习与数据挖掘知识点总结(二)之常用的分类算法

news2024/12/25 23:38:17

目录

1、什么是数据挖掘

2、为什么要有数据挖掘

3、数据挖掘用在分类任务中的算法

朴素贝叶斯算法

svm支持向量机算法

PCA主成分分析算法

k-means算法

决策树


1、什么是数据挖掘

数据挖掘是从大量数据中发现隐藏在其中的模式、关系和规律的过程。它利用统计学、机器学习和数据库技术等工具和方法来分析大规模数据集,以发现其中的信息,并将其转化为可用的知识或决策支持。数据挖掘常用于预测、分类、聚类和关联规则发现等任务。

2、为什么要有数据挖掘

数据挖掘的出现是为了解决大规模数据中存在的隐含信息和规律,并将其转化为可用的知识或决策支持。

3、数据挖掘用在分类任务中的算法

  • 朴素贝叶斯算法

朴素贝叶斯是一组基于贝叶斯定理的监督学习算法, 

先验概率:基于统计规律,基于以往的历史经验和分析得到的结果,不依赖于当前发生的条件。

后验概率:由条件概率推理而来,由因推果,是计算在发生某事之后的概率,依赖于当前发生的条件。

条件概率:记事件A发生的概率为P(A),事件B发生的概率为P(B),则在事件B发生的条件下事件A发生的概率为P(A|B),

P(A|B)=\frac{P(AB)}{P(B)}

贝叶斯公式就是基于条件概率,通过P(B|A)求解P(A|B) ,如下:

P(A|B)=\frac{P(AB)}{P(B)}=\frac{P(B|A)\cdot P(A)}{P(B)}

 由联合公式可以推导如下,

P(A,B)=P(A|B)\cdot P(B)=P(B|A)\cdot P(A) 

P(A)和P(B)分别为先验概率,P(A|B)和P(B|A)分别为后验概率,P(A,B)则称为联合概率。  

全概率公式:表示若事件{A_1},{A_2}, \cdots ,{A_n}构成一个完备事件组且都有正概率,则对任意一个事件B都有公式成立,故有:P(B)=\sum_{i=1}^{n}P(B|A_{i})\cdot P(A_{i})

机器学习的最终目标就是回归或者是分类,都可以看为是预测,分类则是预测属于某一类的概率是多大,因此可以把上述贝叶斯表达式中的A看成是属于某类的规律,把B看成是具有某种特征的现象,那么贝叶斯公式又可以表示为:

P(规律|现象)=\frac{P(现象|规律)\cdot P(规律)}{P(现象)}

 朴素贝叶斯算法的原理:

特征条件假设:若假设各个特征之间没有联系,给定训练数据集后,每个样本都是n维特征,x=(x_{1},x_{2},...,x_{n}),类别标记中有m种类别,y=(y_{1},y_{1},...,x_{m})

朴素贝叶斯算法对条件概率分布做出了独立性的假设,即个人维度上的特征x_{1},x_{2},...,x_{n}相互独立,那么在此假设前提下,条件概率可转化为:

P(x|y_{m})=P(x_{1},x_{2},...,x_{n}|y_{m})=\prod_{i=1}^{n}P(x_{i}|y_{m})

朴素贝叶斯算法是一组基于贝叶斯定理的监督学习算法,朴素贝叶斯算法通过预测指定样本属于特定类别的概率P(y_{i}|x)来预测该样本的所属类别,即:

P(y_{i}|x)可以写为, 

 其中,x=(x_{1},x_{2},...,x_{n})对应为样本的特征向量,p(x)为样本的先验概率,对于特定样本x和任意类别yi,P(x)的取值均相同,并不会影响P(yi|x)取值的相对大小,因此在计算中可以被忽略(求解P(yi|x)就相当于求解P(x|yi)P(yi))。“朴素”特别之处就在于假设了特征x_{1},x_{2},...,x_{n}相互独立,由此可以得到:

 上述等式的右边即为连乘,将等式右边的概率称为判定函数。它的结果值不仅仅是代表概率,代表着判定值,P(x_{1}|y_{i}),P(x_{2}|y_{i}),...,P(x_{n}|y_{i}),以及P(y_{i})均可以通过训练样本统计得到,最后的目标函数如下,

但是由于概率值为[0,1]的数,作连乘运算时,容易让最后的结果越来越趋近于0(数据下溢),故对其取log是一个常用的手段,并根据log(xy)=log(x)+log(y)将其转换为相加的形式,

 这样仅能预测出最后对应的最大的判定值,将上式中的max更改为argmax即可求出最大判定值所对应的类别。

argmax[\sum_{x\epsilon y_{i}}log(P(y_{i}))+\sum_{x\epsilon y_{i}}\sum_{j=1}^{n}log(P(x_{j}|y_{j}))]

 总结一下,朴素贝叶斯算法进行预测的过程,

输入:样本
输出:所属的类别
  • svm支持向量机算法

支持向量机(Support Vector Machine,SVM)本身是一个二分类算法,是对感知器算法模型的一种扩展,现在的SVM算法支持线性分类和非线性分类的应用,并且也能通过将SVM应用于回归应用中,在不考虑集成学习算法,不考虑特定数据集时,分类算法SVM是非常优秀的。

支持向量:离分割超平面最近的那些点。

间隔:数据点到分割超平面的间距。

首先介绍一下感知器模型,感知器的思想就是在数据是线性可分(能找到一个平面将两组数据给分开)的前提下任意空间中,感知器需要寻找一个超平面,能够把所有的二分类别分割开。

感知器模型如下,目标是找到一个\theta x为0的超平面,然后分别根据神经元的加权求和的结果判断,大于0的为一个类别,小于0的为一个类别,因此,期望分类错误的样本离超平面的距离之和最小,从而让分类错误的样本更快地朝着正确的方向进行更新,从而让训练成功

 然后就是SVM算法,为什么感知器算法缺陷呢,下图中两条直线分别为感知器算法的超平面,它比较关注的是让所有的点离超平面尽可能的远,但实际上离超平面足够远的点基本都是被正确分类的,所以这个是没有意义的,反而应该关注那些离超平面很近的点,这些点才容易出错。如果测试时来了一个新的数据点(样本),并位于这两条蓝色直线之间,那么就不能很好的处理这个新的数据,由此引入了SVM支持向量机算法。

也就是说,如下图所示,希望 找到一个最好的w和b固定一个超平面,使得这个超平面在能够完美的区分正负例(分类)的基础上,找到距离最近的点间隔最大。(后面的证明过程先不叙述,涉及到拉格朗日优化目标函数过程)

 

  • PCA主成分分析算法

PCA是一种线性降维方法,他的思想主要是依靠将数据从高维空间映射到低维空间,同时在低维空间里的数据的方差被最大化。

图1

算法步骤:

  • 建立数据的协方差矩阵
  • 计算矩阵的多个特征向量
  • 对应有最大几个特征值的特征向量被应用于重新建立数据,这样就会使新建的数据包含有大量原本数据的方差(信息量)。

主要包含最大投影方差和最小投影距离两种方法证明PCA的有效性,下面用最大投影方差的方法证明一下。

最大投影方差(证明)

数据的离散性越大,代表数据在所投影的维度具有更高的区分度,这个区分度(方差)就是信息量,我们希望降维之后还能更多的保留原来的信息量,而且降维后不同维度的相关性为0,这样即使是去掉某些相对不重要的维度也不会干扰到剩余的维度信息。

图2

如图2所示,使用PCA主成分分析,并不会改变原始数据的分布,只是换个角度解决问题,本质上相当于是重新定义坐标系,找到一个更好的角度去审视数据。如图2,举个例子,对于同一数据分布,原坐标系横轴纵轴比例为(5:5)1:1,采用等长的横纵坐标,但经过重新找定坐标系(图2中紫色),新的坐标系横纵轴比例可能为7:3,那这样的话,采用主成分分析PCA,选取占比70%这条轴线进行降维,这就可以在降维的同时保留较大的信息量。

图3

 既然希望用样本点投影的方式希望投影之后的数据点会有更大的方差,那么不妨把投影之后的数值表达出来,如图3中的一个数据点A(x1,y1),将原点O与其的连线构成的向量A投影到向量B所在的方向上,得:

 那既然这样的话,单位向量不也能表示方向吗,让B为单位向量,\therefore|B|=1,可由上式推出,

 投影之后的新坐标系,每个轴用单位向量表示,新坐标系W=(w_{1},w_{2},...,w_{p})设置为标准正交基;即既保证了每个主成分向量wi的模为1,即||w_{i}||^{2}=1,又保证了各个主成分之间互不干扰(不叠加、不覆盖),w_{i}^{T}\cdot w _{j}=0

对于任意一个点xi投影到某个坐标轴w上,则投影后的值为x_{i}^{T} w

由上面的方差公式可以推出,

其中,mean表示投影后的均值。

 又因为PCA会对未投影前的原始数据进行标准归一化操作:

  • 均值归一化/中心化:经过如下证明得投影后的mean也为0.

  • 方差归一化:即为无量纲化,归一到某范围内,这样在投影之后方差不会受到某些维度的主导。

故将mean=0带入计算方差的式子中得,

 注意,在前面x_{i}^{T}w是两个向量的内积运算,在上述式子中,xi被看成为一个列向量,因此x_{i}x_{i}^{T}((m*n)*(n*m)=m*m),接着把上面的每个样本点运算求和转换为原始数据X(shape:d*n,d指原始数据维度,n代表原始数据的样本数),得

接着代入协方差(用来衡量两个随机变量之间关系的统计量,通过计算变量之间的协方差矩阵,可以找到数据中最具代表性和最重要的方向(主成分))公式中得,

 若将协方差矩阵用符号\sum_{}^{}表示,则优化目标最大化投影后方差等价于,

 然后按照L(x,\lambda )=f(x)+\lambda *g(x)构建拉格朗日函数,g(x)为约束条件,引入拉格朗日乘子lamda,这样就把具有约束条件的最优问题转化为无约束条件的最优化问题,对w求偏导得,

 这样就可以看出,w是 的特征向量,lamda是对应特征向量的特征值,最大化投影后的方差,等价于

 这样一来,要寻找的第一主成分就是使得投影方差最大的坐标轴就是最大特征值对应的特征向量。最终保留几个维度,就按照大小顺序选取前几个最大的特征值对应的特征向量,然后把原始数据进行投影即可,比如取出前k个大的特征值对应的特征向量w1,w2,...,wk,通过以下映射将d维样本降低到k维度,

 如此一来,新的x_{i}^{'}的第j维就是xi在第j个主成分wj方向上的投影,如果通过选取最大的k个特征值对应的特征向量,将方差小的特征抛弃,使得每个d维列向量xi被映射为k维列向量xi',\lambda _{i}\lambda _{j}为对应维度上的方差,那么定义降维后的信息占比如下,可以反过来通过\eta决定该选择保留下多少维度:

  • k-means算法

K-Means算法又称K均值算法,属于聚类算法的一种。聚类算法就是根据相似性原则,将具有较高相似度的数据对象划分至同一类簇,将具有较高相异度的数据对象划分至不同类簇,简而言之,就是把一些没有标签(label)的数据通过聚类算法打上标签分为不同的组/簇

聚类与分类的最大区别就是在于聚类属于无监督过程(处理事务无先验知识),而分类过程为有监督过程(存在有先验知识的训练数据集)。

最优的划分其实也就是最优的中心点的位置,未来的数据求出其与不同中心点的距离实现对其的预测。 

对于预测问题,大体流程如图1所示,

图1 预测算法

 对于聚类算法,大体的流程如图2所示,

图2 聚类算法

 为什么要叫KMeans?因为K代表着最终的簇数量,或者说目标簇数量,需要手动设置,是一个超参数。Means是因为算法过程中需要计算平均值,下面描述一下KMeans的流程,

随机初始化簇中心点个数K
输入:样本
输出:样本所属簇
// 当样本分配到K个簇不再变化时end
While(样本的分配发生改变)
    for i=1,2,...,N then do
        样本被分配到距离其最近的中心点
    根据当前每个簇中的样本更新K个簇中心点:采用平均值计算
    end
end

  • 决策树

决策树是一种有监督学习,有明确的标签用于划分树的分支,符合直觉且非常直观,非叶子节点均为决策节点,每个叶子节点对应的标签即为对应的样本的预测值。需要知道回归与分类问题的区别,回归针对于连续问题,分类针对于离散问题。

特点:

决策树可以处理非线性问题,可解释性强(无seta参数),模型简单且预测效率高;不容易显示的使用函数表达,不可微XGBoost。

对于一个好的模型对一个数据集进行分类,希望得到以下两种分割方式中的哪一种?当然是分割方式2,它可以保证分割后的两个类别中,分错的类别占比很低,下面介绍一下决策树的流程。

 递归解释:

算法描述(递归):

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

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

相关文章

Transformer 动画讲解:多层感知机

暑期实习基本结束了,校招即将开启。 不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。提前准备才是完全之策。 最近,我们又陆续整理了很多大厂的面试题&#xff0c…

Python GUI编程:深入探索现代GUI库及其创新应用

目录 引言 Python GUI库概览 1. Tkinter 2. PyQt/PySide 3. wxPython 4. Kivy 5. PyGTK 6.FLTK (pyFLTK) 创新应用案例 1. 交互式数据分析工具 2. 智能物联网(IoT)仪表板 3. 增强现实(AR)辅助设计软件 4. 跨平台的科学计算软件 5. 交互式教育软件 实战示例1&…

Vue13-计算属性的简写

一、计算属性的简写 注意: 当计算属性只有get,没有set的时候,才能用简写形式!!!

【kyuubi-spark】从0-1部署kyuubi集成spark执行spark sql到k8s读取iceberg的minio数据

一、背景 团队在升级大数据架构 前端使用trino查询,对trino也进行了很多优化,目前测试来看,运行还算稳定,但是不可避免的trino的任务总会出现失败的情况。原来的架构是trino失败后去跑hive,而hive是跑mapreduce依赖于…

基于深度学习的红外船舶检测识别分类完整实现数据集8000+张

随着遥感技术的快速发展,包括无人机、卫星等,红外图像在船舶检测识别中的作用日益凸显。相对于可见光图像,红外图像具有在夜晚和恶劣天气条件下高效检测识别船舶的天然优势。近年来,深度学习作为一种强大的图像处理技术&#xff0…

汇编:数组定义数据填充

数组的定义 在32位汇编语言中,定义数组时,通常使用定义数据指令(如 DB, DW, DD,DQ )和标签来指定数组的名称和内容。DB定义字节数组(每个元素占1字节)、DW定义字数组(每个元素占2字节&#xff…

计算机网络 —— 网络层(IP数据报)

计算机网络 —— 网络层(IP数据报) 网络层要满足的功能IP数据报IP数据报格式IP数据报首部格式数据部分 IP数据报分片 我们今天进入网络层的学习。 网络层要满足的功能 网络层作为OSI模型中的第三层,是计算机网络体系结构的关键组成部分&…

lua vm 五: upvalue

前言 在 lua vm 中,upvalue 是一个重要的数据结构。upvalue 以一种高效的方式实现了词法作用域,使得函数能成为 lua 中的第一类值,也因其高效的设计,导致在实现上有点复杂。 函数 (proto) upvalue 构成了闭包(closu…

【讯为Linux驱动开发】2.注册一个字符设备

【问】如何描述一个字符设备? dev结构体 其中需要关心三个成员变量: 所属模块 :struct module *owner; 文件操作结构体: const struct file_operations *ops 设备号 : dev_t 当应用层使用指令open("/dev/hello&…

在群晖上通过Docker部署DB-GPT

最近一直有网友在后台私信,发的内容高度统一,只有后面 8 位数字不一样,都是 #22232 xxxxxxxx,有谁知道是什么意思吗?在我印象中,这是第二次这么大规模的发类似的字符串了 什么是 DB-GPT ? DB-G…

项目总结报告(Word模板)

2 项目工作成果 2.1 交付给用户的产品 2.2 交付给研发中心的产品 2.2.1 代码部分 2.2.2 文档部分 2.3 需求完成情况与功能及性能符合性统计 2.3.1 需求完成情况统计 2.3.2 功能符合性分析 2.3.3 性能符合性分析 3 项目工作分析 3.1 项目计划与进度实施分析 3.1.1 开发进度 3.1.…

kube-promethesu新增k8s组件监控(etcd\kube-controller-manage\kube-scheduler)

我们的k8s集群是二进制部署,版本是1.20.4 同时选择的kube-prometheus版本是kube-prometheus-0.8.0 一、prometheus添加自定义监控与告警(etcd) 1、步骤及注意事项(前提,部署参考部署篇) 1.1 一般etcd集群会开启HTTP…

【设计模式】行为型设计模式之 状态模式,带你探究有限状态机FSM的三种实现方式

什么是有限状态机 Finite state Machine FSM 简称状态机:状态机由三部分组成,状态(State) 事件(Event) 和动作(Action)组成。 其中事件也被称为转移条件,事件触发状态的转移和动作的执行。不过动作不是必须的,也可能只存在状态转…

【机器人和人工智能——自主巡航赛项】进阶篇

文章目录 案例要求创建地图rviz仿真 保存地图坐标点定位识别训练主逻辑理解语音播报模块匹配二维码识别多点导航讲解视频其余篇章 案例要求 创建地图 ./1-gmapping.sh 把多个launch文件融合在sh文件里面 rviz仿真 rviz是rose集成的可视化界面,查看机器人的各项数…

html+CSS+js部分基础运用17

在图书列表中,为书名“零基础学JavaScript”和“HTML5CSS3精彩编程200例”添加颜色。(请用class或style属性实现),效果如下图1所示: 图1 图书列表 Class和style的综合应用。(1)应用class的对象、…

CNN简介与实现

CNN简介与实现 导语整体结构卷积层卷积填充步幅三维卷积立体化批处理 实现 池化层特点实现 CNN实现可视化总结参考文献 导语 CNN全称卷积神经网络,可谓声名远扬,被用于生活中的各个领域,也是最好理解的神经网络结构之一。 整体结构 相较于…

Servlet-01

文章目录 Servlet创建Servlet探究Servlet的生命周期 HttpServletWebServlet注解详解 重定向与请求转发ServletContextServletContext中的接口 HttpServletRequestHttpServletResponse状态码解释Cookie Servlet Q:它能做什么呢? A:我们可以通…

使用汇编和proteus实现仿真数码管显示电路

proteus介绍: proteus是一个十分便捷的用于电路仿真的软件,可以用于实现电路的设计、仿真、调试等。并且可以在对应的代码编辑区域,使用代码实现电路功能的仿真。 汇编语言介绍: 百度百科介绍如下: 汇编语言是培养…

1-5 C语言操作符

C语言提供了非常丰富的操作符,使得C语言使用起来非常的方便 算数操作符: 加 减 乘 除 取模 【 - * / %】 注:除号的两端都是整数的时候执行的是整数的除法,如果…

Unity 编辑器扩展,获取目录下所有的预制件

先看演示效果 实现方案 1创建几个用于测试的cube 2,创建一个Editor脚本 3,编写脚本内容 附上源码 using UnityEditor; using UnityEngine;public class GetPrefeb : EditorWindow {private string folderPath "Assets/Resources"; // 指定预…