【算法】机器学习算法知识点面试准备

机器学习部分

基本概念参考https://blog.csdn.net/weixin_42301220/article/details/123940527

https://zhuanlan.zhihu.com/p/82105066

1. 如何解决过拟合与欠拟合?

如何解决欠拟合

  1. 增加新特征,可以考虑加入进特征组合、高次特征,来增大假设空间;
  2. 尝试非线性模型,比如核SVM 、决策树、DNN等模型;增加模型的复杂程度。
  3. 减小正则化系数。正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。

如何解决过拟合

  1. 重新清洗数据,数据不纯会导致过拟合,此类情况需要重新清洗数据。
  2. 增加训练样本数量。
  3. 降低模型复杂程度。
  4. 增大正则项系数。
  5. 采用dropout方法, dropout方法,通俗的讲就是在训练的时候让神经元以一定的概率不工作。
  6. early stopping.
  7. 减少迭代次数。
  8. 增大学习率。
  9. 添加噪声数据。
  10. 树结构中,可以对树进行剪枝。
  11. 减少特征项。
  12. 数据增强(即增加现有训练数据的大小,如运用反转、旋转、移动和放缩等运算合理生成数据,以减少过拟合,从而提高网络性能)

欠拟合和过拟合这些方法,需要根据实际问题,实际模型,进行选择。

2. 正则化系数

L0范数与L1范数

L0范数:向量中非0元素的个数,如果用L0范数来规范化一个参数矩阵的话,就是希望w的大部分元素都是0,也就是希望参数w是稀疏的。但是L0范数难以优化求解,故基本不用。

L1范数:向量中各个元素的绝对值之和,也叫“稀疏规则算子(Lasso Regularization)”,比L0具有更好的优化求解特性。

为什么要让参数稀疏化呢?

(1)特征选择:

稀疏规则和效果好的一个关键原因在于它能够实现特征的自动选择,一般来说,xi的大部分元素(也就是特征)都是和最终的输出yi没有关系或者不提供任何信息的,在最小化目标函数的时候考虑xi这些额外的特征,虽然可以获得更小的训练误差,但在预测新的样本时,这些没用的信息反而会被考虑,从而干扰了对正确yi的预测。稀疏规则化算子的引入就是为了完成特征自动选择的光荣使命,它会学习地去掉这些没有信息的特征,也就是把这些特征对应的权重置为0。

(2)可解释性:

另一个青睐于稀疏的理由是,模型更容易解释。例如患某种病的概率是y,然后我们收集到的数据x是1000维的,也就是我们需要寻找这1000种因素到底是怎么影响患上这种病的概率的。假设我们这个是个回归模型:y=w1x1+w2x2+…+w1000x1000+b(当然了,为了让y限定在[0,1]的范围,一般还得加个Logistic函数)。

通过学习,如果最后学习到的w就只有很少的非零元素,例如只有5个非零的wi,那么我们就有理由相信,这些对应的特征在患病分析上面提供的信息是巨大的,决策性的。也就是说,患不患这种病只和这5个因素有关,那医生就好分析多了

L2范数

除了L1范数,还有一种更受宠幸的规则化范数是L2范数: ∣ ∣ W ∣ ∣ 2 ||W||_2 ∣∣W2​。它也不逊于L1范数,它有两个美称,在回归里面,有人把有它的回归叫“岭回归”(Ridge Regression),有人也叫它“权值衰减”(weight decay)。它的强大功效是改善机器学习里面一个非常重要的问题:过拟合。

L2范数是指向量各元素的平方和然后求平方根。我们让L2范数的规则项 ∣ ∣ W ∣ ∣ 2 ||W||_2 ∣∣W2​最小,可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0,这里是有很大的区别的哦。而越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象,因为参数小,对结果的影响就小了。

L2正则化是在目标函数中增加所有权重参数的平方和,使得所有的w尽可能的趋于0但不为0,因为过拟合的时候,拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大, 在某些小区间里,函数值的变化很剧烈,也就是w非常大,所以,L2正则化就很大程度上抑制了w变化的速率,也就是权重变化太快的趋势。

通过L2范数,我们可以实现对模型空间的限制,从而在一定程度上避免了过拟合。

因此,一句话总结就是:L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。Lasso在特征选择时候非常有用,而Ridge就只是一种规则化而已。

L1和L2的差别

为什么一个让绝对值最小,一个让平方最小,会有那么大的差别呢?

看导数一个是1一个是w便知, 在靠进零附近, L1以匀速下降到零, 而L2则完全停下来了。这说明L1是将不重要的特征(或者说, 重要性不在一个数量级上)尽快剔除, L2则是把特征贡献尽量压缩最小但不至于为零. 两者一起作用, 就是把重要性在一个数量级(重要性最高的)的那些特征一起平等共事。

L1和L2正则先验分别服从什么分布

  • 对参数引入L2正则化,相当于引入高斯正态先验分布
    在这里插入图片描述

  • 对参数引入L1正则化,相当于引入拉普拉斯先验分布
    在这里插入图片描述

3. 最大熵原理矛盾吗

在这里插入图片描述

4. 极大似然估计和极大后验估计

极大似然估计

极大似然估计 (Maximum likelihood estimation) 基本思想是在给定样本集的情况下,求使得该样本集出现的 “可能性" 最大的参数 θ \theta θ 。将 参数 θ \theta θ 视为末知量,则参数 θ \theta θ 对于样本集X的对数似然函数为:
L ( θ ) = ln ⁡ P ( X ∣ θ ) L(\theta)=\ln P(X \mid \theta) L(θ)=lnP(Xθ)
这个函数反映了在观测结果X已知的条件下, θ \theta θ 的各种值的 “似然程度” 。这里是把观测值X看成结果,把参数 θ \theta θ 看成是导致这个结果的原因。参数 θ \theta θ 虽然未知但是有着固定值 (当然这是频率学派的观点),并非事件或随机变量,无概率可言,因而改用“似然(likelihood)" 这个词。
于是通过求导求解使得对数似然函数最大的参数 θ , θ = arg ⁡ max ⁡ θ L ( θ ) \theta , \theta=\underset{\theta}{\arg \max } L(\theta) θθ=θargmaxL(θ) ,即为极大似然法。

极大后验估计

极大后验估计 (Maximum a posteriori estimation) 是贝叶斯学派的参数估计方法,相比于频率学派,贝叶斯学派将参数 θ \theta θ 视为随机变量,并将其先验分布 P ( θ ) P(\theta) P(θ) 包含 在估计过程中。运用贝叶斯定理,参数 θ \theta θ的后验分布为:
P ( θ ∣ X ) = P ( X , θ ) P ( X ) = P ( θ ) P ( X ∣ θ ) P ( X ) ∝ P ( θ ) P ( X ∣ θ ) P(\theta \mid X)=\frac{P(X, \theta)}{P(X)}=\frac{P(\theta) P(X \mid \theta)}{P(X)} \propto P(\theta) P(X \mid \theta) P(θX)=P(X)P(X,θ)=P(X)P(θ)P(Xθ)P(θ)P(Xθ)
上式中 P ( X ) P(X) P(X) 不依赖于 θ \theta θ 因而为常数项可以舍去,则最终结果为 θ = arg ⁡ max ⁡ θ P ( θ ) P ( X ∣ θ ) \theta=\underset{\theta}{\arg \max } P(\theta) P(X \mid \theta) θ=θargmaxP(θ)P(Xθ)

5. 判别模型与生成模型

生成模型

  • 生成模型:由数据学习联合概率密度分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型,即生成模型:P(Y|X)= P(X,Y)/ P(X)(贝叶斯概率)。
  • 基本思想是首先建立样本的联合概率概率密度模型P(X,Y),然后再得到后验概率P(Y|X),再利用它进行分类。典型的生成模型有朴素贝叶斯隐马尔科夫模型

判别模型

  • 判别模型:由数据直接学习决策函数Y=f(X)或者条件概率分布P(Y|X)作为预测的模型,即判别模型。
  • 基本思想是有限样本条件下建立判别函数,不考虑样本的产生模型,直接研究预测模型。典型的判别模型包括k近邻,感知级,决策树,支持向量机等。这些模型的特点都是输入属性X可以直接得到后验概率P(Y|X),输出条件概率最大的作为最终的类别(对于二分类任务来说,实际得到一个score,当score大于threshold时则为正类,否则为负类)。

举例

  • 判别式模型举例:要确定一个羊是山羊还是绵羊,用判别模型的方法是从历史数据中学习到模型,然后通过提取这只羊的特征来预测出这只羊是山羊的概率,是绵羊的概率。

  • 生成式模型举例:利用生成模型是根据山羊的特征首先学习出一个山羊的模型,然后根据绵羊的特征学习出一个绵羊的模型,然后从这只羊中提取特征,放到山羊模型中看概率是多少,在放到绵羊模型中看概率是多少,哪个大就是哪个。

联系和区别

  • 生成方法的特点:上面说到,生成方法学习联合概率密度分布P(X,Y),所以就可以从统计的角度表示数据的分布情况,能够反映同类数据本身的相似度。但它不关心到底划分各类的那个分类边界在哪。生成方法可以还原出联合概率分布P(Y,X),而判别方法不能。生成方法的学习收敛速度更快,即当样本容量增加的时候,学到的模型可以更快的收敛于真实模型,当存在隐变量时,仍可以用生成方法学习。此时判别方法就不能用。

  • 判别方法的特点:判别方法直接学习的是决策函数Y=f(X)或者条件概率分布P(Y|X)。不能反映训练数据本身的特性。但它寻找不同类别之间的最优分类面,反映的是异类数据之间的差异。直接面对预测,往往学习的准确率更高。由于直接学习P(Y|X)或P(X),可以对数据进行各种程度上的抽象、定义特征并使用特征,因此可以简化学习问题。

  • 由生成模型可以得到判别模型,但由判别模型得不到生成模型

  • 大多数深度神经网络都是判别模型

6. 特征工程

为什么要对特征做归一化处理

Feature scaling,常见的提法有“特征归一化”、“标准化”,是数据预处理中的重要技术。尺度大的特征会起决定性作用,而尺度小的特征其作用可能会被忽略,为了消除特征间单位和尺度差异的影响,以对每维特征同等看待,需要对特征进行归一化。

什么是组合特征?如何处理高维组合特征?

为了提高复杂关系的拟合能力,在特征工程中经常会把一阶离散特征两两组合,构成高阶组合特征。可以采取降维,矩阵分解或者特征筛选的方法得到具备绝大部分信息的几个特征进行训练。

7. 比较欧氏距离和曼哈顿距离。

  • 欧氏距离:欧几里得距离,就是平方和开根号。我们最常用的。欧氏距离越小,两个向量的相似度越大;欧氏距离越大,两个向量的相似度越小。

  • 曼哈顿距离:|x1 - x2| + |y1 - y2|, 曼哈顿距离也称为城市街区距离。可以看出在曼哈顿距离中,考虑了更多的实际 因素。总之,在曼哈顿距离的世界中,规则是我们只能沿着线画出的格子行进。

  • 切比雪夫距离:max(|x1 - x2|,|y1 - y2|)

  • 欧氏距离是在N维空间中两个点的真实距离;

  • 马氏距离表示数据的协方差距离。 而欧式距离的特征是:平移不变性、旋转不变性。 马式距离的特征则是:平移不变性、旋转不变性、尺度不变性、不受量纲影响、考虑了模式分布

什么是余弦相似度?为什么有些场景使用余弦相似度而不使用欧氏距离?

欧式距离衡量空间点的直线距离,余弦距离衡量点在空间的方向差异。欧式距离体现的数值上的绝对差异,而余弦距离体现方向上的相对差异。

8. one-hot的作用是什么?为什么不能直接用数字来表示?

One-Hot编码是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值。然后,每个整数值被表示为二进制向量,除了整数的索引之外,它都是零值,它被标记为1。直接使用数字会给将人工误差而导致的假设引入到类别特征中,比如类别之间的大小关系,以及差异关系等等

7. Relu在零点不可导,那么反向传播中如何处理?

ReLU虽然在零点不可导,但是我们在做反向传播的计算时,对ReLU这个函数的导数分情况讨论。即ReLU在零点时人为地给它赋予一个导数,比如0或者1。

8. Relu的优缺点

有的负值都变为0,而正值不变,这种操作被成为单侧抑制。正因为有了这单侧抑制,才使得神经网络中的神经元也具有了稀疏激活性。

使用 ReLU 得到的 SGD 的收敛速度会比 sigmoid/tanh 快很多; 计算复杂度低,不需要进行指数运算;

训练的时候很”脆弱”,很容易就”die”了;ReLU不会对数据做幅度压缩,所以数据的幅度会随着模型层数的增加不断扩张。

