机器学习基本算法总结

本文作者总结了机器学习的基本概念和对人工智能的理解,重点介绍了监督学习和无监督学习的区别,以及包括单层感知机、神经网络、Logistic回归、朴素贝叶斯、K近邻、SVM、集成学习等在内的基本机器学习算法。此外,还讨论了防止过拟合的方法,如早停策略、数据扩增、正则化和Dropout。最后,强调了数据预处理和选择合适模型的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写这篇博文主要是想对自己近期学到的机器学习知识做一个总结,同时也谈一谈我对人工智能的理解。

一、我对人工智能的理解

首先谈一谈我对人工智能的理解。人工智能企图理解智能的本质,并让机器也拥有类似于人的智能。比如,人从出生到慢慢长大,能听懂别人的话,能辨认周围的物体,并且能模仿一些举动,所以人是拥有智能的。但是机器不行,一开始机器可以完成一些人类已经明确告诉它怎么去完成的任务(比如人编写程序告诉计算机加法的逻辑是什么,计算机就可以完成加法的计算),但是一些需要推断的任务机器就没法做到了,而机器学习就是让机器有学习的能力,从而拥有智能的方法。
人有学习的能力,是从大量接收到的讯息中总结出了某种规律,从而能对陌生的物体作出推断。那么,机器想要拥有像人一样的学习能力,首先就要给他大量的输入讯息,其次根据不同的目的就需要通过不同的方法(机器学习算法)来总结出一个模型,然后可以利用这个模型对未知事例作出判断。
机器学习的应用领域现在已经渗透到了很多方面,比如文字识别、图像识别、垃圾邮件分类、股票预测等等。
机器学习的方式,大致可以分为监督学习、无监督学习、半监督学习等等,区别就在于是否给出了样本的标签。
所谓监督学习,就是学习的过程要不断的用样本的标签信息来校正你的学习结果。
根据样本标签是离散值还是连续值,监督学习可以分成分类和回归。典型的算法有单层感知机、K近邻、朴素贝叶斯、支持向量机、神经网络等等,Logistic回归、线性回归等等。
无监督学习,就是学习的过程不需要样本的标签信息,仅仅通过样本自身的特征来得到一些知识。
比如K-聚类,就是根据样本间的欧氏距离的远近来对样本进行一个划分,在比如关联规则挖掘,就是从大量数据找出某些规则。这些算法的过程都是不需要样本的类别信息的。

二、基本的机器学习算法总结

这里,我只简单的总结下列算法:

分类算法: 单层感知机、神经网络的反向传播算法、Logistic回归、朴素贝叶斯、K近邻、SVM、集成学习

聚类算法: k-means、二分k-means、DBSCAN

单层感知机

   单层感知机旨在从训练数据集中得到一个线性的分类超平面,学习的策略是使所有误分类样本距离超平面的距离最小,具体采用随机梯度下降法,每次随机找到一个误分类样本,使这个样本沿着最小化目标函数的方向更新参数。
给定一个训练数据集

T={(x1,y1),(x2,y2),...,(xN,yN)}

其中 xX=Rn,yiY={1,1},i=1,2,...,N , 因为误分类样本 yi(wixi+b) 小于零,所以目标函数是
minL(w,b)=xiMyi(wixi+b)

得到的感知机模型就是一个由w, b决定的超平面,
f(x)=sign(wx+b)

perceptron model

神经网络-前向后向传播算法

  单层感知机很简单,只能解决线性可分的问题,对于线性不可分的情况可能会产生震荡,参数w,b的取值无法收敛。那么,全联接神经网络就是将多个感知机结合在了一起,变成了一个层状结构的有向图。除了输入层和输出层以外还有隐层,从而可以解决线性不可分的情况。

NN

在神经网络中,每一个功能单元(即除了输入层的单元以外的神经元)都有自己的一组参数(w、b),可以将自己的输入进行线性组合后得到一个状态值,然后经过Sigmoid函数将状态值变换成激活值,接着将这个激活值作为下一层单元的输入,直到最终得到输出层的结果,这就是前向传播算法。神经网络的模型就是由这些一组组的(w、b)参数组成的,训练模型的过程就是找出能最好地拟合训练样本的特点的参数。反向误差传播算法(Back Propagation)就是训练参数(w、b)的。
反向传播算法的基本思想是:
(1)先初始化所有的参数w、b,根据前向传播算法计算每一层的状态值和激活值
(2)计算每一层的误差,误差的计算是从后向前推进的
(3)更新参数(目标是让误差变小)
(4)迭代2,3步骤,知道满足停止条件

假设单个样本的误差是E, E=12(yo) , 其中y是样本的理应输出,o是计算得到的结果。我们的目标是让所有样本的误差最小,那么只需要让每一个样本的误差最小即可获得整体最小。BP采用批量梯度下降法更新参数。
4核心公式

