更新日志

2024-04-024

添加KNN、Regression、Bayes算法


镇楼图:

算法选择

1.​ 🔪KNN分类器

🏷分类算法

​ KNN也叫K近邻算法(K-nearest neighbors,KNN )是一种很基本朴实的机器学习方法,归属于分类算法。它是在所有样本空间中寻找距离最近的K个样本,通过投票(多数者获胜)来确定位置样本归属于哪一类,是一种十分简单但却效果很好的算法。

KNN

假设有三个类别,如图中所示,K=3(实线)时,待分类样本(绿色🟢)选取最近的3个样本,被划分为红色三角(🔴)所在的类;而当K=5(虚线)时,显然待分类样本被划分蓝色方块(🟦)所在的类。

1.1 超参

​ 不难发现KNN只有两个超参数:

  1. K的取值

    如何选择一个最佳的K值取决于数据。一般情况下,在分类时较大的K值能够减小噪声的影响,但会使类别之间的界限变得模糊;而较小的K值易受噪声影响,边界也更加细分。K值的选择其实决定了KNN对样本空间的划分即决策边界,K越大,边界越平滑:

    KNN边界

    同样的,选择不同的K值,划分出的类别也有不同的偏差和方差:

    image-20240423001154803

    小的K值偏差(即bias,用来衡量精确度)小,但方差大(variance,衡量离散度);而大的K值恰恰相反;我们不可能既要又要,总要舍弃一些才能获得更好的效果,这就要根据实际的项目来确定了。

  2. 距离度量方法

    一般距离度量都为Lp距离:

    Lp(xi,xj)=[l=1nxi(l)xj(l)p]1pL_p\big(x_i,x_j\big)=\left[\sum_{l=1}^n\left|x_i^{(l)}-x_j^{(l)}\right|^p\right]^{\frac{1}{p}}

    常用的有三种,分别为p=1,p=2,p=+p=1,p=2,p=+\infty

    • L1距离(曼哈顿距离)

      Li(xi,xj)=l=inxi(l)xj(l)L_i\big(x_i,\:x_j\big)=\sum_{l=i}^n\left|x_i^{(l)}-x_j^{(l)}\right|

    • L2距离(欧氏距离)

      L2(xi,xj)=l=1nxi(l)xj(l)2L_2(x_i,x_j)=\sqrt{\sum_{l=1}^n\left|x_i^{(l)}-x_j^{(l)}\right|^2}

    • 切比雪夫距离(p为无穷时)

      L=max(x1kx2k)L=max(|x_{1k}-x_{2k}|)

1.2 优缺点

优点:

  • 简单易用
  • 无须训练

缺点

  • 原始的KNN算法只考虑近邻不同类别的样本数量,而忽略掉了距离;
  • 样本库容量依赖性较强对KNN算法在实际应用中的限制较大
  • KNN算法必须指定K值,K值选择不当则分类精度不能保证
  • 样本类别预测时间长

KNN的不需训练的优点决定了它预测时间长的缺点,一个不需要训练的算法,每次预测新样本都要在整个进行数据集上计算,性能可想而知,当然,在一些小型数据集上这个缺点也就不存在了。

2. 📈线性回归&逻辑回归

🏷估值&分类算法

​ 线性回归有点像插值,预测某个未知样本的映射值,但插值常常在区间内部,而线性回归则是往往在区间右侧。线性回归的输出是无边界的,而逻辑回归是经过激活函数将线性回归的值归定在0到1之间,这样它的输出便能解释为概率,进而解释为某个类别的概率用来分类。

image-20240423004542346

3. 📊贝叶斯分类器

🏷分类算法(生成式)

​ 对于某一个待分类样本X,我们假定它有n个属性 (a1,a2,..,an)(a_1,a_2,..,a_n) ,这里的属性可以简单的理解为样本向量的某一维度的值,假设X可能的类别有m类,分别为 ( y1,y2,...,ymy_1, y_2, ... ,y_m ) ,现在对于这个样本,我们要预测它属于哪一类,可以怎样操作?

我们可以计算该样本属于不同类别的概率,取最大的概率值对应的类即可,用数学语言描述一下[1]

P(ykX)=max{P(y1X),P(y2X),P(y3X),,P(ynX)}, 则XykP\left(y_{k}\mid X\right)=\max\left\{P\left(y_{1}\mid X\right),P\left(y_{2}\mid X\right),P\left(y_{3}\mid X\right),\ldots,P\left(y_{n}\mid X\right)\right\},\ \text{则}X\in y_{k}

把目光聚焦到一个类别上来,要计算 P(yiX)P(y_i|X) ,根据条件概率(这里先挖一个坑,后面填),有[2]

P(yiX)=P(X,yi)P(X)=P(Xyi)P(yi)P(X)P\left(y_{i}\mid X\right)=\frac{P(X, y_i)}{P(X)}=\frac{P\left(X\mid y_{i}\right)P\left(y_{i}\right)}{P\left(X\right)}

对于每个类别 yiy_i 来说,P(X)即该样本的概率是不变的,所以上述优化问题转化为[3]