9. 什么是dropout?

dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。

可以很好的防止过拟合

  1. 随机丢神经元,每次训练得到不同网络,最后预测结果类似多模型集成结果。
  2. 神经元减少,更新参数减少。
  3. 丢神经元就等于丢了特征,就类似于RF的列采样了。

9. 缺失值处理方式

若机器上的某个传感器损坏导致一个特征无效时该怎么办?它们是否还可用?答案是肯定的。因为有时候数据相当昂贵,扔掉和重新获取都是不可取的,所以必须采用一些方法来解决这个问题。下面给出了一些可选的做法:

  • 使用可用特征的均值来填补缺失值;
  • 使用特殊值来填补缺失值,如-1;
  • 忽略有缺失值的样本;
  • 使用相似样本的均值添补缺失值;
  • 使用另外的机器学习算法预测缺失值。

10. 梯度下降方法对比

https://blog.csdn.net/jiaoyangwm/article/details/81457623

2.12.6 随机梯度和批量梯度区别

​ 随机梯度下降(SGD)和批量梯度下降(BGD)是两种主要梯度下降法,其目的是增加某些限制来加速运算求解。
下面通过介绍两种梯度下降法的求解思路,对其进行比较。
假设函数为:
h θ ( x 0 , x 1 , . . . , x 3 ) = θ 0 x 0 + θ 1 x 1 + . . . + θ n x n h_\theta (x_0,x_1,...,x_3) = \theta_0 x_0 + \theta_1 x_1 + ... + \theta_n x_n hθ(x0,x1,...,x3)=θ0x0+θ1x1+...+θnxn
损失函数为:
J ( θ 0 , θ 1 , . . . , θ n ) = 1 2 m ∑ j = 0 m ( h θ ( x 0 j , x 1 j , . . . , x n j ) − y j ) 2 J(\theta_0, \theta_1, ... , \theta_n) = \frac{1}{2m} \sum^{m}_{j=0}(h_\theta (x^{j}_0 ,x^{j}_1,...,x^{j}_n)-y^j)^2 J(θ0,θ1,...,θn)=2m1j=0m(hθ(x0j,x1j,...,xnj)yj)2
其中, m m m为样本个数, j j j为参数个数。

  1. 批量梯度下降的求解思路如下:
    a) 得到每个 θ \theta θ对应的梯度:
    ∂ ∂ θ i J ( θ 0 , θ 1 , . . . , θ n ) = 1 m ∑ j = 0 m ( h θ ( x 0 j , x 1 j , . . . , x n j ) − y j ) x i j \frac{\partial}{\partial \theta_i}J({\theta}_0,{\theta}_1,...,{\theta}_n)=\frac{1}{m}\sum^{m}_{j=0}(h_\theta (x^{j}_0 ,x^{j}_1,...,x^{j}_n)-y^j)x^{j}_i θiJ(θ0,θ1,...,θn)=m1j=0m(hθ(x0j,x1j,...,xnj)yj)xij
    b) 由于是求最小化风险函数,所以按每个参数 $ \theta $ 的梯度负方向更新 $ \theta_i $ :
    θ i = θ i − 1 m ∑ j = 0 m ( h θ ( x 0 j , x 1 j , . . . , x n j ) − y j ) x i j \theta_i=\theta_i - \frac{1}{m} \sum^{m}_{j=0}(h_\theta (x^{j}_0 ,x^{j}_1,...,x^{j}_n)-y^j)x^{j}_i θi=θim1j=0m(hθ(x0j,x1j,...,xnj)yj)xij
    c) 从上式可以注意到,它得到的虽然是一个全局最优解,但每迭代一步,都要用到训练集所有的数据,如果样本数据很大,这种方法迭代速度就很慢。
    相比而言,随机梯度下降可避免这种问题。

  2. 随机梯度下降的求解思路如下:
    a) 相比批量梯度下降对应所有的训练样本,随机梯度下降法中损失函数对应的是训练集中每个样本的粒度。
    损失函数可以写成如下这种形式,
    J ( θ 0 , θ 1 , . . . , θ n ) = 1 m ∑ j = 0 m ( y j − h θ ( x 0 j , x 1 j , . . . , x n j ) ) 2 = 1 m ∑ j = 0 m c o s t ( θ , ( x j , y j ) ) J(\theta_0, \theta_1, ... , \theta_n) = \frac{1}{m} \sum^{m}_{j=0}(y^j - h_\theta (x^{j}_0 ,x^{j}_1,...,x^{j}_n))^2 = \frac{1}{m} \sum^{m}_{j=0} cost(\theta,(x^j,y^j)) J(θ0,θ1,...,θn)=m1j=0m(yjhθ(x0j,x1j,...,xnj))2=m1j=0mcost(θ,(xj,yj))
    b)对每个参数 θ \theta θ 按梯度方向更新 θ \theta θ
    θ i = θ i + ( y j − h θ ( x 0 j , x 1 j , . . . , x n j ) ) \theta_i = \theta_i + (y^j - h_\theta (x^{j}_0, x^{j}_1, ... ,x^{j}_n)) θi=θi+(yjhθ(x0j,x1j,...,xnj))
    c) 随机梯度下降是通过每个样本来迭代更新一次。
    随机梯度下降伴随的一个问题是噪音较批量梯度下降要多,使得随机梯度下降并不是每次迭代都向着整体最优化方向。

小结:
随机梯度下降法、批量梯度下降法相对来说都比较极端,简单对比如下:

方法 特点
批量梯度下降 a)采用所有数据来梯度下降。
b)批量梯度下降法在样本量很大的时候,训练速度慢。
随机梯度下降 a)随机梯度下降用一个样本来梯度下降。
b)训练速度很快。
c)随机梯度下降法仅仅用一个样本决定梯度方向,导致解有可能不是全局最优。
d)收敛速度来说,随机梯度下降法一次迭代一个样本,导致迭代方向变化很大,不能很快的收敛到局部最优解。

下面介绍能结合两种方法优点的小批量梯度下降法。

3、 小批量(Mini-Batch)梯度下降的求解思路如下
对于总数为 m m m个样本的数据,根据样本的数据,选取其中的 n ( 1 < n < m ) n(1< n< m) n(1<n<m)个子样本来迭代。其参数 θ \theta θ按梯度方向更新 θ i \theta_i θi公式如下:
θ i = θ i − α ∑ j = t t + n − 1 ( h θ ( x 0 j , x 1 j , . . . , x n j ) − y j ) x i j \theta_i = \theta_i - \alpha \sum^{t+n-1}_{j=t} ( h_\theta (x^{j}_{0}, x^{j}_{1}, ... , x^{j}_{n} ) - y^j ) x^{j}_{i} θi=θiαj=tt+n1(hθ(x0j,x1j,...,xnj)yj)xij

2.12.7 各种梯度下降法性能比较

​ 下表简单对比随机梯度下降(SGD)、批量梯度下降(BGD)、小批量梯度下降(Mini-batch GD)、和Online GD的区别:

BGD SGD Mini-batch GD Online GD
训练集 固定 固定 固定 实时更新
单次迭代样本数 整个训练集 单个样本 训练集的子集 根据具体算法定
算法复杂度 一般
时效性 一般 一般
收敛性 稳定 不稳定 较稳定 不稳定

BGD、SGD、Mini-batch GD,前面均已讨论过,这里介绍一下Online GD。

​ Online GD与Mini-batch GD/SGD的区别在于,所有训练数据只用一次,然后丢弃。这样做的优点在于可预测最终模型的变化趋势。

​ Online GD在互联网领域用的较多,比如搜索广告的点击率(CTR)预估模型,网民的点击行为会随着时间改变。用普通的BGD算法(每天更新一次)一方面耗时较长(需要对所有历史数据重新训练);另一方面,无法及时反馈用户的点击行为迁移。而Online GD算法可以实时的依据网民的点击行为进行迁移。

11. Batch Normalization

定义

  • Batch normalization 的 batch 是批数据, 把数据分成小批小批进行 stochastic gradient descent. 而且在每批数据进行前向传递 forward propagation 的时候, 对每一层都进行 normalization 的处理

  • Batch normalization 也可以被看做一个层面. 在一层层的添加神经网络的时候, 我们先有数据 X, 再添加全连接层, 全连接层的计算结果会经过激活函数 成为下一层的输入, 接着重复之前的操作. Batch Normalization (BN) 就被添加在每一个全连接和激活函数之间.

算法步骤

下面给出 BN 算法在训练时的过程

输入:上一层输出结果 X = x 1 , x 2 , . . . , x m X = {x_1, x_2, ..., x_m} X=x1,x2,...,xm,学习参数 γ , β \gamma, \beta γ,β

算法流程:

  1. 计算上一层输出数据的均值

μ β = 1 m ∑ i = 1 m ( x i ) \mu_{\beta} = \frac{1}{m} \sum_{i=1}^m(x_i) μβ=m1i=1m(xi)

其中, m m m 是此次训练样本 batch 的大小。

  1. 计算上一层输出数据的标准差

σ β 2 = 1 m ∑ i = 1 m ( x i − μ β ) 2 \sigma_{\beta}^2 = \frac{1}{m} \sum_{i=1}^m (x_i - \mu_{\beta})^2 σβ2=m1i=1m(xiμβ)2

  1. 归一化处理,得到

x ^ i = x i + μ β σ β 2 + ϵ \hat x_i = \frac{x_i + \mu_{\beta}}{\sqrt{\sigma_{\beta}^2} + \epsilon} x^i=σβ2 +ϵxi+μβ

其中 ϵ \epsilon ϵ 是为了避免分母为 0 而加进去的接近于 0 的很小值

  1. 重构,对经过上面归一化处理得到的数据进行重构,得到

y i = γ x ^ i + β y_i = \gamma \hat x_i + \beta yi=γx^i+β

其中, γ , β \gamma, \beta γ,β 为可学习参数。

注:上述是 BN 训练时的过程,但是当在投入使用时,往往只是输入一个样本,没有所谓的均值 μ β \mu_{\beta} μβ 和标准差 σ β 2 \sigma_{\beta}^2 σβ2。此时,均值 μ β \mu_{\beta} μβ 是计算所有 batch μ β \mu_{\beta} μβ 值的平均值得到,标准差 σ β 2 \sigma_{\beta}^2 σβ2 采用每个batch σ β 2 \sigma_{\beta}^2 σβ2 的无偏估计得到。

Batch Normalization的作用

使用Batch Normalization,可以获得如下好处,

  • 可以使用更大的学习率,训练过程更加稳定,极大提高了训练速度
  • 可以将bias置为0,因为Batch Normalization的Standardization过程会移除直流分量,所以不再需要bias。
  • 对权重初始化不再敏感,通常权重采样自0均值某方差的高斯分布,以往对高斯分布的方差设置十分重要,有了Batch Normalization后,对与同一个输出节点相连的权重进行放缩,其标准差σ也会放缩同样的倍数,相除抵消。
  • 对权重的尺度不再敏感,理由同上,尺度统一由γ参数控制,在训练中决定。
  • 深层网络可以使用sigmoid和tanh了,理由同上,BN抑制了梯度消失
  • Batch Normalization具有某种正则作用,不需要太依赖dropout,减少过拟合

12. 深度学习为什么使用梯度下降,而不使用牛顿法或拟牛顿法优化

  • 原因一:牛顿法需要用到梯度和Hessian矩阵,这两个都难以求解。因为很难写出深度神经网络拟合函数的表达式,遑论直接得到其梯度表达式,更不要说得到基于梯度的Hessian矩阵了。
  • 原因二:即使可以得到梯度和Hessian矩阵,当输入向量的维度N较大时,Hessian矩阵的大小是N×N,所需要的内存非常大。
  • 原因三:在高维非凸优化问题中,鞍点相对于局部最小值的数量非常多,而且鞍点处的损失值相对于局部最小值处也比较大。而二阶优化算法是寻找梯度为0的点,所以很容易陷入鞍点。

在神经网络(非凸问题)的训练中,大多数都采用梯度下降法。而在训练逻辑回归(凸问题)等模型时,可采用梯度下降和拟牛顿方法。

13. KL散度