每一层传播的误差就是 σ(l) ,每个功能单元都会有自己的误差 σ(l)i ,因为它有自己的参数w, b,这样在一次迭代中,每个单元都可以根据误差计算到参数梯度下降的值 Ew(l)ij) Eb(l)i)

参数更新

将所有样本在各个单元参数梯度下降的值求平均就可以完成一次参数的更新——批量梯度下降法。

所以说,神经网络的学习策略是靠误差驱动的

Logistic回归

   Logistic回归可以类比于单层感知机,两者都想从样本中学习到参数w、b,从而得到一个分类超平面,只不过前者是把输入经过参数作用后的结果用Sigmoid函数转换成了(0,1)之间的值,然后把这个值看成了一个属于某一类的概率,用极大似然估计来求解满足条件时使得概率最大化时的参数,而后者从误分类样本的性质考虑来优化参数。
似然函数

L(θ)=i=1NP(yi|xi;θ)=i=1Nhyiθ(1hθ)1yi

对似然函数取对数,求偏导,然后用批量梯度下降求解参数 θ (即w,b)
但是,单层感知机和Logistic回归只能在数据线性可分或者近似线性可分的情况下才能学习到比较好的参数,面对数据线性不可分的情况就效果不太好了。

支持向量机(SVM)

   支持向量机可以通过核技巧将特征变换到高维空间,从而将低维空间线性不可分的情况在高维空间变得线性可分。
   支持向量机的基础仍然是单层感知机,从一堆样本 (xi,yi) 中学习到参数 w,b , 得到一个超平面将样本分开。只不过单层感知机是靠误分类样本离超平面的距离最小驱动的,而SVM依靠的是最大化几何间隔驱动的
   首先函数间隔是什么?超平面 w,b 对于数据集的函数间隔是超平面对于每个样本点函数间隔的最小值。

γ^=minγi^=min(yi(wTxi+b))
i=1,...,n

实际上,样本正确分类的时候,函数间隔就是样本到平面的距离。
而几何间隔是函数间隔除以 w
γ~=γ^w

点到平面的距离除以法向量的二阶范数,这才是真正的点到平面的距离!
SVM想要最大化几何间隔,就是想要找到一个能把两类点 分得最开的超平面,所以SVM找到的平面是唯一的,而单层感知机找到的并不唯一。
   所以SVM的目标函数变成了 maxγ~ ,当然这是由约束条件的,那就是
yi(wTxi+b)=γ^iγ^

由于函数间隔缩放不会对几何间隔造成影响,所以将函数间隔变成1,这时目标函数就变成了:
max1w,s.t.yi(wTxi+b)1,i=1,...n

而目标函数的求解过程则是通过对偶条件变成了有约束条件的凸二次规划问题。其实约束条件使等号成立的点就是 支持向量,他们的函数间隔等于1。
求解时的拉格朗日对偶函数是
L(w,b,α)=12w2i=1nαi(yi(wTxi+b)1)

如果样本点不是支持向量,参数 αi 是等于零的(因为非支持向量的函数间隔大于1,而 αi 非负,为了使L最小,只能让 αi 等于0)
求解得到的超平面参数 w=ni=1αiyixi ,所以可以看出决定超平面位置的只是支持向量。
分类函数:
f(x)=(i=1nαiyixi)Tx+b

f(x)=i=1nαiyixi,x+b

以上面对的是数据完全线性可分的情况,而当数据近似线性可分的时候,可以加入松弛变量来惩罚那些分错的样本。

  如果数据是线性不可分的,那就要用核函数来将样本进行一个转换了。
(1)首先使用一个非线性映射 ϕ 将数据变换到一个特征空间
(2)然后再特征空间使用线性分类器
分类函数就是