P(ykX)=max1in{P(Xy1)P(yi)}, 则XykP^*\left(y_{k}\mid X\right)=\max_{\mathclap{1\le i\le n}} \left\{P\left(X\mid y_{1}\right)\cdot P(y_i)\right\},\ \text{则}X\in y_{k}

因此,我们只需考虑两项 P(Xyi)P(X|y_i)P(yi)P(y_i) ,后者为某类的概率,可以用样本集合来估计,对于前者也可用查找在类yiy_i中X的数量即可计算而出,至此我们便得到了贝叶斯分类方法,他将[1]式中计算后验概率 P(yiX)P(y_i|X) 转化为[3]式中的先验概率 P(Xyi)P(X|y_i)​​ 。

至此,要计算后验概率(判断属于哪个类),只需计算 P(Xyi)P(yi)P(X|y_i)\cdot P(y_i)P(yiX)P^*(y_i|X) ,考虑如下只有两个属性和两个类别的例子,右侧是数据集:

Bayes Example1

那么

P(y=0X=(0,2))=P(X=(0,2)y=0)P(y=0)=0P(y=1X=(0,2))=P(X=(0,2)y=0)P(y=1)=14410=0.1P^*(y=0|X=(0,2))=P(X=(0, 2)|y=0)\cdot P(y=0)=0 \\ P^*(y=1|X=(0,2))=P(X=(0, 2)|y=0)\cdot P(y=1)=\frac{1}{4}\cdot \frac{4}{10}=0.1

3.1 朴素贝叶斯方法

​ 因此X=(0,2)X=(0,2) 便根据PP^* 归类为y=1y=1。在上面的例子中,由于数据集的有限性,我们在y=0中寻找X的样本时数量为0,这显然是不合理的,因此我们需要进一步优化贝叶斯分类器,便有了朴素贝叶斯分类器:

条件独立假设(Conditional independent assumption):即样本的属性 (a1,a2,..,an)(a_1,a_2,..,a_n) 相互独立,这是朴素贝叶斯的前提也是基础。

因此有:

P(Xyi)=P((a1,a2,..,an)yi)=P(a1yi)P(a1yi)P(anyi)P(X|y_i)=P((a_1,a_2,..,a_n)|y_i)=P(a_1|y_i)\cdot P(a_1|y_i)\cdot\cdot\cdot P(a_n|y_i)

故[3]式转化为[4]

P(ykX)=max1in{P(Xy1)P(yi)}=max1in{P(a1yi)P(a1yi)P(anyi)P(yi)}P^*\left(y_{k}\mid X\right)=\max_{\mathclap{1\le i\le n}} \left\{P\left(X\mid y_{1}\right)\cdot P(y_i)\right\}=\max_{\mathclap{1\le i\le n}} \left\{P(a_1|y_i)\cdot P(a_1|y_i)\cdot\cdot\cdot P(a_n|y_i)\cdot P(y_i)\right\}

因此上面的例子便可如下计算:

Bayes Example2

上面例子视频中最后的判断条件出错了,最后还要乘以P(Y=0)P(Y=0)P(Y=1)P(Y=1)才能判断,当然,最后算完也是类别1,只是他缺了一步。

3.2 拉普拉斯修正

​ 使用朴素贝叶斯,当数据集中某类没有属性aia_i时,也会面临零概率问题。零概率问题,指的是在计算实例的概率时,如果某个量 xx,在观察样本库(训练集)中没有出现过,会导致整个实例的概率结果是 00 .在文本分类的问题中,当「一个词语没有在训练样本中出现」时,这个词基于公式统计计算得到的条件概率为00 ,使用连乘计算文本出现概率时也为00 。这是不合理的,不能因为一个事件没有观察到就武断的认为该事件的概率是 00

​ 为了解决零概率的问题,法国数学家拉普拉斯最早提出用加1的方法估计没有出现过的现象的概率,所以加法平滑也叫做拉普拉斯平滑。假定训练样本很大时,每个分量 xx​ 的计数加1造成的估计概率变化可以忽略不计,但可以方便有效的避免零概率问题。普拉斯平滑处理后的条件概率计算公式为:

P(aiy)=N(aiyi)+αNy+nαP\left(a_{i}\mid y\right)=\frac{N_{(a_i|y_i)}+\alpha}{N_{y}+n\alpha}

其中 α\alpha 表示平滑值且 α[0,1]\alpha\in[0,1]

3.3 含连续值的Bayes分类器

当特征中数据是连续型时,通常有两种方法来估计条件概率:

  1. 把每一个连续的数据离散化,然后用相应的离散区间替换连续数值。这种方法对于划分离散区间的粒度要求较高,不能太细,也不能太粗。
  2. 假设连续数据服从某个概率分布,使用训练数据估计分布参数,通常我们用高斯分布来表示连续数据的类条件概率分布。对数据集计算均值μ\mu和标准差σ\sigma后,便可可以使用高斯概率密度函数(或者分布函数)来评估一个给定的特征值的概率。

4. 🌳决策树

5​.​ 支持向量机(SVM)

6​.​ 🔍聚类

7. 📚Reference