KL散度(Kullback-Leibler divergence) 又称相对熵 (relative entropy),主要用于衡量两个概率分布p和q的差异,也可理解为两个分布对数差的期望。
K L ( p ∥ q ) = ∑ i p ( x i ) log ⁡ p ( x i ) q ( x i ) = E x ∼ p [ log ⁡ p ( x ) q ( x ) ] = E x ∼ p [ log ⁡ p ( x ) − log ⁡ q ( x ) ] \mathbb{K} \mathbb{L}(p \| q)=\sum_i p\left(x_i\right) \log \frac{p\left(x_i\right)}{q\left(x_i\right)}=\mathbb{E}_{\mathbf{x} \sim p}\left[\log \frac{p(x)}{q(x)}\right]=\mathbb{E}_{\mathbf{x} \sim p}[\log p(x)-\log q(x)] KL(pq)=ip(xi)logq(xi)p(xi)=Exp[logq(x)p(x)]=Exp[logp(x)logq(x)]
KL散度总满足 K L ( p ∥ q ) ⩾ 0 \mathbb{K} \mathbb{L}(p \| q) \geqslant 0 KL(pq)0 ,而当且仅当 q = p q=p q=p 时, K L ( p ∥ q ) = 0 \mathbb{K} \mathbb{L}(p \| q)=0 KL(pq)=0 。一般来说分布 p ( x ) p(x) p(x) 比较复杂,因而希望用比较简单的 q ( x ) q(x) q(x) 去近似 p ( x ) p(x) p(x) ,而近似的标准就是 KL散度越小越好。

KL散度不具备对称性,即 K L ( p ∥ q ) ≠ K L ( q ∥ p ) \mathbb{K} \mathbb{L}(p \| q) \neq \mathbb{K} \mathbb{L}(q \| p) KL(pq)=KL(qp) ,因此不能作为一个距离指标。

14. 采样方法

https://www.cnblogs.com/massquantity/p/9382710.html

过采样

  1. 随机过采样

    随机过采样顾名思义就是从样本少的类别中随机抽样,再将抽样得来的样本添加到数据集中。然而这种方法如今已经不大使用了,因为重复采样往往会导致严重的过拟合,因而现在的主流过采样方法是通过某种方式人工合成一些少数类样本,从而达到类别平衡的目的,而这其中的鼻祖就是SMOTE。

  2. SMOTE
    SMOTE (synthetic minority oversampling technique) 的思想概括起来就是在少数类样本之间进行揷值来产生额外的样本。具体地,对于一个少数类样本 x i \mathbf{x}_i xi 使用K 近邻法(k值需要提前指定),求出离 x i \mathbf{x}_i xi 距离最近的 k \mathrm{k} k 个少数类样本,其中距离定义为样本之间 n n n 维特征空间的欧氏距离。然后从 k k k 个近邻点中随机选取一个,使用下列公 式生成新样本:
    x n e w = x i + ( x ^ i − x i ) × δ \mathbf{x}_{n e w}=\mathbf{x}_i+\left(\hat{\mathbf{x}}_i-\mathbf{x}_i\right) \times \delta xnew=xi+(x^ixi)×δ
    其中 x ^ \hat{\mathbf{x}} x^ 为选出的k近邻点, δ ∈ [ 0 , 1 ] \delta \in[0,1] δ[0,1] 是一个随机数。

    SMOTE会随机选取少数类样本用以合成新样本,而不考虑周边样本的情况,这样容易带来两个问题:

    • 如果选取的少数类样本周围也都是少数类样本,则新合成的样本不会提供太多有用信息。这就像支持向量机中远离margin的点对决策边界影响不大。
    • 如果选取的少数类样本周围都是多数类样本,这类的样本可能是噪音,则新合成的样本会与周围的多数类样本产生大部分重叠,致使分类困难。

欠采样

  1. 随机欠采样

    随机欠采样的思想同样比较简单,就是从多数类样本中随机选取一些剔除掉。这种方法的缺点是被剔除的样本可能包含着一些重要信息,致使学习出来的模型效果不好。

15. 常见回归和分类损失函数比较

https://www.cnblogs.com/massquantity/p/8964029.html

16. 激活函数与神经网络反向传播

https://www.cnblogs.com/massquantity/p/10138489.html

17. 常用分类算法的优劣性对比

算法 优点 缺点
Bayes 贝叶斯分类法 1)所需估计的参数少,对于缺失数据不敏感。
2)有着坚实的数学基础,以及稳定的分类效率。
1)需要假设属性之间相互独立,这往往并不成立。(喜欢吃番茄、鸡蛋,却不喜欢吃番茄炒蛋)。
2)需要知道先验概率。
3)分类决策存在错误率。
Decision Tree决策树 1)不需要任何领域知识或参数假设。
2)适合高维数据。
3)简单易于理解。
4)短时间内处理大量数据,得到可行且效果较好的结果。
5)能够同时处理数据型和常规性属性。
1)对于各类别样本数量不一致数据,信息增益偏向于那些具有更多数值的特征。
2)易于过拟合。
3)忽略属性之间的相关性。
4)不支持在线学习。
SVM支持向量机 1)可以解决小样本下机器学习的问题。
2)提高泛化性能。
3)可以解决高维、非线性问题。超高维文本分类仍受欢迎。
4)避免神经网络结构选择和局部极小的问题。
1)对缺失数据敏感。
2)内存消耗大,难以解释。
3)运行和调参略烦人。
KNN K近邻 1)思想简单,理论成熟,既可以用来做分类也可以用来做回归;
2)可用于非线性分类;
3)训练时间复杂度为O(n);
4)准确度高,对数据没有假设,对outlier不敏感;
1)计算量太大。
2)对于样本分类不均衡的问题,会产生误判。
3)需要大量的内存。
4)输出的可解释性不强。
Logistic Regression逻辑回归 1)速度快。
2)简单易于理解,直接看到各个特征的权重。
3)能容易地更新模型吸收新的数据。
4)如果想要一个概率框架,动态调整分类阀值。
特征处理复杂。需要归一化和较多的特征工程。
Neural Network 神经网络 1)分类准确率高。
2)并行处理能力强。
3)分布式存储和学习能力强。
4)鲁棒性较强,不易受噪声影响。
1)需要大量参数(网络拓扑、阀值、阈值)。
2)结果难以解释。
3)训练时间过长。
Adaboosting 1)adaboost是一种有很高精度的分类器。
2)可以使用各种方法构建子分类器,Adaboost算法提供的是框架。
3)当使用简单分类器时,计算出的结果是可以理解的。而且弱分类器构造极其简单。
4)简单,不用做特征筛选。
5)不用担心overfitting。
对outlier比较敏感

算法部分

1. 线性回归

利用线性回归找到最佳拟合直线,就是利用最小二乘法找到最佳回归系数。

这边为什么 X T X X^TX XTX可以求逆呢?是因为 X X X是列满秩矩阵( n 行 m 列, n > m n行m列,n>m nm列,n>m),那么就可以推导出 X T X X^TX XTX也是满秩矩阵。推导如下:
X w = 0 ⇒ X T X w = 0 Xw=0 \Rightarrow X^TXw=0 Xw=0XTXw=0
又因为
X T X w = 0 ⇒ w T X T X w = 0 ⇒ ( X w ) T ( X w ) = 0 ⇒ ∣ ∣ X w ∣ ∣ 2 = 0 ⇒ X w = 0 X^TXw=0 \Rightarrow w^TX^TXw=0 \Rightarrow (Xw)^T(Xw)=0 \Rightarrow ||Xw||^2=0 \Rightarrow Xw=0 XTXw=0wTXTXw=0(Xw)T(Xw)=0∣∣Xw2=0Xw=0
所以
X w = 0 ⇔ X T X w = 0 Xw=0\Leftrightarrow X^TXw=0 Xw=0XTXw=0
因为 X X X列满秩,所以 X w = 0 Xw=0 Xw=0有唯一解,所以 X T X w = 0 X^TXw=0 XTXw=0也只有唯一解。所以 X T X X^TX XTX满秩,即 X T X X^TX XTX可逆。

局部加权线性回归(LWLR)

线性回归的一个问题是有可能出现欠拟合现象,因为它求的是具有小均方误差的无偏估 计。显而易见,如果模型欠拟合将不能取得好的预测效果。所以有些方法允许在估计中引入一 些偏差,从而降低预测的均方误差。

其中的一个方法是局部加权线性回归(Locally Weighted Linear Regression,LWLR)。在该方法中,我们给待预测点附近的每个点赋予一定的权重。与kNN一样,这种算法每次预测均需要事先选取出对应的数据子集。该算法解除回归系数 W W W的形式如下:

w ^ = ( X T W X ) − 1 X T W y \hat{w}=(X^TWX)^{-1}X^TWy w^=(XTWX)1XTWy

其中, W W W是一个矩阵,这个公式跟我们上面推导的公式的区别就在于 W W W,它用来给每个点赋予权重。

LWLR使用”核”(与支持向量机中的核类似)来对附近的点赋予更高的权重。核的类型可以自由选择,最常用的核就是高斯核,高斯核对应的权重如下:

w ( i , i ) = e x p ( ∣ x ( i ) − x ∣ − 2 k 2 ) w(i,i)=exp\left (\frac{|x^{(i)}-x|}{-2k^2}\right) w(i,i)=exp(2k2x(i)x)

这样我们就可以根据上述公式,编写局部加权线性回归,我们通过改变k的值,可以调节回归效果。

岭回归

如果数据的特征比样本点还多(行数<列数)应该怎么办?很显然,此时我们不能再使用上文的方法进行计算了,因为矩阵X不是满秩矩阵,非满秩矩阵在求逆时会出现问题。引入正则化(regularization):将矩阵补成满秩。

岭回归即我们所说的L2正则线性回归,在一般的线性回归最小化均方误差的基础上增加了一个参数w的L2范数的罚项,从而最小化罚项残差平方和:

min ⁡ J ( w ) = ∣ ∣ X w − y ∣ ∣ 2 + λ ∣ ∣ w ∣ ∣ 2 2 \min J(w)=||Xw-y||^2+\lambda ||w||_2^2 minJ(w)=∣∣Xwy2+λ∣∣w22

对上式进行展开,
J ( w ) = ( X w − y ) T ( X w − y ) + λ w T w = ( w T X T − y T ) ( X w − y ) + λ w T w = w T X T X w − w T X T y − y T X w + y T y + λ w T w \begin{aligned} J(w)=&(Xw-y)^T(Xw-y)+\lambda w^Tw\\ =&(w^TX^T-y^T)(Xw-y)+\lambda w^Tw\\ =&w^TX^TXw-w^TX^Ty-y^TXw+y^Ty+\lambda w^Tw\\ \end{aligned} J(w)===(Xwy)T(Xwy)+λwTw(wTXTyT)(Xwy)+λwTwwTXTXwwTXTyyTXw+yTy+λwTw

w w w求导,并令其等于0
∂ J ∂ w = 2 X T X w − X T y − X T y + 2 λ w = 2 X T X w − 2 X T y + 2 λ w = 2 ( X T X + λ I ) w − 2 X T y = 0 \begin{aligned} \frac{\partial J}{\partial w}&=2X^TXw-X^Ty-X^Ty+2\lambda w\\ &=2X^TXw-2X^Ty+2\lambda w\\ &=2(X^TX+\lambda I)w-2X^Ty\\ &=0 \end{aligned} wJ=2XTXwXTyXTy+2λw=2XTXw2XTy+2λw=2(XTX+λI)w2XTy=0

简单说来,岭回归就是在普通线性回归的基础上引入单位矩阵。回归系数的计算公式变形如下:

w ^ = ( X T X + λ I ) − 1 X T y \hat{w}=(X^TX+\lambda I)^{-1}X^Ty w^=(XTX+λI)1XTy

式中,矩阵I是一个mxm的单位矩阵,加上一个λI从而使得矩阵非奇异,进而能对矩阵求逆

岭回归最先用来处理特征数多于样本数的情况,现在也用于在估计中加入偏差,从而得到更好的估计。这里通过引入λ来限制了所有w之和,通过引入该惩罚项,能够减少不重要的参数,这个技术在统计学中也可以叫做缩减(shrinkage)。

缩减方法可以去掉不重要的参数,因此能更好地裂解数据。此外,与简单的线性回归相比,缩减法能够取得更好的预测效果。

为了使用岭回归和缩减技术,首先需要对特征做标准化处理。因为,我们需要使每个维度特征具有相同的重要性

前向逐步回归

前向逐步线性回归算法属于一种贪心算法,即每一步都尽可能减少误差。一开始,所有的权重都设置为1,然后每一步所做的决策是对某个权重增加或减少一个很小的值。

我们计算回归系数,不再是通过公式计算,而是通过每次微调各个回归系数,然后计算预测误差。那个使误差最小的一组回归系数,就是我们需要的最佳回归系数。

