机器学习理论部分系列笔记, 主要参考资料周志华的<<机器学习>>, 李航的<<统计学习方法>>, 网络上的资源很多出处找不到了, 不列举.
线性回归
给定数据集D={(x1,y1),(x2,y2),...,(xm,ym)}, 其中xi=(xi1;xi2;...;xid),yi∈R.
最简单的情况, 当x的属性只有一个的时候, 线性回归模型学得一个线性模型以尽可能准确的预测真实值输出. 即
f(xi)=wxi+b,f(xi)≃yi其中w, b为待学习的参数,通过最小化均方误差确定w和b的值:
(w∗,b∗)=argmin(w,b)m∑i=1(f(xi)−yi)2=argmin(w,b)m∑i=1(yi−wxi−b)2求上式极值直接对w, b求偏导得到:
∂E(w,b)∂w=2(wm∑i=1x2i−m∑i=1(yi−b)xi)另上式都等于0, 可求得闭式解:
w=∑mi=1yi(xi−ˉx)∑mi=1x2i−1m(∑mi=1xi)2通常情况下, x有d个属性, 此时
[xT11xT21⋮⋮xTm1]其中xTi=(xi1,xi2,⋯,xid), 有
w∗=argminw(y−Xw)T(y−Xw)对w求导得 2XT(Xw−y), 另其为0, 解得闭式解 w=(XTX)−1XTy, 此时得到的现行回归模型为f(xi)=xTi(XTX)−1XTy, 这里有一步求逆的过程, 而对于不是满秩的情况矩阵没有逆矩阵, 此时计算其伪逆.
而当y与x不具有线性关系时, 如果我们可以找到一个函数g(y)使得 g(y)=wTx+b, 同样可以通过上面的方法进行计算.
分类
对于二分类问题, 只需要用上面求解回归问题的方法对函数通过一个阈值来使函数大于该值时为一个类, 小于时为另一个类, 不过通常我们将函数值过一个sigmoid函数来分类, 这样不知可以用阈值来分类还有概率信息即sigmoid输出的结果可以做为分类的概率值.
对于N分类问题, 可以将问题转换为N个二分类问题, 第k个二分类器判断输入是否为第k个类, 还可以对任意两个类训练一个二分类器, 不过这样需要N*(N-1)/2个2分类器, 一般来说较复杂.
类别不平衡问题
一般我们求一个二分类问题, sigmoid输出的结果通过y1−y>1 预测为正例.
当正例负例数目不同时, 可以通过再缩放来进行预测y′1−y′=y1−ym−m+, 其中m−为观测的负例数, m+为正例数.
然而有时候我们的观测正负例比例和真实比例并不相同, 可以通过对负例欠采样, 对正例进行过采样, 或者将负例分成n等份, 每一份样例数和正例相同, 这三种方法各有优缺点, 其中对正例过采样实现困难, 对负例欠采样在训练集不够大的时候也不适合.
线性判别分析(Linear Discriminant Analysis) LDA
LDA的思想是将训练数据通过线性变换映射到另一个空间, 在这个空间中类别之间的差距越大越好, 类别内部差距越小越好.
给定数据集D={(xi,yi)}mi=1,yi∈{0,1}, Xi,μi,Σi分别表示第i类的集合, 均值, 协方差矩阵.
如果将其映射到w上, 此时第i个类别的中心点(均值位置)被映射到wμi. 第i个样本的协方差为wTΣiw.
对于只有两类的问题来说, 我们希望类别间中心点距离越远越好, 即‖wμ0−wμ1‖22取最大. 类内差别越小越好, 即类内方差越小越好, wTΣ0w+wTΣ1w取最小. 两个合起来优化即最大化:
J=‖wμ0−wμ1‖22wTΣ0w+wTΣ1w=wT(μ0−μ1)(μ0−μ1)TwwT(Σ0+Σ1)w定义:
类内散度矩阵: Sw=Σ0+Σ1=∑x∈X0(x−μ0)(x−μ0)T+∑x∈X1(x−μ1)(x−μ1)T
类间散度矩阵: Sb=(μ0−μ1)(μ0−μ1)T
全局散度矩阵: St=Sb+Sw=∑mi=1(xi−μ)(xi−μ)T, 其中μ是所有数据的均值
我们重写优化目标为:J=wTSbwwTSww
我们要找到一个w使得上式最大, 上式中分子和分母都是w的二次项, 因此我们可以将w任意缩放而上式结果不变, 因此我们不妨另wTSww=1, 于是有:
minw−wTSbw由拉格朗日乘子法上式等价于: Sbw=λSww, 将Sb的表达式带入其中(μ0−μ1)w为一个常数, 所以有w=S−1w(μ0−μ1).
通常对Sw求逆通过先进行奇异值分解得到UΣVT 其中Σ为实对角矩阵, S−1w=VΣ−1UT得到, 简化运算.
多分类问题原理相同, 不赘述.
LDA可以做为监督降维的方法, 其中监督信号就是数据的类别, 可以将数据映射到维度较低的w平面.