f(x)=(i=1nαiyiϕ(xi),ϕ(x)+b

而核函数 K(x,z) 就是经过映射 ϕ 之后在特征空间中的内积 ϕ(x),ϕ(z)

点这里:支持向量机参考内容

朴素贝叶斯

   朴素贝叶斯算法依赖于贝叶斯定理,首先给出贝叶斯定理:

P(A|B)=P(B|A)P(A)P(B)

它是关于随机事件A和B的条件概率的一则定理,其中P(A|B)是在B发生的情况下A发生的可能性。
P(A|B)是A的后验概率,已知B的取值;
P(B|A)是B的后验概率,已知A的取值;
P(A)是A的先验概率,之所以称为“先验”是因为它不考虑任何B方面的因素。
P(B)是B的先验概率。
朴素贝叶斯分类器实际上就是根据一堆样本计算得到的先验概率和条件概率,然后有一个新的样本需要预测的时候,就计算他属于每个类别的后验概率。
P(yi|x)=P(x|yi)P(yi)P(x)

P(yi|x)=kj=1(P(xj|yi)P(yi))P(x)

假设样本有k维特征,并且特征之间相互独立。
当给定一个样本 x ,需要判断他的类别标签时,就计算在给定了一对特征组成的样本x 的条件下对于每一类的后验概率。首先,每一类的先验概率 P(yi) 根据训练集合是知道的,而在给定类别标签时样本出现哪些特征的条件概率也是可以由训练集合计算的。对于每个类别的后验概率,分母都是一样的,所以比较分子就可以了。

K近邻

   K近邻的一个关键就是需要决定距离的度量方式。对于每一个样本,计算其它样本与它的距离,选取K个最近距离的点,根据它们的类别标签进行投票,从而决定这个样本的标签

K-means

   K-means是一种最简单的聚类方法,将所有的样本根据距离划分成K个块。
(1)定义K个初始聚类中心
(2)对于每一个样本,计算与K个中心的距离,然后把该样本赋予到距离最小的那个中心的类别
(3)对每个中心管辖的样本点求平均,得到新的中心点
(4)重复步骤2,3,直到满足停止条件
停止条件:相邻两次样本中心差别小于阈值,或者迭代次数超过阈值。
但是K-means的缺点就是,算法依赖于初始中心的选择,如果初始中心选的不好可能聚类的结果就不会很好。另外,K-means是一种球形聚类方法,适合的数据是每个类别的规模密度都差不多。

二分K-means

   为了解决K-means初始中心随机化导致的划分可能不理想的问题,二分K-means想出了逐步划分样本集合的方法。主要思想就是,先把整个样本集合看作是一个类簇,然后二分类,然后每次选择类内离散度大的类簇进行二划分,知道划分的类簇总数为K为止。
  所以二分K聚类是由类内离散度驱动的方法,类内离散度越大,表示类簇越松散,性能越差。

DBSCAN

  DBSCAN是一种基于密度的方法,它跟K-means相比,适合于那些不同类簇具有不同密度的数据。
   DBSCAN的步骤是:
(1)扫描整个数据集,找到任意一个核心点,对该核心点进行扩充。扩充的方法是寻找从该核心点出发的所有密度相连的数据点(注意是密度相连)。
(2)遍历该核心点的邻域内的所有核心点(因为边界点是无法扩充的),寻找与这些数据点密度相连的点,直到没有可以扩充的数据点为止。最后聚类成的簇的边界节点都是非核心数据点。
(3)重新扫描数据集(不包括之前寻找到的簇中的任何数据点),寻找没有被聚类的核心点,再重复步骤2,对该核心点进行扩充直到数据集中没有新的核心点为止。
(4)数据集中没有包含在任何簇中的数据点就构成异常点

三、机器学习中防止过拟合的方法

   在监督学习的时候,我们常常把数据集分成训练数据和测试数据,用训练数据来得到一个模型再用测试数据进行验证。这时我们假设我们所用的样本集合与真个数据集市独立同分布的,但事实并非如此。有可能我们用的训练数据过少,不能完整描绘整个数据集的情况,这样可能导致欠拟合,也有可能我们用的训练数据有一些独有的特性,训练的时候过分在意这些特性,这样就可能导致过拟合。

   那么怎么能防止过拟合呢?一般机器学习中会采用一些方法,比如early stopping、数据集扩增(Data augmentation)、正则化(Regularization)、Dropout等。

Early stopping

   一般在训练数据集上计算模型的时候会用一些迭代的方法,比如梯度下降法等等,我们可以限制迭代的次数来防止过拟合。限制的准则就是在测试数据集上计算准确率,如果模型得到的准确率不再提高就说明这个模型已经可以了。

数据集扩增

   数据及扩增的思想就是产生更多的数据,是的训练数据集能与整个数据集近似同分布,从而保证能够更完整地描绘数据的特点。具体的方法有:

(1)从数据源头采集更多数据
(2)复制原有数据并加上随机噪声
(3)重采样
(4)根据当前数据集估计数据分布参数,使用该分布产生更多数据等

正则化

  

Dropout

   在神经网络里面,在BP训练参数的时候,可以随机地删除一些隐藏层的节点来防止过拟合。在每一次后向传播误差的时候,随机地删除一些隐藏层节点,可以让参数数量变小,同时也能避开数据集可能存在的特性,从而防止过拟合。

四、怎样用机器学习去挖掘知识

   首先,我觉得认识自己的数据很重要。比如自己的数据是否存在脏数据,大致有一个什么样的分布等等。明确了自己数据集可能存在的问题,可以进行一些预处理,好的数据比好的方法更重要。
   其次,要挖掘的是什么样的问题,有的放矢,才能选取正确的适合的方法。比如要选择分类还是聚类,不同的方法也有自己适用的场景。
   在选取好一个模型之后,不断地用可视化的方法去衡量自己的模型每一步得到的结果是否符合你的预期。给定一个模型之后不能任由它去计算,在可视化的过程中,可能会得到一些不为人知的发现。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值