缩减方法(逐步线性回归或岭回归),就是将一些系数缩减成很小的值或者直接缩减为0。这样做,就增大了模型的偏差(减少了一些特征的权重),通过把一些特征的回归系数缩减到0,同时也就减少了模型的复杂度。消除了多余的特征之后,模型更容易理解,同时也降低了预测误差。但是当缩减过于严厉的时候,就会出现过拟合的现象,即用训练集预测结果很好,用测试集预测就糟糕很多。

2. K近邻算法

  • k近邻法(k-nearest neighbor, k-NN)是一种基本分类与回归方法。

  • 工作原理:存在一个样本数据集合,也称作为训练样本集,并且样本集中每个数据都存在标签。输入没有标签的新数据后,将新的数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,通常k是不大于20的整数。最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类(对于连续型变量将k个最近的样本均值作为最后的预测结果。)。

  • k-近邻算法步骤如下:

    • 计算已知类别数据集中的点与当前点之间的距离(距离度量,使用欧氏距离即可);
    • 按照距离递增次序排序;
    • 选取与当前点距离最小的k个点;
    • 确定前k个点所在类别的出现频率;
    • 返回前k个点所出现频率最高的类别作为当前点的预测分类。

优点

  • 简单好用,容易理解,精度高,理论成熟,既可以用来做分类也可以用来做回归;
  • 可用于数值型数据和离散型数据;
  • 训练时间复杂度为O(n);无数据输入假定;
  • 对异常值不敏感。

缺点:

  • 计算复杂性高;空间复杂性高;
  • 样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少);
  • 一般数值很大的时候不用这个,计算量太大。但是单个样本又不能太少,否则容易发生误分。
  • 最大的缺点是无法给出数据的内在含义。

3. 决策树

基本原理

  • 决策树(decision tree)是一种基本的分类与回归方法。

  • 把决策树可以看成是一个if-then规则的集合,将决策树转换成if-then规则的过程是这样的:

    • 由决策树的根结点(root node)到叶结点(leaf node)的每一条路径构建一条规则;
    • 路径上内部结点的特征对应着规则的条件,而叶结点的类对应着规则的结论。
    • 决策树的路径或其对应的if-then规则集合具有一个重要的性质:互斥并且完备。即每一个实例都被一条路径或一条规则所覆盖,而且只被一条路径或一条规则所覆盖(这里所覆盖是指实例的特征与路径上的特征一致或实例满足规则的条件)。
  • 决策树学习的目标:根据给定的训练数据集构建一个决策树模型,使它能够对实例进行正确的分类。

  • 决策树学习的本质:从训练集中归纳出一组分类规则,或者说是由训练数据集估计条件概率模型。–

  • 决策树学习的损失函数:正则化的极大似然函数

  • 决策树学习的测试:最小化损失函数

  • 决策树学习的目标:在损失函数的意义下,选择最优决策树的问题。

决策树构建过程可以概括为3个步骤:特征选择、决策树的生成和决策树的修剪

  • 特征选择。特征选择的目的是选取能够对训练集分类的特征。特征选择的关键是准则:信息增益、信息增益比、Gini 指数;

  • 决策树的生成。通常是利用信息增益最大、信息增益比最大、Gini 指数最小作为特征选择的准则。从根节点开始,递归的生成决策树。相当于是不断选取局部最优特征,或将训练集分割为基本能够正确分类的子集;

  • 决策树的剪枝。决策树的剪枝是为了防止树的过拟合,增强其泛化能力。包括预剪枝和后剪枝。

特征选择

  • 特征选择在于选取对训练数据具有分类能力的特征。这样可以提高决策树学习的效率,如果利用一个特征进行分类的结果与随机分类的结果没有很大差别,则称这个特征是没有分类能力的。经验上扔掉这样的特征对决策树学习的精度影响不大。通常特征选择的标准是信息增益(information gain)或信息增益比

信息增益

  • 定义:以某特征划分数据集前后的熵的差值。
  • 知道如何计算信息增益,我们就可以计算每个特征值划分数据集获得的信息增益,获得信息增益最高的特征就是最好的选择。
  • 熵定义为信息的期望值。在信息论与概率统计中,熵是表示随机变量不确定性的度量。
  • 当熵中的概率由数据估计(特别是最大似然估计)得到时,所对应的熵称为经验熵(empirical entropy)。
  • 条件熵H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性,随机变量X给定的条件下随机变量Y的条件熵H(Y|X),定义为X给定条件下Y的条件概率分布的熵对X的数学期望。
  • 当条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的条件熵称为条件经验熵(empirical conditional entropy)
  • 信息增益是相对于特征而言的。所以,特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差。
  • 设特征A有n个不同的取值{a1,a2,···,an},根据特征A的取值将D划分为n个子集{D1,D2,···,Dn},|Di|为Di的样本个数。记子集Di中属于Ck的样本的集合为Dik,即Dik = Di ∩ Ck,|Dik|为Dik的样本个数。于是经验条件熵的公式可以写为:

决策树的构造

决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得各个子数据集有一个最好的分类的过程。这一过程对应着对特征空间的划分,也对应着决策树的构建。

1)开始:构建根节点,将所有训练数据都放在根节点,选择一个最优特征,按着这一特征将训练数据集分割成子集,使得各个子集有一个在当前条件下最好的分类。

2) 如果这些子集已经能够被基本正确分类,那么构建叶节点,并将这些子集分到所对应的叶节点去。

3)如果还有子集不能够被正确的分类,那么就对这些子集选择新的最优特征,继续对其进行分割,构建相应的节点,如果递归进行,直至所有训练数据子集被基本正确的分类,或者没有合适的特征为止。

4)每个子集都被分到叶节点上,即都有了明确的类,这样就生成了一颗决策树。

构建决策树的算法有很多,比如C4.5、ID3和CART.

ID3算法

ID3算法的核心是在决策树各个结点上对应信息增益准则选择特征,递归地构建决策树。

具体方法是:

1)从根结点(root node)开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征。

2)由该特征的不同取值建立子节点,再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止;

3)最后得到一个决策树。

ID3相当于用极大似然法进行概率模型的选择

C4.5算法

与ID3算法相似,但是做了改进,将信息增益比作为选择特征的标准。

信息增益有时会倾向于有更多取值范围的那个特征(如,是否有工作的取值范围为“是”or“否”;信贷情况的取值范围为“一般”,“好”,“非常好”,此时 3 > 2,有可能会造成 “信贷情况” 的信息增益大于 “是否有工作” 这个特征 )。

CART 算法

  • CART 使用 Gini 指数作为选择特征的准则。

  • CART 与 ID3,C4.5 不同之处在于 CART 生成的树必须是二叉树。也就是说,无论是回归还是分类问题,无论特征是离散的还是连续的,无论属性取值有多个还是两个,内部节点只能根据属性值进行二分。

  • CART 的全称是分类与回归树。从这个名字中就应该知道,CART 既可以用于分类问题,也可以用于回归问题。

  • 回归树中,使用平方误差最小化准则来选择特征并进行划分。每一个叶子节点给出的预测值,是划分到该叶子节点的所有样本目标值的均值,这样只是在给定划分的情况下最小化了平方误差。

  • 要确定最优化分,还需要遍历所有属性,以及其所有的取值来分别尝试划分并计算在此种划分情况下的最小平方误差,选取最小的作为此次划分的依据。由于回归树生成使用平方误差最小化准则,所以又叫做最小二乘回归树。

  • 分类树中,使用 Gini 指数最小化准则来选择特征并进行划分;

  • Gini 指数表示集合的不确定性,或者是不纯度。基尼指数越大,集合不确定性越高,不纯度也越大。这一点和熵类似。另一种理解基尼指数的思路是,基尼指数是为了最小化误分类的概率。

Gini 指数 vs 熵

这两个都可以表示数据的不确定性,不纯度。区别:

  • Gini 指数的计算不需要对数运算,更加高效;
  • Gini 指数更偏向于连续属性,熵更偏向于离散属性。

决策树的剪枝

  • 决策树生成算法递归的产生决策树,直到不能继续下去为止,这样产生的树往往对训练数据的分类很准确,但对未知测试数据的分类没有那么精确,即会出现过拟合现象。过拟合产生的原因在于在学习时过多的考虑如何提高对训练数据的正确分类,从而构建出过于复杂的决策树,解决方法是考虑决策树的复杂度,对已经生成的树进行简化。

  • 剪枝(pruning):从已经生成的树上裁掉一些子树或叶节点,并将其根节点或父节点作为新的叶子节点,从而简化分类树模型。

  • 实现方式:极小化决策树整体的损失函数或代价函数来实现。

  • 决策树的生成只是考虑通过提高信息增益对训练数据进行更好的拟合,而决策树剪枝通过优化损失函数还考虑了减小模型复杂度。

决策树的优缺点

优点:

  • 速度快: 计算量相对较小, 且容易转化成分类规则. 只要沿着树根向下一直走到叶, 沿途的分裂条件就能够唯一确定一条分类的谓词.

  • 准确性高: 挖掘出来的分类规则准确性高, 便于理解, 决策树可以清晰的显示哪些字段比较重要, 即可以生成可以理解的规则.

  • 可以处理连续和种类字段

  • 不需要任何领域知识和参数假设

  • 适合高维数据

缺点:

  • 对于各类别样本数量不一致的数据, 信息增益偏向于那些更多数值的特征

  • 容易过拟合

  • 忽略属性之间的相关性。

4. 朴素贝叶斯法

  • 朴素贝叶斯(naive Bayes)算法是基于贝叶斯定理与特征条件独立假设的分类方法,对于给定的训练数据集,首先基于特征条件独立假设学习输入/输出的联合概率分布,然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y,朴素贝叶斯法实现简单,学习与预测的效率都很高,是一种常见的方法。

  • 该分类器的实现思想非常简单,即通过已知类别的训练数据集,计算样本的先验概率,然后利用贝叶斯概率公式测算未知类别样本属于某个类别的后验概率,最终以最大后验概率所对应的类别作为样本的预测值。

  • 朴素贝叶斯(naive Bayes)算法是有监督的学习算法,解决的是分类问题,如客户是否流失、是否值得投资、信用等级评定等多分类问题。该算法的优点在于简单易懂、学习效率高、在某些领域的分类问题中能够与决策树、神经网络相媲美。但由于该算法以自变量之间的独立(条件特征独立)性和连续变量的正态性假设为前提,就会导致算法精度在某种程度上受影响。

贝叶斯推断

对条件概率进行变形,可以得到如下形式:

我们把P(A)称为”先验概率”(Prior probability),即在B事件发生之前,我们对A事件概率的一个判断。

P(A|B)称为”后验概率”(Posterior probability),即在B事件发生之后,我们对A事件概率的重新评估。

P(B|A)/P(B)称为”可能性函数”(Likelyhood),这是一个调整因子,使得预估概率更接近真实概率。

所以,条件概率可以理解成下面的式子:
后验概率 = 先验概率 ∗ 调整因子 后验概率=先验概率∗调整因子 后验概率=先验概率调整因子

这就是贝叶斯推断的含义:我们先预估一个”先验概率”,然后加入实验结果,看这个实验到底是增强还是削弱了”先验概率”,由此得到更接近事实的”后验概率”。

在这里,如果”可能性函数”P(B|A)/P(B)>1,意味着”先验概率”被增强,事件A的发生的可能性变大;如果”可能性函数”=1,意味着B事件无助于判断事件A的可能性;如果”可能性函数”<1,意味着”先验概率”被削弱,事件A的可能性变小。

朴素贝叶斯

“朴素”的解释:假设各个特征之间相互独立(在贝叶斯分类器上做了简化)

朴素贝叶斯的基础假设:

  • 每个特征相互独立;
  • 每个特征的权重(或重要性)都相等,即对结果的影响程度都相同。

分母对于所有类别为常数,我们只要将分子最大化即可。

朴素贝叶斯的工作流程是怎样的?

对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。
在这里插入图片描述

朴素贝叶斯优缺点

朴素贝叶斯推断的一些优点:

  • 生成式模型,通过计算概率来进行分类,可以用来处理多分类问题。
  • 对小规模的数据表现很好,适合多分类任务,适合增量式训练,算法也比较简单。

朴素贝叶斯推断的一些缺点:

  • 对输入数据的表达形式很敏感。
  • 由于朴素贝叶斯的“朴素”特点,所以会带来一些准确率上的损失。
  • 需要计算先验概率,分类决策存在错误率。

