SVM回归(SVR)
传统回归:线性回归(最小二乘法)
SVR模型函数:y=wx+b
算法原理:
SVR在线性函数两侧制造一个”间隔带”,对于所有落入到间隔带内的样本,都不计算损失;之后再通过最小化间隔带的宽度与总损失来优化模型.
如下图,只有那些圈了红圈的样本(活在间隔带边缘之外,或落在间隔带边缘上),才被计入最后的损失
注意SVM和SVR的区别:
SVR希望尽可能多的点在两个间隔内,而SVM希望尽可能多的点在两个超平面的两侧
SVR引入两个松弛变量:$\xi_i和\xi_i^*$
已知f(x)=wx+b是我们最终要求得的模型函数;$wx+b+\epsilon$和$wx-\epsilon$是隔离带的上下边缘.
像SVM一样构造松弛变量即有.
松弛变量就是表示间隔带内没有惩罚项,而间隔带两侧外有惩罚项.
SVR的主问题:
其中最优化函数部分和我们的线性SVM类似,只是考虑的非支持向量的部分由间隔内转换到间隔外.而对于约束函数部分,由于不考虑间隔内的样本点,所以也就非常好理解了
接下来操作就是与之前的SVM相似,用拉格朗日函数并转化成其对偶问题.
Sklearn 的SVR的文档
SVR parameters:
- epsilon:定义的一个间隔($\epsilon$)
- C:正则化的一个参数
- tol
- loss
SVM调参
- 调节参数:Soft Margin问题如何调节参数C:
- 当C趋于无穷大时,意味着分类严格不能有错误
- 当C趋于很小时,意味着可以有更大的错误容忍(就接近于一个线性可分的SVM)
SVM多分类问题
one VS rest将某一类归为正类,其余全部都是负类.
该方法的最大缺陷是数据的不平衡,因为某一类的实例往往只占了一小部分.当然解决不平衡的问题可以进行降采样或上采样。但是上采样中数据集过多重合,容易导致过拟合.而降采样使得数据利用率不足,不能学习整个模型的特性.
one VS one:k类数据集中,单独为每两类的样本设计SVM,进行分类.最终必须设计k(k-1)/2个分类器,最终用投票的方式进行选择.这也是libsvm采用的方法(1vs1比1vsrest用的更广泛,尽管计算量大)
SVM的二叉树组合:
如果类别为k个,那么最后只需要k-1个分类器
该模型的最大缺点就是如果某一层中的分类出错,那么后面的分类器只能将错就错.所以选择差别大的类在前,差别小的类在后。(也不太实用)
降维
PCA
内积:$(a_1,a_2,..,a_n)·(b_1,b_2,….,b_n)^T=a_1b_1+..+a_nb_n$
如果|B|=1则
此时A和B的内积等于将A向B方向进行投影的矢量长度.
一个向量与一个单位基向量进行内积可以得到这个向量在该基上的坐标值.(注意基的特点:单位向量、基与基之间线性无关)
一组向量在单位基向量下进行内积:
其中$p_i$是每个数据点的向量,$a_j$是单位基向量
由此可以得到各个数据点向量在各个基向量下的坐标
方差:
由于我们在PCA前会中心化,所以均值为0,所以有
协方差:
也由于之前会中心化,所以有
此处我们当样本数较大时,不必在意样本数m和m-1的区别
协方差矩阵:
一个只有两个特征的数据集,总共有n个样本,那么
则有
X是样本矩阵
X的协方差是关于特征的
并且有协方差矩阵=$\frac{1}{n}XX^T$
PCA的推导过程
一组样本点${v_1,…,v_n}$,中心化后,
假设我们现在从一个n维降维到d维,其中n>d.这组d的单位基是$w=(w_1,…w_d)^T$,之前提到样本向量点与单位基向量做内积可以得到基向量上的坐标值:(x_i,w)=x_i^Tw
此时我们的方差是:
$D(x)=\frac{1}{n}\sum_{i=1}^n(x_i^Tw)^2=\frac{1}{n}\sum_{i=1}^nw^Tx_ix_i^Tw=w^T(\frac{1}{n}\sum_{i=1}^nx_ix_i^T)w$
其中$frac{1}{n}\sum_{i=1}^nx_ix_i^T$是样本点的方差可以记为$\Sigma$
下面最大化坐标变换后的方差
可以构造拉格朗日函数进行求解
最后会发现我们所要求得是我们协方差矩阵的特征向量作为我们的基(从特征值大到小处理).
PCA求解的最佳投影方向(最大的),即一条直线,这与数学中的线性回归问题的目标不谋而合,所以PCA在求解最佳方向时也就是在求能使所有点到直线最小距离平方和的那一条直线。
LDA
相比于PCA,LDA可以作为一种有监督的降维算法
在PCA中,算法没有考虑数据的标签(类别),只把原数据映射到一些方差比较大的方向上.
LDA的核心思想是:
找到一个方向w进行投影,使投影后最大化类间距和最小化类内距,其中w是单位向量
由此有最大化目标函数:
其中$D_1=\sum_{x∈c_1}(w^Tx-w^T\mu_1)^2$,$D_2=\sum_{x∈c_2}(w^Tx-w^T\mu_2)^2$
目标函数可以改写为:
定义类间散度矩阵$S_B=(\mu_1-\mu_2)(\mu_1-\mu_2)^T$,类内散度矩阵$S_w=\sum_{C_i}(x-\mu_i)(x-\mu_i)^T$
然后可以利用拉格朗日求导来求解使目标最大的w。
LDA相比于PCA更善于对有类别信息的数据进行降维操作,但它对数据的分布做了很强的假设,例如,每个类数据都是高斯分布、各个类的协方差相等.主要因为线性模型对于噪声的鲁棒性比较好,但由于模型简单,表达能力有一定局限性,我们可以引入核函数扩展LDA方法来处理分布较复杂的数据.