线性回归、逻辑斯蒂回归、支持向量机、神经网络、异常检测和主成分分析参照Andrew Ng主讲课程《机器学习》
目录
线性回归
单变量回归
损失函数为
其中为二维向量(第一维值为1,是常数项),而,损失函数关于参数值的梯度如下
用矩阵形式表示为
多变量回归
-
计算公式
同单变量回归。在确定最优参数的过程中可以采用梯度更新的方法,也可以直接计算其值。
其中为 (n为输入特征数目),矩阵,当时,一定不是满秩矩阵,不可逆,此时可能有多个局部最优解。 -
标准化
使用梯度更新求参数最优值时可以先标准化以减少收敛所需迭代次数。除常数项外,对于每一个特征标准化
如果对训练集应用标准化,验证集和待预测变量应该以相同的均值和标准差应用标准化。
直接计算梯度最优值时不需要标准化。
-
正则化 (Regularization)
当输入特征过多时,模型容易过拟合。此时可以通过正则化限制参数的大小,也就是
其中
$$
\begin{equation*}
L =
\begin{bmatrix}
0 & 0 & \cdot & \cdot & \cdot & 0 \
0 & 1 & \cdot & \cdot & \cdot & 0 \
\cdot & \cdot & \cdot & & & \cdot \
\cdot & \cdot & & \cdot & & \cdot \
\cdot & \cdot & & & \cdot & \cdot \
0 & 0 & \cdot & \cdot & \cdot & 1 \\end{bmatrix}
\end{equation*}
$$最优化的参数值为
可以证明一定是满秩矩阵。证明如下:
假设其不是满秩矩阵,则,那么
假设,则,那么当将有
假设,由于,必有
因此无论对于哪种情况都不会有,与前面结论矛盾,一定是满秩矩阵。
Logistic回归
Logistic回归是一个线性分类方法,将权重与变量相乘通过激活函数后判断目标类别,其损失函数为对数似然函数
其中,
损失函数关于参数的导数为
参数较多时可以使用梯度更新,可以调用MATLAB的无约束优化函数fminunc
options = optimset('GradObj', 'on', 'max_iter', 400); % cost_function的返回值为[J, grad], 可直接使用返回的梯度值,同时设置最大迭代次数为400.
[theta, cost] = fminunc(@(t)cost_function(t, X, y, lambda), theta_0, options);
One vs All
对于多变量的Logistic回归,应该对每一个类别训练一组参数,预测时分别对每一个类别计算似然估计,取值最大的一个类别,此时参数的维度为,其中为类别数目。
神经网络
Forward-Propagation
设输入层为第1层,输出层为第L层 (最后一层)
-
输入层
设输入向量的维度为,其中为样本数目,为特征数目,令,其维度为,前向传播为
-
输出层
对于输出层的,计算损失函数为
-
隐层
对于每一个隐层,前面一层的输出与相乘,以sigmoid激活函数为例
而在加上一个常数偏置项,使得其维度为,因此的维度应该为。
Backward-Propagation
以sigmoid激活函数为例
-
输出层
假设采用对数似然损失函数。
-
隐层
而
由于损失函数中有正则化项
其中
$$
\begin{equation*}
A =
\begin{bmatrix}
0 & 0 & \cdot & \cdot & \cdot & 0 \
0 & 1 & \cdot & \cdot & \cdot & 0 \
\cdot & \cdot & \cdot & & & \cdot \
\cdot & \cdot & & \cdot & & \cdot \
\cdot & \cdot & & & \cdot & \cdot \
0 & 0 & \cdot & \cdot & \cdot & 1 \\end{bmatrix}
\end{equation*}
$$
模型评估与选择
数据集划分
通常我们会将数据集划分为训练集和测试集,训练集用于训练模型而测试集用于评估模型,并选择在测试集上表现最好的模型。但是实际上,我们不能完全确定该模型在训练集和测试集以外的数据上的泛化能力。为了应对这个问题,可以将数据集划分为三部分:训练集(Training set, 用于训练模型)、验证集(Validation set, 用于选择模型)和测试集(Test set, 最终评估模型)。假设训练得到K个模型,其中第i个在验证集上表现最好,则最终选取该模型。这样,相当于验证集已经对模型经过更进一轮的选择,因此模型在其上的表现往往好于测试集。
Bias-Variance
当训练数据较少,而模型参数(对应于选取特征数量)较多时容易出现过拟合,此时表现为训练集误差小,而验证集误差大,这种情况称为high variance,解决方法是尝试采用更多的训练数据,减少特征数目或者应用正则化。
当模型在训练集和验证集的误差都较大时,这种情况为欠拟合,称为high bias,此时采用更多的训练数据往往不能提升模型效果,应该尝试采用更多的特征,或者减小正则化项系数。
学习曲线和交叉验证曲线
尝试使用不同的训练集规模训练数据,可以对学习算法进行调试。比较不同模型的效果时,计算其在训练集和验证集上的误差,需要注意的是这个误差不等于损失函数,不应该加上正则化项。
采用交叉验证曲线可以对不同结构的模型和参数进行选择。例如,在单变量回归时,若直接采用线性回归,模型效果可能不太好,此时可以尝试采用多项式回归,可以用不同的多项式次数和不同的正则化项参数等进行交叉验证,选取在验证集上效果最好的组合。
处理不均衡数据
对于分类问题来说,如果在数据集中一个类别的比例很高而其他类别的比例很低,此时即使总体的预测错误率较低,对于少数样本的类别其错误率可能很高,这样不能仅仅依靠简单的损失函数或者总体的准确率来评估模型。引入评价指标召回率和精确率,(对于二分类)假阳率(预测为阳性样本中实际阴性样本比例)、假阴率(预测为阴性样本中实际阳性样本比例)等指标。以二分类为例
多分类对于每个类别的召回率和精确率与上式类似。
一般来说,对于某个类别,召回率越高和精确率越低。为了提高精确率可以提高预测为该类别的阈值(比如将sigmoid损失函数值的阈值从0.5提高到0.7),反之为了提高召回率可以降低其阈值。根据精确率(Precision)和召回率(Recall)的关系可以绘制出P-R曲线,曲线的积分称为AUC(area under curve),可以作为评价模型整体性能的一个依据。也可以采用F-score来评判,其计算公式为
另一种评价方法是ROC (Receiver Operating Characteristics) 曲线,其横坐标和纵坐标分别为FPR和TPR,其中
FPR可以视为,TPR可以视为阳性样本召回率,这两者是正相关关系。
支持向量机
数学推导
-
最大化分类间隔
在空间中,为了将正负样本区分开,可以令正负样本分别满足(为常数项1)
也就是
其中
令,正负支持向量之间的间隔为
最小化的值即最大化分类间隔,目标函数设为,非线性约束可用Lagrange乘子法,令
求解,应用KKT定理,函数取得极值时有
其中
代入函数可得
-
引入松弛系数
对于空间中不完全线性可分问题,可以对于每一个样本引入一个松弛系数,允许一部分样本不位于正确的区域。
对于每个样本,
其中。设为松弛惩罚系数,则最小化目标函数可以设为,对应Lagrange函数为
应用KKT定理
最终得到的与1中相同。且当样本点分别位于分类平面,平面之间和平面之外时
选取一个,则,可以求得.
-
求解
的优化问题是原优化问题的对偶。由于参数过多,求解时可以采用SMO算法。
优化问题:
由于优化变量众多,John Platt在1998年提出SMO算法,可以高效地求解上述问题的最优解。SMO算法每次选取两个变量,固定其他变量,求这两个变量的最优解,设选取的两个变量为和。为了保证原问题的约束条件成立,应有
因此需要保证,其中
$$
\begin{equation*}
U =
\left{
\begin{array}{l}
\max(0, \alpha_{2,0} - \alpha_{1,0}) ;; d_1 \neq d_2 \
\max(0, \alpha_{1,0} + \alpha_{2,0} - C) ;; d_1 = d_2
\end{array}
\right.V =
\left{
\begin{array}{l}
\min(C, C - \alpha_{1,0} + \alpha_{2,0}) ;; d_1 \neq d_2 \
\min(C, \alpha_{1,0} + \alpha_{2,0}) ;; d_1 = d_2
\end{array}
\right.
\end{equation*}
$$令
由于,原优化目标
$$
\begin{align*}
Q(\pmb{\alpha})
&= \sum_{i=1}^m \alpha_i - \frac{1}{2} \alpha_i \alpha_j y_i y_j \pmb{x}_i^T \pmb{x}_j \&= \alpha_1 + \alpha_2 - \alpha_1 d_1 v_1 - \alpha_2 d_2 v_2 - \frac{1}{2} \alpha_1^2 \pmb{x}_1^T \pmb{x}_1 - \frac{1}{2} \alpha_2^2 \pmb{x}_2^T \pmb{x}_2 - \alpha_1 \alpha_2 d_1 d_2 \pmb{x}_1^T \pmb{x}_2 + const\
&= (1 - d_1 d_2) \alpha_2 - \alpha_2 y_2 v_2 - (r - d_1 d_2 \alpha_2) y_1 v_1 - \frac{1}{2} \alpha_2^2 \pmb{x}_2^T \pmb{x}_2 - \frac{1}{2} (\gamma - d_1 d_2 \alpha_2)^2 \pmb{x}_1^T \pmb{x}_1 - \alpha_2 (\gamma - d_1 d_2 \alpha_2) d_1 d_2 \pmb{x}_1^T \pmb{x}_2 + const \
&= (\pmb{x}_1^T \pmb{x}_2 - \frac{1}{2} \pmb{x}_1^T \pmb{x}_1 - \frac{1}{2} \pmb{x}_2^T \pmb{x}_2) \alpha_2^2 + (1 - d_1 d_2 - d_2 v_2 + d_2 v_1 + d_1 d_2 \gamma \pmb{x}_1^T \pmb{x}_1 - d_1 d_2 \gamma \pmb{x}_1^T \pmb{x}_2) \alpha_2 + const\
\end{align*}
$$因此
$$
\begin{align*}
\frac{\mathrm{d} Q}{\mathrm{d} \alpha_2}
&= (2 \pmb{x}_1^T \pmb{x}_2 - \pmb{x}_1^T \pmb{x}_1 - \pmb{x}_2^T \pmb{x}_2) \alpha_2 + 1 - d_1 d_2 - d_2 v_2 + d_2 v_1 + d_1 d_2 \gamma \pmb{x}_1^T \pmb{x}_1 - d_1 d_2 \gamma \pmb{x}_1^T \pmb{x}_2 \
&= (2 \pmb{x}_1^T \pmb{x}_2 - \pmb{x}_1^T \pmb{x}_1 - \pmb{x}_2^T \pmb{x}_2) \alpha_2 + d_2 (d_2 - d_1 - v_2 + v_1 + d_1 \gamma \pmb{x}_1^T \pmb{x}_1 - d_1 \gamma \pmb{x}_1^T \pmb{x}_2) \&= (2 \pmb{x}_1^T \pmb{x}_2 - \pmb{x}_1^T \pmb{x}_1 - \pmb{x}_2^T \pmb{x}_2) \alpha_2 + d_2 [(f(\pmb{x}1) - d_1) - (f(\pmb{x}2) - d_2) - \sum{j=1}^2 \alpha{j,0} d_j \pmb{x}_j^T (\pmb{x}1 - \pmb{x}2) + d_1 (\alpha{1,0} + d_1 d_2 \alpha{2,0}) (\pmb{x}_1^T \pmb{x}_1 - \pmb{x}_1^T \pmb{x}_2)] \
&= (2 \pmb{x}_1^T \pmb{x}_2 - \pmb{x}_1^T \pmb{x}_1 - \pmb{x}_2^T \pmb{x}_2) \alpha_2 + d_2 [(f(\pmb{x}_1) - d_1) - (f(\pmb{x}2) - d_2) + \alpha{2,0} d_2 (\pmb{x}_1 - \pmb{x}_2)^T (\pmb{x}_1 - \pmb{x}_2)] \
&= (2 \pmb{x}_1^T \pmb{x}_2 - \pmb{x}_1^T \pmb{x}_1 - \pmb{x}_2^T \pmb{x}2) (\alpha_2 - \alpha{2,0}) + d_2 [(f(\pmb{x}_1) - d_1) - (f(\pmb{x}2) - d_2) + \alpha{2,0} d_2 (\pmb{x}_1 - \pmb{x}_2)^T (\pmb{x}_1 - \pmb{x}_2)]
\end{align*}
$$因此,当,,也就是
其中,,由于同时需要满足约束条件,因此
可以根据计算,而更新时,也需要其使和满足约束条件。
当,则,为支持向量,因此
得
当同理,且当时。当二者都不是支持向量时(都不在边界上,可取二者的算术平均作为更新值)
因此可以如下更新()
其中
在实际使用该算法时设每次选取的两个变量为和,每次循环中遍历所有变量,每次随机选取另一个变量,更新,和后,更新的值直到所有变量不再变化或者达到最大循环次数为止。
引入核函数
对于线性不可分问题,可以更高维特征,但是由于每次由和更新时需要计算內积。当维度很高时计算量过大。因此引入核函数,其与高维空间中的內积等同,常用核函数包括
-
多项式核函数
例如
其中 -
径向基函数
径向基函数也可以视为高维空间的向量內积,例如
其中,的各项为的各项。径相基函数可以视为和之间的相似度,当二者较为接近时,函数值较大。当惩罚系数选取过大时容易造成过拟合 (分隔超平面很复杂),当选取过大时也容易造成过拟合,因为此时新空间中计算得到的特征向量随原向量变化过大。反之则可能出现欠拟合的情况。
适用场景
设为特征数目,为样本数目
当很大时使用Logistic回归或者不带核函数的SVM。
当较小,中等时使用带高斯核的SVM。
当较小,较大时应该加入更多的特征并采用Logistic回归或者采用不带核函数的SVM (核函数计算量大)。
聚类
k均值算法
k均值算法将样本集合中的m个样本划分为个簇,划分标准为最小化平方误差
其中为第i个簇的中心 (各点坐标的平均值) 。
首先选定k个样本作为聚类中心,然后将每个样本划分到与其距离最近的中心所对应的簇,然后更新每个簇的聚类中心为该簇样本坐标的平均值。
注意在有些情况下,k-means聚类可能陷入局部最优而不是全局最优,此时应该尝试采用不同的随机初始聚类中心位置。另外,可以尝试不同的聚类簇数量,选取效果最好的。
主成分分析
主成分分析是一种无监督降维方法,其核心思想是将高维数据映射到一个其方差较大的低维度超平面上 (其正交方向上的方差较小,可视为噪声),且各个分量线性无关。
数学推导
对于一系列的数据点,其在将被映射到的地位超平面上的投影点为,为了尽可能保留原信息,需要两个点尽量逼近。以二维或三维数据投影到直线为例,设为投影直线的单位向量,为其在投影平面上的模,最小化目标函数
令,则问题转换为最大化函数。等式约束条件为。
采用Lagrange乘子法求解,令
应用KKT定理,当函数取极值时
也就是
而且,因此,应为的特征值,为对应的特征向量,需要选择特征值最大的特征向量作为投影直线的方向。
理解
在实际应用中,若采用,则矩阵为协方差矩阵(通常也在主成分分析之前会输入值进行标准化,标准化之后矩阵为协方差矩阵 ),必然可以相似对角化而且它是非负定矩阵,且对角化后对角线元素越大代表此特征对应的方差越大。非对角线位置值为0表明两个特征非线性相关。注意PCA只是客观降维,与样本的类别无关,因此可能出现降维之后样本非线性可分的情况。
推导如下:
令, ,而,因此
为了最大化方差,取得主成分,设第i主成分为,则最大化目标函数
应用KKT条件,则有
在这里也可以看出是的特征向量,而为对应的特征值。需要说明的一点是作为协方差矩阵一定是非负定的,且作为实对称矩阵一定可以对角化。
证明协方差矩阵半正定
,,因此是半正定矩阵,当且仅当是满秩矩阵时为正定矩阵(因为此时方程没有非零解)。
奇异值分解
对于的实矩阵A,其可以分解为的形式,其中为正交矩阵,为正交矩阵,为对角矩阵。
不妨设,由于为实矩阵,则为实对称矩阵,一定可以相似对角化,设其对角化后的矩阵为,则
其中为正交矩阵,设的对角线元素为降序排序,且值分别为,其中为的秩。
令
令,则
可以看出,是,也是的列空间的一组标准正交基,令为的零空间的一组标准正交基,构成正交向量。令,则
可对角化方阵的几何重数等于代数重数,其特征值分解可以视为奇异值分解的特例。
线性判别分析
由于PCA并没有涉及到样本的类别,降维之后可能导致样本线性不可分。LDA在降维的同时尽量保证不同类样本的区分。
数学推导
优化目标函数为
其中,和分别降维后是类别1和类别2的中心点,和分别为
目标函数也可以写成
其中和分别为类间和类内散布矩阵,其定义为
求导
可以化为
可以认为向量是矩阵的特征值,而是对应的特征向量。只需要求矩阵最大的特征值,并找到对应的特征向量就可以得到正确的投影方向。
理解
PCA的投影坐标系是正交的,但是LDA不保证,因此降维后的维度之间可能有相关性。
对于多类别的线性判别分析,设类别数目为K,第i类的元素数目为,所有元素的均值为,类内散布矩阵和类间散布矩阵分别定义为
异常检测
对于异常检测,可采用(多元)高斯分布,根据特定阈值将概率密度较低的取值判定为异常。当采用的样本有正常和异常的标签时可以寻找一个最佳的概率阈值使得分类的精度(F-score)最高。
推荐算法
推荐算法是结合用户对内容的评价,推荐其可能感兴趣的内容,一种常用的推荐算法时协同过滤(Collaborative Filtering)
协同过滤
如果特定用户对多个内容有所评价,且每个内容有一个对应的特征向量,可以分别针对每个用户建立一个模型,并预测其对新的已知特征向量的内容的评价。但是内容的特征变量不是已知时此方法不可行。协同过滤算法可以基于多个用户对多个内容的评价,为每个用户建立一个模型,每项内容建立一个特征向量,同时对每个用户的模型参数和每个内容的特征向量进行学习。假设用户和内容的数目分别为和,而每个特征向量的长度为。允许每个用户只给出部分评价,设用户是否给出内容的评价为(给出评价则,否则为0),同时优化模型参数 ()和特征向量 (),总的损失函数为
因此,和的梯度分别为
开始训练前,需要随机初始化参数和特征,不能将其设定为,否则同一个用户的所有参数梯度都相同,因此在训练过程中保持一致,不能达到学习特征的目的。
另外,如果某个用户没有对任何内容作出评价,则可将其他用户的评价进行mean normalization (即对于每一个内容减去评价的平均值,使其评价之和为0),并将没有作出任何评价的用户的评价全部设为0,进行协同过滤。在预测时,每个内容预测的评价值均要加上之前减去的平均值。因此,在训练开始前,该用户的评价预测值为以上所指的均值。
如果某个内容并没有用户作出评价,则无法断定其内容是否受欢迎,不参与协同过滤。
集成学习
Boosting
Adaboost
算法流程
-
初始化分布 (可理解为每个样本的权重)
训练数据集样本数目为,用表示,初始化权重
-
训练弱分类器
可以选择不同的分类器训练,分类错误率为
若计算出的错误率大于0.5,则算法结束。否则更新当前弱分类器的权重为 (之后讨论中会推导)
更新权重
其中
-
重复步骤2总共进行次
最终得到的激活函数为
注:以上和的函数值均为{-1,1}
讨论
-
集成分类器收敛
由算法流程可知,对于第步的权重
Adaboost采用的损失函数是指数损失函数,分类损失函数为
亦即分类损失函数的上界。为了尽可能减小此上界,可以考虑在第步训练弱分类器时最小化,实际上由于
由此可见,如果使用足够多的弱分类器集成,损失函数的上界可以收敛至。 -
损失函数
采用指数损失函数 (表示期望)
其中为模型输出的分类结果。
函数取得最小值时
由此看出,指数损失函数达到最小值时,0/1损失函数也达到了最小,因此前者是一个合理的损失函数。
另外,关于弱分类器的权重,由于
指数损失函数达到最小值时有
Bagging
随机森林
待续