朴素贝叶斯改进——拉普拉斯平滑

  • 零概率问题

    造成原因:

    利用贝叶斯分类器对文档进行分类时,要计算多个概率的乘积以获得文档属于某个类别的概率,即计算p(w0|A)p(w1|A)p(w2|A),如果其中有一个为0,则最后的结果也为0。

    解决方法:

    为了降低这种影响,可以将所有词的出现次数初始化为1,并将分母初始化为2,这种做法称为“拉普拉斯平滑”,也称“加1平滑”,是比较常用的平滑方法,为了解决0概率问题。

  • 下溢出

    造成的原因:

    是太多很小的数相乘,越乘越小,就造成了下溢出的问题。在相应小数位置进行四舍五入,计算结果可能就变成0了。

    解决方法:

    对乘积结果取自然对数,通过求对数可以避免下溢出或者浮点数舍入导致的错误,同时,采用自然对数进行处理不会有任何损失。

5. Logistic回归

  • Logistic回归用于二分类问题。

  • Logistic回归它利用的是Sigmoid函数阈值在[0,1]这个特性。

  • Logistic回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。

  • Logistic本质上是一个基于条件概率的判别模型(Discriminative Model)。

如何实现Logistic回归分类器:

使用Logistic回归方法所需做的是把测试集上每个特征向量乘以最优化方法得来的回归系数,再将乘积结果求和,最后输入到Sigmoid函数中即可。如果对应的Sigmoid值大于0.5就预测类别标签为1,否则为0。

基于最优化方法的最佳回归系数确定

假设Sigmoid函数的输入记为 z,由下面的公式得出:

z = w 0 x 0 + w 1 x 1 + w 2 x 2 + . . . + w n x n z=w_0x_0+w_1x_1+w_2x_2+...+w_nx_n z=w0x0+w1x1+w2x2+...+wnxn
​如果采用向量的写法,上述公式可以写成 z = w T x z=w^Tx z=wTx,它表示将这两个数值向量对应元素相乘然后全部加起来即得到z值,其中的向量 x是分类器的输入数据,向量 w也就是我们要找到的最佳参数(系数),从而使得分类器尽可能的精确,为了寻找该最佳参数,一般使用梯度下降法(上升法)。

梯度上升算法

  • 梯度上升即梯度下降,关键在于是求最大值还是最小值。
  • 要找到某函数的最大值,最好的方法是沿着该函数的梯度方向探寻。
  • 梯度算子总是指向函数值增长最快的方向,移动量的大小称为步长,记作 α \alpha α,用向量来表示的话,梯度算法的迭代公式如下:

w : = w + α ∇ w f ( w ) w:=w+\alpha \nabla _wf(w) w:=w+αwf(w)

该公式一直被迭代执行,直到达到某个停止条件为止,比如迭代次数达到某个指定值或算法达到某个可以允许的误差范围。

随机梯度上升算法

假设,我们使用的数据集一共有100个样本。那么,dataMatrix就是一个1003的矩阵。每次计算h的时候,都要计算dataMatrixweights这个矩阵乘法运算,要进行1003次乘法运算和1002次加法运算。同理,更新回归系数(最优参数)weights时,也需要用到整个数据集,要进行矩阵乘法运算。总而言之,该方法处理100个左右的数据集时尚可,但如果有数十亿样本和成千上万的特征,那么该方法的计算复杂度就太高了。因此,需要对算法进行改进,我们每次更新回归系数(最优参数)的时候,能不能不用所有样本呢?一次只用一个样本点去更新回归系数(最优参数)?这样就可以有效减少计算量了,这种方法就叫做随机梯度上升算法

使用两个不同算法的场合:

  • 数据集较小时,采用梯度上升算法
  • 数据集较大时,采用随机梯度上升算法

Logistic loss

L ( y , f ( x ) ) = log ⁡ ( 1 + e − y f ( x ) ) L(y, f(x))=\log \left(1+e^{-y f(x)}\right) L(y,f(x))=log(1+eyf(x))
logistic Loss为Logistic Regression中使用的损失函数。

数据预处理:

  • 如果测试集中一条数据的特征值已经缺失,那么我们选择实数0来替换所有缺失值,因为这样做不会影响回归系数的值。sigmoid(0)=0.5,即它对结果的预测不具有任何倾向性。
  • 如果测试集中一条数据的类别标签已经缺失,那么我们将该类别数据丢弃,因为类别标签与特征不同,很难确定采用某个合适的值来替换。

Logistic算法优缺点

  • 优点:实现简单,易于理解,计算代价不高,速度快,存储资源低
  • 缺点:容易欠拟合,分类精度不高,一般只能处理两分类问题,必须借助softmax才能实现多分类问题,且前提是必须线性可分。

在这里插入图片描述

为什么逻辑回归比线性回归好

虽然逻辑回归能够用于分类,不过其本质还是线性回归。它仅在线性回归的基础上,在特征到结果的映射中加入了一层sigmoid函数(非线性)映射,即先把特征线性求和,然后使用sigmoid函数来预测。

这主要是由于线性回归在整个实数域内敏感度一致,而分类范围,需要在[0,1]之内。而逻辑回归就是一种减小预测范围,将预测值限定为[0,1]间的一种回归模型,其回归方程与回归曲线如下图所示。逻辑曲线在z=0时,十分敏感,在z>>0或z<<0处,都不敏感,将预测值限定为(0,1)。

  • LR在线性回归的实数范围输出值上施加sigmoid函数将值收敛到0~1范围, 其目标函数也因此从差平方和函数变为对数损失函数, 以提供最优化所需导数(sigmoid函数是softmax函数的二元特例, 其导数均为函数值的f*(1-f)形式)。请注意, LR往往是解决二元0/1分类问题的, 只是它和线性回归耦合太紧, 不自觉也冠了个回归的名字(马甲无处不在). 若要求多元分类,就要把sigmoid换成大名鼎鼎的softmax了。

  • 首先逻辑回归和线性回归首先都是广义的线性回归,其次经典线性模型的优化目标函数是最小二乘,而逻辑回归则是似然函数,另外线性回归在整个实数域范围内进行预测,敏感度一致,而分类范围,需要在[0,1]。逻辑回归就是一种减小预测范围,将预测值限定为[0,1]间的一种回归模型,因而对于这类问题来说,逻辑回归的鲁棒性比线性回归的要好。

  • 逻辑回归的模型本质上是一个线性回归模型,逻辑回归都是以线性回归为理论支持的。但线性回归模型无法做到sigmoid的非线性形式,sigmoid可以轻松处理0/1分类问题。

线性回归与逻辑回归的区别

线性回归与逻辑回归的区别如下描述:

(1)线性回归的样本的输出,都是连续值, y ∈ ( − ∞ , + ∞ ) y\in (-\infty ,+\infty ) y(,+),而逻辑回归中 y ∈ ( 0 , 1 ) y\in (0,1) y(0,1),只能取0和1。

(2)对于拟合函数也有本质上的差别:

​ 线性回归: f ( x ) = θ T x = θ 1 x 1 + θ 2 x 2 + . . . + θ n x n f(x)=\theta ^{T}x=\theta _{1}x _{1}+\theta _{2}x _{2}+...+\theta _{n}x _{n} f(x)=θTx=θ1x1+θ2x2+...+θnxn

​ 逻辑回归: f ( x ) = P ( y = 1 ∣ x ; θ ) = g ( θ T x ) f(x)=P(y=1|x;\theta )=g(\theta ^{T}x) f(x)=P(y=1∣x;θ)=g(θTx),其中, g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+ez1

​ 可以看出,线性回归的拟合函数,是对f(x)的输出变量y的拟合,而逻辑回归的拟合函数是对为1类样本的概率的拟合。

​ 那么,为什么要以1类样本的概率进行拟合呢,为什么可以这样拟合呢?

θ T x = 0 \theta ^{T}x=0 θTx=0就相当于是1类和0类的决策边界:

​ 当 θ T x > 0 \theta ^{T}x>0 θTx>0,则y>0.5;若 θ T x → + ∞ \theta ^{T}x\rightarrow +\infty θTx+,则 y → 1 y \rightarrow 1 y1,即y为1类;

​ 当 θ T x < 0 \theta ^{T}x<0 θTx<0,则y<0.5;若 θ T x → − ∞ \theta ^{T}x\rightarrow -\infty θTx,则 y → 0 y \rightarrow 0 y0,即y为0类;

这个时候就能看出区别,在线性回归中 θ T x \theta ^{T}x θTx为预测值的拟合函数;而在逻辑回归中 θ T x \theta ^{T}x θTx为决策边界。下表为线性回归和逻辑回归的区别。

线性回归 逻辑回归
目的 预测 分类
y ( i ) y^{(i)} y(i) 未知 (0,1)
函数 拟合函数 预测函数
参数计算方式 最小二乘法 极大似然估计

下面具体解释一下:

  1. 拟合函数和预测函数什么关系呢?简单来说就是将拟合函数做了一个逻辑函数的转换,转换后使得 y ( i ) ∈ ( 0 , 1 ) y^{(i)} \in (0,1) y(i)(0,1);
  2. 最小二乘和最大似然估计可以相互替代吗?回答当然是不行了。我们来看看两者依仗的原理:最大似然估计是计算使得数据出现的可能性最大的参数,依仗的自然是Probability。而最小二乘是计算误差损失。

6. SVM

SVM的定义

一种二分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,即支持向量机的学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。

SVM的核心思想

寻找一个超平面,使其到数据点的间隔最大。原因主要是这样的超平面分类结果较为稳健(robust),对于最难分的数据点(即离超平面最近的点)也能有足够大的确信度将它们分开,因而泛化到新数据点效果较好。

一个最优化问题通常有两个最基本的因素:
1)目标函数,也就是你希望什么东西的什么指标达到最好;
2)优化对象,你期望通过改变哪些因素来使你的目标函数达到最优。
在线性SVM算法中,目标函数显然就是那个“分类间隔”,而优化对象则是决策面。所以要对SVM问题进行数学建模,首先要对上述两个对象(“分类间隔”和“决策面”)进行数学描述。

函数间隔

在超平面 w T x + b = 0 w^Tx+b=0 wTx+b=0确定的情况下, ∣ w T x ∗ + b ∣ |w^Tx^*+b| wTx+b能够代表点x*距离超平面的远近,易知:当 w T x ∗ + b > 0 w^Tx^*+b>0 wTx+b>0时,表示x*在超平面的一侧(正类,类标为1),而当 w T x ∗ + b < 0 w^Tx^*+b<0 wTx+b<0时,则表示x*在超平面的另外一侧(负类,类别为-1),因此 ( w T x ∗ + b ) y ∗ (w^Tx^*+b)y^* (wTx+b)y 的正负性恰能表示数据点x*是否被分类正确。于是便引出了函数间隔的定义(functional margin):

3.png

而超平面(w,b)关于所有样本点(Xi,Yi)的函数间隔最小值则为超平面在训练数据集T上的函数间隔:
4.png

可以看出:这样定义的函数间隔在处理SVM上会有问题,当超平面的两个参数w和b同比例改变时,函数间隔也会跟着改变,但是实际上超平面还是原来的超平面,并没有变化。例如: w 1 x 1 + w 2 x 2 + w 3 x 3 + b = 0 w_1x_1+w_2x_2+w_3x_3+b=0 w1x1+w2x2+w3x3+b=0其实等价于 2 w 1 x 1 + 2 w 2 x 2 + 2 w 3 x 3 + 2 b = 0 2w_1x_1+2w_2x_2+2w_3x_3+2b=0 2w1x1+2w2x2+2w3x3+2b=0,但计算的函数间隔却翻了一倍。从而引出了能真正度量点到超平面距离的概念–几何间隔(geometrical margin)。

几何间隔

参考博客:https://blog.csdn.net/v_july_v/article/details/7624837
在这里插入图片描述

几何间隔代表的则是数据点到超平面的真实距离,对于超平面 w T x + b = 0 w^Tx+b=0 wTx+b=0 w w w代表的是该超平面的法向量,设 x 0 x_0 x0为超平面外一点x在法向量w方向上的投影点,x与超平面的距离为 γ \gamma γ,则有 x 0 = x − γ w ∣ ∣ w ∣ ∣ x_0=x-\gamma\frac{w}{||w||} x0=xγ∣∣w∣∣w,又 x 0 x_0 x0在超平面上,即 w T x 0 = − b w^Tx_0=-b wTx0=b,两边同乘以 w T w^T wT,代入即可得:

5.png

为了得到 γ \gamma γ的绝对值,令 γ \gamma γ乘上其对应的类别y,即可得到几何间隔的定义

6.png

从上述函数间隔与几何间隔的定义可以看出:实质上函数间隔 y ( w T x + b ) = y f ( x ) y(w^Tx+b) = yf(x) y(wTx+b)=yf(x)就是 ∣ w T x + b ∣ |w^Tx+b| wTx+b,而几何间隔就是点到超平面的距离

可以发现在样本集线性可分的 情况下,对于某一个成功分类的超平面来说,每个样本点到这个超平面的几 何间隔就是函数间隔再除以 ∣ ∣ ω ∣ ∣ ||\omega|| ∣∣ω∣∣

最大间隔与支持向量

对一个数据点进行分类,当超平面离数据点的“间隔”越大,分类的确信度(confidence)也越大。所以,为了使得分类的确信度尽量高,需要让所选择的超平面能够最大化这个“间隔”值。这个间隔就是下图中的Gap的一半。

通过前面的分析可知:函数间隔不适合用来最大化间隔,因此这里我们要找的最大间隔指的是几何间隔,几何间隔为距离超平面 w ⊤ x + b = 0 \boldsymbol{w}^{\top} \boldsymbol{x}+b=0 wx+b=0 最近的样本到超平面距离的两倍,于是最大间隔分类器的目标函数定义为:

γ = 2 min ⁡ ∣ w ⊤ x + b ∣ ∥ w ∥ = 2 ∥ w ∥ \gamma=2 \min \frac{\left|\boldsymbol{w}^{\top} \boldsymbol{x}+b\right|}{\|\boldsymbol{w}\|}=\frac{2}{\|\boldsymbol{w}\|} γ=2minw wx+b =w2
从而上述目标函数转化为:
max ⁡ w , b 2 ∥ w ∥ ⟹ min ⁡ w , b 1 2 ∥ w ∥ 2  s.t.  y i ( w ⊤ x i + b ) ≥ 1 , i = 1 , 2 , … , m \begin{aligned} \max _{\boldsymbol{w}, b} & \frac{2}{\|\boldsymbol{w}\|} \Longrightarrow \min _{\boldsymbol{w}, b} \frac{1}{2}\|\boldsymbol{w}\|^2 \\ \text { s.t. } & y_i\left(\boldsymbol{w}^{\top} \boldsymbol{x}_i+b\right) \geq 1, \quad i=1,2, \ldots, m \end{aligned} w,bmax s.t. w2w,bmin21w2yi(wxi+b)1,i=1,2,,m

y ( w T x + b ) = 1 y(w^Tx+b)=1 y(wTx+b)=1的数据点,即下图中位于 w T x + b = 1 w^Tx+b=1 wTx+b=1 w T x + b = − 1 w^Tx+b=-1 wTx+b=1上的数据点,我们称之为支持向量(support vector),易知:对于所有的支持向量,它们恰好满足 y ( w T x + b ) = 1 y(w^Tx+b)=1 y(wTx+b)=1,而所有不是支持向量的点,有 y ( w T x + b ) > 1 y(w^Tx+b)>1 y(wTx+b)>1

9.png

上述属于硬间隔。

求解分类超平面方法

在这里插入图片描述
在这里插入图片描述

点到超平面的距离

如上图所示,想要求 x \boldsymbol{x} x 到超平面 w ⊤ x + b = 0 \boldsymbol{w}^{\top} \boldsymbol{x}+\boldsymbol{b}=0 wx+b=0 的距离 d d d 。设 x 0 \boldsymbol{x}_0 x0 x 1 \boldsymbol{x}_1 x1 是超平面上的两个点,则:
{ w ⊤ x 0 + b = 0 w ⊤ x 1 + b = 0 ⟹ w ⊤ ( x 0 − x 1 ) = 0 \left\{\begin{array}{l} \boldsymbol{w}^{\top} \boldsymbol{x}_0+b=0 \\ \boldsymbol{w}^{\top} \boldsymbol{x}_1+b=0 \end{array} \quad \Longrightarrow \quad \boldsymbol{w}^{\top}\left(\boldsymbol{x}_0-\boldsymbol{x}_1\right)=0\right. { wx0+b=0wx1+b=0w(x0x1)=0
w \boldsymbol{w} w 垂直于超平面。
证明1:
d = ∥ x − x 1 ∥ cos ⁡ θ = ∥ x − x 1 ∥ ∣ w ⊤ ( x − x 1 ) ∣ ∥ w ∥ ⋅ ∥ x − x 1 ∥ = ∣ w ⊤ x − w ⊤ x 1 ∣ ∥ w ∥ = ∣ w ⊤ x + b ∣ ∥ w ∥ d=\left\|\boldsymbol{x}-\boldsymbol{x}_1\right\| \cos \theta=\left\|\boldsymbol{x}-\boldsymbol{x}_1\right\| \frac{\left|\boldsymbol{w}^{\top}\left(\boldsymbol{x}-\boldsymbol{x}_1\right)\right|}{\|\boldsymbol{w}\| \cdot\left\|\boldsymbol{x}-\boldsymbol{x}_1\right\|}=\frac{\left|\boldsymbol{w}^{\top} \boldsymbol{x}-\boldsymbol{w}^{\top} \boldsymbol{x}_1\right|}{\|\boldsymbol{w}\|}=\frac{\left|\boldsymbol{w}^{\top} \boldsymbol{x}+b\right|}{\|\boldsymbol{w}\|} d=xx1cosθ=xx1wxx1 w(xx1) =w wxwx1 =w wx+b
证明2: 由于 w ∥ w ∥ \frac{w}{\|\boldsymbol{w}\|} ww 为单位向量:
w ⊤ x 0 + b = w ⊤ ( x − d ⋅ w ∥ w ∥ ) + b = 0 ⟹ d = ∣ w ⊤ x + b ∣ ∥ w ∥ \boldsymbol{w}^{\top} \boldsymbol{x}_0+b=\boldsymbol{w}^{\top}\left(\boldsymbol{x}-d \cdot \frac{\boldsymbol{w}}{\|\boldsymbol{w}\|}\right)+b=0 \quad \Longrightarrow \quad d=\frac{\left|\boldsymbol{w}^{\top} \boldsymbol{x}+b\right|}{\|\boldsymbol{w}\|} wx0+b=w(xdww)+b=0d=w wx+b

非线性和核函数

当分类问题是非线性的时候,可以使用非线性支持向量机,其主要特点是利用核技巧

一般地,解决线性不可分问题时,常常采用映射的方式,将低维原始空间映射到高维特征空间,使得数据集在高维空间中变得线性可分,从而再使用线性学习器分类。

核函数好处

核函数的主要作用是将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。

核函数是如何将原始空间映射到高维的特征空间的? 举个例子:

假设做一个2维到 3 维的映射, Φ : R 2 ⟶ R 3 \Phi: \mathbb{R}^2 \longrightarrow \mathbb{R}^3 Φ:R2R3
ϕ ( x ) = ϕ ( x 1 x 2 ) = ( x 1 2 2 x 1 x 2 x 2 2 ) \phi(\boldsymbol{x})=\phi\left(\begin{array}{l} x_1 \\ x_2 \end{array}\right)=\left(\begin{array}{c} x_1^2 \\ \sqrt{2} x_1 x_2 \\ x_2^2 \end{array}\right) ϕ(x)=ϕ(x1x2)= x122 x1x2x22
ϕ ( a ) \phi(\boldsymbol{a}) ϕ(a) ϕ ( b ) \phi(\boldsymbol{b}) ϕ(b) 的内积:
ϕ ( a ) T ϕ ( b ) = ( a 1 2 2 a 1 a 2 a 2 2 ) T ⋅ ( b 1 2 2 b 1 b 2 b 2 2 ) = a 1 2 b 1 2 + 2 a 1 b 1 a 2 b 2 + a 2 2 b 2 2 = ( a 1 b 1 + a 2 b 2 ) 2 = ( ( a 1 a 1 ) T ( b 1 b 1 ) ) 2 = ( a T b ) 2 \begin{aligned} \phi(\mathbf{a})^T \phi(\mathbf{b}) &=\left(\begin{array}{c} a_1^2 \\ \sqrt{2} a_1 a_2 \\ a_2^2 \end{array}\right)^T \cdot\left(\begin{array}{c} b_1^2 \\ \sqrt{2} b_1 b_2 \\ b_2^2 \end{array}\right)=a_1^2 b_1^2+2 a_1 b_1 a_2 b_2+a_2^2 b_2^2 \\ &=\left(a_1 b_1+a_2 b_2\right)^2=\left(\left(\begin{array}{c} a_1 \\ a_1 \end{array}\right)^T\left(\begin{array}{l} b_1 \\ b_1 \end{array}\right)\right)^2=\left(\mathbf{a}^T \mathbf{b}\right)^2 \end{aligned} ϕ(a)Tϕ(b)= a122 a1a2a22 T b122 b1b2b22 =a12b12+2a1b1a2b2+a22b22=(a1b1+a2b2)2=((a1a1)T(b1b1))2=(aTb)2
可以看出转换后向量的内积等于原向量内积的平方,即 ϕ ( a ) T ϕ ( b ) = ( a T b ) 2 \phi(\mathbf{a})^T \phi(\mathbf{b})=\left(\mathbf{a}^T \mathbf{b}\right)^2 ϕ(a)Tϕ(b)=(aTb)2
函数 κ ( a , b ) = ( a T b ) 2 \kappa(\mathbf{a}, \mathbf{b})=\left(\mathbf{a}^T \mathbf{b}\right)^2 κ(a,b)=(aTb)2 被称为二次多项核函数,于是如果想计算高维特征空间的内积 ϕ ( a ) T ϕ ( b ) \phi(\mathbf{a})^T \phi(\mathbf{b}) ϕ(a)Tϕ(b) ,我们只需计算核函数,即原向量内积的平方 ( a T b ) 2 \left(\mathbf{a}^T \mathbf{b}\right)^2 (aTb)2 就可以了。这样做的好处有:

  • 将样本点由原始空间映射到高维空间后,有大概率使原来线性不可分的问题变为线性可分。
  • 核函数的计算是在低维特征空间计算的,它避免了在高维特征空间下计算内积的超高计算量。

在线性不可分问题中,核函数的选择成了支持向量机的最大变数,若选择了不合适的核函数,则意味着将样本映射到了一个不合适的特征空间,则极可能导致性能不佳。同时,核函数需要满足以下这个必要条件:

定理6.1表明,只要一个对称函数所对应的核矩阵半正定,它就能作为核函数使用。事实上,对于一个半正定核矩阵,总能找到一个与之对应的映射中。换言之,任何一个核函数都隐式地定义了一个称为“再生核希尔伯特空间”(Reproducing Kernel Hilbert Space,简称RKHS)的特征空间。

由于核函数的构造十分困难,通常我们都是从一些常用的核函数中选择,下面列出了几种常用的核函数:
在这里插入图片描述
由于 RBF 核是目前最主流的核函数,所以在这里以其举例介绍:

RBF核

RBF 核函数全称径向基函数 (Radial Basis Function),其表达式 κ ( x i , x j ) = exp ⁡ ( − ∥ x i − x j ∥ 2 2 σ 2 ) \kappa\left(\boldsymbol{x}_i, \boldsymbol{x}_j\right)=\exp \left(-\frac{\left\|\boldsymbol{x}_i-\boldsymbol{x}_j\right\|^2}{2 \sigma^2}\right) κ(xi,xj)=exp(2σ2xixj2) 亦可写为 κ ( x i , x j ) = exp ⁡ ( − γ ∥ x i − x j ∥ 2 ) \kappa\left(\boldsymbol{x}_i, \boldsymbol{x}_j\right)=\exp \left(-\gamma\left\|\boldsymbol{x}_i-\boldsymbol{x}_j\right\|^2\right) κ(xi,xj)=exp(γxixj2) ,范围为 ( 0 , 1 ] (0,1] (0,1] ,其中 γ = 1 2 σ 2 \gamma=\frac{1}{2 \sigma^2} γ=2σ21

RBF 核可理解为两个样本点的相似程度,若两点 ( x i , x j ) \left(\boldsymbol{x}_i, \boldsymbol{x}_j\right) (xi,xj) 的相似程度很大,则距离 ∥ x i − x j ∥ 2 \left\|\boldsymbol{x}_i-\boldsymbol{x}_j\right\|^2 xixj2 越小,使得 exp ⁡ ( − γ ∥ x i − x j ∥ 2 ) \exp \left(-\gamma\left\|\boldsymbol{x}_i-\boldsymbol{x}_j\right\|^2\right) exp(γxixj2) 越大,这意味着高斯核具有 “局部(local) " 特征, 决策边界会变得较为扭曲,容易过拟合,因为只取决于较少的几个样本点。相反, γ \gamma γ 越小,大量的点被判为近似,在模型中起了作用,因而导致模型变得简单,容易欠拟合。

RBF 核还有个吸引人的特性,那就是可以从原始空间映射到无限维特征空间,下面举例说明式如何做到的:设 σ = 1 2 \sigma=\sqrt{\frac{1}{2}} σ=21 ,则 RBF 核的转换如下
κ ( x i , x j ) = exp ⁡ ( − ∥ x i − x j ∥ 2 ) ——1 = exp ⁡ ( − ∥ x i ∥ 2 ) exp ⁡ ( − ∥ x j ∥ 2 ) exp ⁡ ( 2 ∥ x i ∥ ∥ x j ∥ ) ——2 = exp ⁡ ( − ∥ x i ∥ 2 ) exp ⁡ ( − ∥ x j ∥ 2 ) ( ∑ n = 0 ∞ ( 2 ∥ x i ∥ ∥ x j ∥ ) n n ! ) ——3 = ∑ n = 0 ∞ ( exp ⁡ ( − ∥ x i ∥ 2 ) exp ⁡ ( − ∥ x j ∥ 2 ) 2 n n ! 2 n n ! ∥ x i ∥ n ∥ x j ∥ n ) ——4 = ϕ ( x i ) ⊤ ϕ ( x j ) \begin{aligned} \kappa\left(\boldsymbol{x}_i, \boldsymbol{x}_j\right) &=\exp \left(-\left\|\boldsymbol{x}_i-\boldsymbol{x}_j\right\|^2\right) \quad\quad\quad\text{——1}\\ &=\exp \left(-\left\|\boldsymbol{x}_i\right\|^2\right) \exp \left(-\left\|\boldsymbol{x}_j\right\|^2\right) \exp \left(2\left\|\boldsymbol{x}_i\right\|\left\|\boldsymbol{x}_j\right\|\right) \quad\quad\quad\text{——2}\\ &=\exp \left(-\left\|\boldsymbol{x}_i\right\|^2\right) \exp \left(-\left\|\boldsymbol{x}_j\right\|^2\right)\left(\sum_{n=0}^{\infty} \frac{\left(2\left\|\boldsymbol{x}_i\right\|\left\|\boldsymbol{x}_j\right\|\right)^n}{n !}\right) \quad\quad\quad\text{——3}\\ &=\sum_{n=0}^{\infty}\left(\exp \left(-\left\|\boldsymbol{x}_i\right\|^2\right) \exp \left(-\left\|\boldsymbol{x}_j\right\|^2\right) \sqrt{\frac{2^n}{n !}} \sqrt{\frac{2^n}{n !}}\left\|\boldsymbol{x}_i\right\|^n\left\|\boldsymbol{x}_j\right\|^n\right) \quad\quad\quad\text{——4}\\ &=\phi\left(\boldsymbol{x}_i\right)^{\top} \phi\left(\boldsymbol{x}_j\right) \end{aligned} κ(xi,xj)=exp(xixj2)——1=exp(xi2)exp(xj2)exp(2xixj)——2=exp(xi2)exp(xj2)(n=0n!(2xixj)n)——3=n=0(exp(xi2)exp(xj2)n!2n n!2n xinxjn)——4=ϕ(xi)ϕ(xj)
因而映射的无限维空间为 ϕ ( x ) = exp ⁡ ( − ∥ x ∥ 2 ) [ 1 2 1 ! x 2 2 2 ! x 2 ⋮ x ∞ ∞ ! x ∞ ] \phi(\boldsymbol{x})=\exp \left(-\|\boldsymbol{x}\|^2\right)\left[\begin{array}{c}1 \\ \sqrt{\frac{2}{1 !}} x \\ \sqrt{\frac{2^2}{2 !}} x^2 \\ \vdots \\ \sqrt{\frac{x^{\infty}}{\infty !}} x^{\infty}\end{array}\right] ϕ(x)=exp(x2) 11!2 x2!22 x2!x x

上面的 (2) 式到 (3) 式使用了 e x e^x ex 的泰勒展开,泰勒公式的简单解释就是用多项式函数去逼近原函数,因为用多项式函数往往求解更加容易,而 多项式中各项的系数则为原函数在某一点的 n n n 阶导数值除以n阶乘。
已知函数 f ( x ) f(x) f(x) x = x 0 x=x_0 x=x0 n n n 阶可导,那么:
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 2 + ⋯ + f ( n ) ( x 0 ) n ! ( x − x 0 ) n = ∑ n = 0 ∞ f ( n ) x 0 n ! ( x − x 0 ) n \begin{aligned} f(x) &=f\left(x_0\right)+f^{\prime}\left(x_0\right)\left(x-x_0\right)+\frac{f^{\prime \prime}\left(x_0\right)}{2 !}\left(x-x_0\right)^2+\cdots+\frac{f^{(n)}\left(x_0\right)}{n !}\left(x-x_0\right)^n \\ &=\sum_{n=0}^{\infty} \frac{f^{(n)} x_0}{n !}\left(x-x_0\right)^n \end{aligned} f(x)=f(x0)+f(x0)(xx0)+2!f′′(x0)(xx0)2++n!f(n)(x0)(xx0)n=n=0n!f(n)x0(xx0)n

非线性支持向量分类机

接下来对问题作正式的定义:数据在原始特征空间 R d \mathbb{R}^d Rd 不是线性可分的,则希望通过一个映射 Φ : R d ⟶ R d ~ \Phi: \mathbb{R}^d \longrightarrow \mathbb{R}^{\tilde{d}} Φ:RdRd~ ,使得数据在新的特征空间 R d ~ \mathbb{R}^{\tilde{d}} Rd~ 中线性可分,则软间隔 svm 基本型变为:
min ⁡ w , b , ξ 1 2 ∥ w 2 + C ∑ i = 1 m ξ i  s.t.  y i ( w ⊤ ϕ ( x i ) + b ) ≥ 1 − ξ i , i = 1 , 2 , … , m ξ i ≥ 0 , i = 1 , 2 , … m \begin{array}{ll} \min _{\boldsymbol{w}, b, \boldsymbol{\xi}} & \frac{1}{2} \| \boldsymbol{w}^2+C \sum_{i=1}^m \xi_i \\ \text { s.t. } & y_i\left(\boldsymbol{w}^{\top} \phi\left(\boldsymbol{x}_i\right)+b\right) \geq 1-\xi_i, \quad i=1,2, \ldots, m \\ & \xi_i \geq 0, \quad i=1,2, \ldots m \end{array} minw,b,ξ s.t. 21w2+Ci=1mξiyi(wϕ(xi)+b)1ξi,i=1,2,,mξi0,i=1,2,m
找到一个核函数 K ( x i , x j ) = ϕ ( x i ) ⊤ ϕ ( x j ) \mathcal{K}\left(\boldsymbol{x}_i, \boldsymbol{x}_j\right)=\phi\left(\boldsymbol{x}_i\right)^{\top} \phi\left(\boldsymbol{x}_j\right) K(xi,xj)=ϕ(xi)ϕ(xj) ,则相应的对偶型转化为核函数型:

max ⁡ α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ i = 1 m α i α j y i y j ϕ ( x i ) ⊤ ϕ ( x j )  s.t.  ∑ i = 1 m α i y i = 0 0 ⩽ α i ⩽ C , i = 1 , 2 , … m \begin{aligned} \max _\alpha & \sum_{i=1}^m \alpha_i-\frac{1}{2} \sum_{i=1}^m \sum_{i=1}^m \alpha_i \alpha_j y_i y_j \phi\left(\boldsymbol{x}_i\right)^{\top} \phi\left(\boldsymbol{x}_j\right) \\ \text { s.t. } & \sum_{i=1}^m \alpha_i y_i=0 \\ & 0 \leqslant \alpha_i \leqslant C, \quad i=1,2, \ldots m \end{aligned} αmax s.t. i=1mαi21i=1mi=1mαiαjyiyjϕ(xi)ϕ(xj)i=1mαiyi=00αiC,i=1,2,m
⇓ \Downarrow

max ⁡ α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ i = 1 m α i α j y i y j κ ( x i , x j )  s.t.  ∑ i = 1 m α i y i = 0 0 ⩽ α i ⩽ C , i = 1 , 2 , … m \begin{aligned} \max _\alpha & \sum_{i=1}^m \alpha_i-\frac{1}{2} \sum_{i=1}^m \sum_{i=1}^m \alpha_i \alpha_j y_i y_j \kappa\left(\boldsymbol{x}_i, \boldsymbol{x}_j\right) \\ \text { s.t. } & \sum_{i=1}^m \alpha_i y_i=0 \\ & 0 \leqslant \alpha_i \leqslant C, \quad i=1,2, \ldots m \end{aligned} αmax s.t. i=1mαi21i=1mi=1mαiαjyiyjκ(xi,xj)i=1mαiyi=00αiC,i=1,2,m

这样使得计算复杂度由 O ( d ~ ) \mathcal{O}(\tilde{d}) O(d~) 降为 O ( d ) \mathcal{O}(d) O(d) 。求解后的分离超平面为:
f ( x ) = w ⊤ ϕ ( x ) + b = ∑ i ∈ S V α i y i ϕ ( x i ) ϕ ( x ) + b = ∑ i ∈ S V α i y i κ ( x i , x ) + b \begin{aligned} f(\boldsymbol{x}) &=\boldsymbol{w}^{\top} \phi(\boldsymbol{x})+b \\ &=\sum_{i \in S V} \alpha_i y_i \phi\left(\boldsymbol{x}_i\right) \phi(\boldsymbol{x})+b \\ &=\sum_{i \in S V} \alpha_i y_i \kappa\left(\boldsymbol{x}_i, \boldsymbol{x}\right)+b \end{aligned} f(x)=wϕ(x)+b=iSVαiyiϕ(xi)ϕ(x)+b=iSVαiyiκ(xi,x)+b
其中 S V S V SV 代表所有支持向量的集合。这样我们就能以较小的计算量解决非线性分类问题,甚至都不需要知道低维空间的数据是怎样映射到高维空间 的,只需要在原来的低维空间计算核函数就行了。

SVM优缺点

优点:

  • 它基于结构风险最小化原则,这样就避免了过学习问题,泛化能力强。

  • 它是一个凸优化问题,因此局部最优解一定是全局最优解的优点。

  • 泛化错误率低,分类速度快,结果易解释

  • 仅仅使用一部分样本决定超平面,内存占用少。

  • 有大量的核函数可以使用,从而可以很灵活的来解决各种非线性的分类回归问题。

缺点:

  • 对缺失数据敏感,对参数和核函数的选择敏感
  • 样本量很大时,计算复杂度高。

序列最小最优化算法(SMO算法)

https://www.cnblogs.com/massquantity/p/11419971.html

  • 支持向量机问题可以转化为求解凸二次规划问题,这样的问题具有全局最优解,并且有许多算法可以用于这个问题的求解,但是当训练样本容量很大时,这些算法往往变得非常低效,以至于无法使用

  • SM表示序列最小化(Sequential Minimal Optimizaion)。SMO 算法将原来非常大的二次规划问题分解成了一系列非常小的可解的二次规划问题。SMO 算法最诱人的地方在于,这些分解后小的二次规划问题 ,都是拥有解析解的,也就是说,求解这些小的二次规划优化问题不需要通过非常耗时的循环来得到问题的结果。由于不需要矩阵计算,使得 SMO 算法 在实际的数据集的测试中,其计算复杂度介于线性复杂度和二次复杂度之间。SMO 算法的计算复杂度和 svm 的模型也有关系,比如线性核 svm 计算速度较快。在实际测试中发现,如果训练样本是稀疏数据集,那么SMO 算法的效率会极其高。

SMO算法的基本思路是:选择两个变量 α 1 \alpha_1 α1 α 2 \alpha_2 α2 ,固定其他所有 α i ( i = 3 … m ) \alpha_i(i=3 \ldots m) αi(i=3m) ,仅针对这两个变量构建二次规划问题,这样就比原来复杂的优 化问题简化很多。由于有约束条件 ∑ i = 1 m α i y i = 0 \sum_{i=1}^m \alpha_i y_i=0 i=1mαiyi=0 ,固定了其他 α i ( i = 3 … m ) \alpha_i(i=3 \ldots m) αi(i=3m) 后,可得 α 1 y 1 + α 2 y 2 = − ∑ i = 3 m α i y i \alpha_1 y_1+\alpha_2 y_2=-\sum_{i=3}^m \alpha_i y_i α1y1+α2y2=i=3mαiyi 。所以 α 1 \alpha_1 α1 确定后, α 2 \alpha_2 α2 即可自动获得,则该小型二次规划问题中的两个变量会同时更新,接着再不断选取新的变量进行优化。

如何在每一步选择合适的 α \alpha α 进行优化? SMO 采用启发式的变量选择方法:第 1 个变量 α 1 \alpha_1 α1 ,一般选择训练样本中违反 KKT 条件最严重的样本点所 对应的 α \alpha α 。而第 2 个变量 α 2 \alpha_2 α2 则选取与 α 1 \alpha_1 α1 的样本点之间间隔最大的样本点对应的 α \alpha α ,这样二者的更新往往会给目标函数带来更大的变化。这里的 K K T \mathrm{KKT} KKT 条件具体指的是:
α i = 0 ⟺ y i f ( x i ) ≥ 1 0 < α i < C ⟺ y i f ( x i ) = 1 α i = C ⟺ y i f ( x i ) ≤ 1 \begin{array}{rlr} \alpha_i=0 & \Longleftrightarrow & y_i f\left(\boldsymbol{x}_i\right) \geq 1 \\ 0<\alpha_i<C & \Longleftrightarrow & y_i f\left(\boldsymbol{x}_i\right)=1 \\ \alpha_i=C & \Longleftrightarrow & y_i f\left(\boldsymbol{x}_i\right) \leq 1 \end{array} αi=00<αi<Cαi=Cyif(xi)1yif(xi)=1yif(xi)1
其中 f ( x i ) = w ⊤ x i + b = ∑ j = 1 m α j y j x i ⊤ x j + b f\left(\boldsymbol{x}_i\right)=\boldsymbol{w}^{\top} \boldsymbol{x}_i+b=\sum_{j=1}^m \alpha_j y_j \boldsymbol{x}_i^{\top} \boldsymbol{x}_j+b f(xi)=wxi+b=j=1mαjyjxixj+b 。还有一点就是,由于 KKT 条件过于地严格,比如 y i f ( x i ) = 1 y_i f\left(\boldsymbol{x}_i\right)=1 yif(xi)=1 ,这个条件一般很难达到,所 以在检验 KKT 条件的时候,都是在一定的误差范围 ϵ \epsilon ϵ 内检验 KKT 条件的, 即 ∣ y i f ( x i ) − 1 ∣ < ϵ \left|y_i f\left(\boldsymbol{x}_i\right)-1\right|<\epsilon yif(xi)1<ϵ

Hinge Loss 梯度下降

svm 使用的损失函数为 hinge loss(合页损失函数,对错误越大的样本施加越严重的惩罚),即为:
L ( y , f ( x ) ) = max ⁡ ( 0 , 1 − y f ( x ) ) L(y, f(x))=\max (0,1-y f(x)) L(y,f(x))=max(0,1yf(x))
min ⁡ w , b , ξ 1 2 ∥ w ∥ 2 + C ∑ i = 1 m ξ i ——1.4  s.t.  y i ( w ⊤ x i + b ) ≥ 1 − ξ i , i = 1 , 2 , … , m ——1.5 ξ i ≥ 0 , i = 1 , 2 , … m ——1.6 \begin{array}{ll} \min _{\boldsymbol{w}, b, \boldsymbol{\xi}} & \frac{1}{2}\|\boldsymbol{w}\|^2+C \sum_{i=1}^m \xi_i \quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\text{——1.4}\\ \text { s.t. } & y_i\left(\boldsymbol{w}^{\top} \boldsymbol{x}_i+b\right) \geq 1-\xi_i, \quad i=1,2, \ldots, m \quad\quad\text{——1.5}\\ & \xi_i \geq 0, \quad i=1,2, \ldots m \quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\text{——1.6} \end{array} minw,b,ξ s.t. 21w2+Ci=1mξi——1.4yi(wxi+b)1ξi,i=1,2,,m——1.5ξi0,i=1,2,m——1.6

(1.5) 式重新整理为 ξ i ⩾ 1 − y i ( w ⊤ x i + b ) \xi_i \geqslant 1-y_i\left(\boldsymbol{w}^{\top} \boldsymbol{x}_i+b\right) ξi1yi(wxi+b) 。若 1 − y i ( w ⊤ x i + b ) < 0 1-y_i\left(\boldsymbol{w}^{\top} \boldsymbol{x}_i+b\right)<0 1yi(wxi+b)<0 ,由于约束 ( 1.6 ) (1.6) (1.6) 的存在,则 ξ i ⩾ 0 \xi_i \geqslant 0 ξi0 ;若 1 − y i ( w ⊤ x i + b ) ⩾ 0 1-y_i\left(\boldsymbol{w}^{\top} \boldsymbol{x}_i+b\right) \geqslant 0 1yi(wxi+b)0 ,则依然为 ξ i ⩾ 1 − y i ( w ⊤ x i + b ) \xi_i \geqslant 1-y_i\left(\boldsymbol{w}^{\top} \boldsymbol{x}_i+b\right) ξi1yi(wxi+b) 。所以 (1.5), (1.6) 式结合起来:

ξ i ⩾ max ⁡ ( 0 , 1 − y i ( w ⊤ x i + b ) ) = max ⁡ ( 0 , 1 − y i f ( x i ) ) \xi_i \geqslant \max \left(0,1-y_i\left(\boldsymbol{w}^{\top} \boldsymbol{x}_i+b\right)\right)=\max \left(0,1-y_i f\left(x_i\right)\right) ξimax(0,1yi(wxi+b))=max(0,1yif(xi))
又由于 (1.4) 式是最小化问题,所以取 ξ i \xi_i ξi 的极小值,即令 ξ i = max ⁡ ( 0 , 1 − y f ( x ) ) \xi_i=\max (0,1-y f(x)) ξi=max(0,1yf(x)) 代入 (1.4) 式,并令 λ = 1 2 C : \lambda=\frac{1}{2 C}: λ=2C1:
min ⁡ ( C ∑ i = 1 m max ⁡ ( 0 , 1 − y i f ( x i ) ) + 1 2 ∥ w ∥ 2 ) ∝ min ⁡ ( ∑ i = 1 m max ⁡ ( 0 , 1 − y i f ( x i ) ) ⏟ hinge loss  + λ ∥ w ∥ 2 ) \min \left(C \sum_{i=1}^m \max \left(0,1-y_i f\left(x_i\right)\right)+\frac{1}{2}\|\boldsymbol{w}\|^2\right) \propto \min (\sum_{i=1}^m \underbrace{\max \left(0,1-y_i f\left(x_i\right)\right)}_{\text {hinge loss }}+\lambda\|\boldsymbol{w}\|^2) min(Ci=1mmax(0,1yif(xi))+21w2)min(i=1mhinge loss  max(0,1yif(xi))+λw2)

svm 中最常用的优化算法自然是上文中的 SMO 算法,不过有了损失函数后也可以直接优化。由于 hinge loss 在 y i ( w T x i + b ) = 1 y_i\left(\boldsymbol{w}^T \boldsymbol{x}_i+b\right)=1 yi(wTxi+b)=1 处不可导,因而无法直接使用 梯度下降,不过可以通过求次梯度 (subgradient) 来进行优化:

∂ L ∂ w = { − y i ⋅ x i  if  y i ( w ⊤ x i + b ) < 1 0  otherwise  \frac{\partial L}{\partial \boldsymbol{w}}= \begin{cases}-y_i \cdot \boldsymbol{x}_i & \text { if } y_i\left(\boldsymbol{w}^{\top} \boldsymbol{x}_i+b\right)<1 \\ 0 & \text { otherwise }\end{cases} wL={ yixi0 if yi(wxi+b)<1 otherwise 
∂ L ∂ b = { − y i  if  y i ( w ⊤ x i + b ) < 1 0  otherwise  \frac{\partial L}{\partial b}= \begin{cases}-y_i & \text { if } y_i\left(\boldsymbol{w}^{\top} \boldsymbol{x}_i+b\right)<1 \\ 0 & \text { otherwise }\end{cases} bL={ yi0 if yi(wxi+b)<1 otherwise 
w = w − η ∂ L ∂ w b = b − η ∂ L ∂ b \begin{aligned} \boldsymbol{w} &=\boldsymbol{w}-\eta \frac{\partial L}{\partial \boldsymbol{w}} \\ b &=b-\eta \frac{\partial L}{\partial b} \end{aligned} wb=wηwL=bηbL

LR和SVM的联系与区别

1、LR和SVM都可以处理分类问题,且一般都用于处理线性二分类问题(在改进的情况下可以处理多分类问题)

2、两个方法都可以增加不同的正则化项,如l1、l2等等。所以在很多实验中,两种算法的结果是很接近的。

区别

1、LR是参数模型,SVM是非参数模型。

2、从目标函数来看,区别在于逻辑回归采用的是logistical loss,SVM采用的是hinge loss,这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重

3、SVM的处理方法是只考虑support vectors,也就是和分类最相关的少数点,去学习分类器。而逻辑回归通过非线性映射,大大减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重。

4、逻辑回归相对来说模型更简单,好理解,特别是大规模线性分类时比较方便。而SVM的理解和优化相对来说复杂一些,SVM转化为对偶问题后,分类只需要计算与少数几个支持向量的距离,这个在进行复杂核函数计算时优势很明显,能够大大简化模型和计算。

5、logic 能做的 svm能做,但可能在准确率上有问题,svm能做的logic有的做不了。

7. K-Means

K-Means的思想十分简单,首先随机指定类中心,根据样本与类中心的远近划分类簇,接着重新计算类中心,迭代直至收敛

K-均值算法工作流程:

1)随机确定k个初始点作为质心
2)将数据集中的每个点分配到一个簇中,即为每个点找到距离其最近的质心,并将其分配给该质心所对应的簇,该步骤完成后,每个簇的质心更新为该簇所有点的平均值。

随机创建K个质心为起始点  
当任意一个点的簇分配结果发生变化时  
    对每一个数据点  
         对每个质心  
              计算数据点和质心之间的距离  
         将数据点分配到距离最近的簇中  
    对每个簇,计算所有点的均值更新质心

K— means对异常值是否敏感,为什么?

K-means对异常值较为敏感,因为一个集合内的元素均值易受到一个极大值的影响。当存在异常值的情况下,均值所计算出来的中心位置很可能不能够反映真实的类别中心。

如何评估聚类效果?

紧凑度(类内)和分离度(类间)。

聚类质量:因为是无监督学习,所以一般通过评估类的分离情况来决定聚类质量。类内越紧密,类间距离越大,则质量越高。

簇内样本越相似,说明聚类效果越好,可以理解为簇内的样本点距离簇内中心点的离差平方和越小就说明聚类效果越好

K — means的优缺点

优点:

  • 算法简单,容易理解,在某些情况下聚类效果不错;

  • 处理大数据集的时候,该算法可以保证较好的伸缩性——即稍作改进即可以处理大数据集;

  • 当数据簇近似于高斯分布时,效果非常不错;

  • 算法复杂度低——时间复杂度为O(nkt),其中n为样本数,k为类别数,t为迭代数。

缺点:

  • k值需要人为设定,不同的k值得到的结果不一样;

  • 对初始的类别中心敏感,不同选取方法得到的结果不一样;

  • 对异常值敏感;

  • 一个样本只能归为一类,不适合做单样本多标签分类任务;

KNN与K-means区别

K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。

KNN K-Means
1.KNN是分类算法
2.属于监督学习
3.训练数据集是带label的数据
1.K-Means是聚类算法
2.属于非监督学习
3.训练数据集是无label的数据,是杂乱无章的,经过聚类后变得有序,先无序,后有序。
没有明显的前期训练过程,属于memory based learning 有明显的前期训练过程
K的含义:一个样本x,对它进行分类,就从训练数据集中,在x附近找离它最近的K个数据点,这K个数据点,类别c占的个数最多,就把x的label设为c。 K的含义:K是人工固定好的数字,假设数据集合可以分为K个蔟,那么就利用训练数据来训练出这K个分类。

相似点

都包含这样的过程,给定一个点,在数据集中找离它最近的点。即二者都用到了NN(Nears Neighbor)算法思想。

二分K均值聚类算法

由于基本K均值聚类算法质心选择的随机性,其聚类的结果一般比较随机,一般不会很理想,最终结果往往出现自然簇无法区分的情况,为避免此问题,下面介绍二分K均值聚类算法。

为克服K-均值算法收敛于局部最小值的问题,有人提出了另一个称为二分K-均值( bisecting K-means)的算法。

思想:该算法首先将所有点作为一个簇,然后将该簇一分为二。之后选择其中一个簇继续进行划分,选择哪一个簇进行划分取决于对其划分是否可以最大程度降低SSE( Sum of Squared Error,误差平方和)的值。上述基于SSE的划分过程不断重复,直到得到用户指定的簇数目为止。

将所有的点看成一个簇
当簇数目小于k时
   对每一个簇
        计算总误差
        在给定的簇上面进行二分k-均值聚类
        计算一分为二之后的总误差
    选择使得误差最小的那个簇进行划分

猜你喜欢

转载自blog.csdn.net/qq_40145095/article/details/126337477