关于线性模型你可能还不知道的二三事


关于线性模型你可能还不知道的二三事(一、样本)
关于线性模型你可能还不知道的二三事(二、也谈民主)

关于线性模型你可能还不知道的二三事(三、特征值与奇异值的魔力)

目录

1 样本的表示形式
2 由线性模型产生的样本
3 逆矩阵的意义


1 样本的表示形式

  在数据挖掘过程中,样本以特征值矩阵X和目标值向量Y的形式表示。容量为n,有m个特征的样本,其特征值矩阵X由n个维度为m的列向量组成,第j个列向量为样本中第j个个体的特征值向量;目标值向量Y的第j个分量为样本中第j个个体的目标值:


 

2 由线性模型产生的样本

  已知样本的特征值矩阵X,由线性模型生成样本的目标值向量的方式由以下公式定义:

  权值向量W是维度为m的行向量,误差向量e为维度为n的行向量,其分量独立同分布,服从均值为0的正态分布。之所以说这样的样本是由线性模型生成,是因为满足:

  也就是说,从期望的角度来说,目标值和特征值存在线性关系!在假设样本是由线性模型产生的前提下,我们通常使用基于线性模型的机器学习算法来解决回归问题,例如:最小均方法(LMS),最小二乘法,回归支持向量机法等。但是,假设让一个完全没有机器学习背景的人来解决回归问题,他该如何入手呢?

  解决回归问题,归根结底是要预测新个体的目标值。一个最直观的方式就是,让新个体(测试样本中的个体)与已知个体(训练样本中的个体)比较相似性(特征向量相似),相似度越高意味着新个体的目标值与该已知个体的目标值更接近。这样一来,计算新个体与已知个体的相似性成为预测工作的关键之处。

  余弦相似性与欧式距离是衡量向量相似的最基本的两个方法。暂且让我们简化一下模型:假设样本只有2个特征,权值向量为[1, 2],在期望情况下,特征值和目标值构成三维空间中的平面,权值向量为该平面的法平面。通过以下两例,我们可以得知余弦相似性和欧式距离在线性模型中无法使用。

  例一、余弦相似性

 

  在本例中,已知个体(红色)的特征值向量为[1, 1],未知个体(绿色)的特征向量为[2, 2],通过计算余弦相似度,可得未知个体与该已知个体一致相似,其目标值也应当为1 + 2 * 1 = 3。但实际上,若样本是通过线性模型生成的话,其目标值应当约为2 + 2 * 2 = 6。由该例我们可以看到,余弦相似度只考虑了特征值向量的方向性,过于片面。

  例二、欧式距离

  在本例中,有两个已知个体(红色与紫色),其特征值向量与未知个体的特征值向量的欧式距离都等于1。在这种情况下,该未知个体的目标值应当与哪个已知个体更接近呢?如果样本是由线性模型产生的,该未知个体的目标值应当约为2 + 2 * 2 = 6。所以,以紫色的已知个体的目标值作为未知个体的目标值相对来说合适一点。通过该例可知,欧式距离也不适合在线性模型中使用。


 

3 逆矩阵的意义

  那到底怎么才能准确地描述未知个体与已知个体的相似性呢?在此,我们不妨再次假设样本容量n=m,且特征值矩阵X是可逆的,也就是说样本中的个体是线性无关的。我们知道逆矩阵有这样的性质:

  这对我们有什么启发呢?假设未知个体的特征值向量为x,x可以用X的m个线性无关列向量(已知个体的特征值向量)表示:

  此时将X的逆矩阵乘以未知个体x,可得:

  根据上式我们可以看到,在已知个体是线性无关的前提下,若未知个体能包含ai份第i个已知个体的特征,则其与第i个已知个体的近似度就为ai。显然。这样的近似表示方法,在线性模型中才是准确的。

  如果样本的容量n大于m,我们该如何处理呢?假设X的秩仍然等于m,但由于X不是方阵,无法求解逆矩阵。此时我们可以将原线性模型改写成:

  此时,X乘以X的转置则变成了m维的方阵,由于X的秩为m,X与X转置的乘积的秩也为m,即可逆。此时我们需要将Y与X的转置的乘以看成新的目标值向量,X与X转置的乘积看成新的已知个体的特征值矩阵,e与X转置的乘积看成新的误差向量。不难看到,原始问题与新问题的解(回归问题的解通常是求权值向量)是“等价”的。在新问题中,特征值矩阵是方阵且可逆,这样便可通过求解新问题来解决原始问题了。





关于线性模型你可能还不知道的二三事(二、也谈民主)

1 如何更新权值向量?
2 最小均方法(LMS)与感知机:低效的民主
3 最小二乘法:完美的民主
4 支持向量机:现实的民主
5 总结
6 参考资料


1 如何更新权值向量?

  在关于线性模型你可能还不知道的二三事(一、样本)中我已提到如何由线性模型产生样本,在此前提下,使用不同机器学习算法来解决回归问题的本质都是求解该线性模型的权值向量W。同时,我们常使用线性的方式来解决分类问题:求解分隔不同类别个体的超平面的法向量W。不论回归还是分类,都是求解向量W,而求解的核心思想也英雄所见略同:向量W倾向于指向某些“重要”的个体。然而哪些个体是重要的呢?不同的机器学习算法有不同的定义。


 

2 最小均方法(LMS)与感知机:低效的民主

  最小均方法(LMS)使用的随机梯度下降法与感知机的训练法则类似,两者都是迭代更新的方式。假设本次迭代中的权值为W,那么更新后的权值W'为(eta为更新率):

  随机梯度下降法:

  感知机:

  通过观察可知,权值更新是一个迭代的过程,不论是回归(最小均方法)还是分类(感知机),权值更新时视当前轮次中误差大的个体为“重要”的个体。这种权值更新办法比较直观,但是同时也比较低效:人人都有发言的权利,每次只考虑部分人,容易顾此失彼。


 

3 最小二乘法:完美的民主

  二乘即是平方,最小二乘法旨在于求解权值向量W使得误差平方和最小:

  通过对权值向量的每个分量进行求导可得:

  至此,我们可以发现最小二乘法可解的条件为特征矩阵X是可逆的。假设特征矩阵X的样本容量n=m,那么上式进一步化简得:

  使用求解出来的权值向量W'对未知个体x'进行预测,本质就是计算:

  在《关于线性模型你可能还不知道的二三事(一、样本)》中我们已经揭开了特征矩阵X的逆矩阵的意义,因此以上的计算过程可以概括为:首先使用X的逆矩阵乘以未知个体x',得到可以准确描述未知个体x'与特征矩阵X中已知个体相似度的列向量,然后以此为基础,使用加权求和的方法来计算未知个体x'的目标值。

  到此,最小二乘法所诠释的完美民主已显见:在每个人都不能由其他人代表的前提下,看未知的个体与谁更相似,那么目标值也与之更相似。

  没错,之前我们假设了特征矩阵X的样本容量n=m,但是大多数情况下n是大于m的。这种情况下权值向量计算公式无法进一步化简。同样在《关于线性模型你可能还不知道的二三事(一、样本)》中我们提到,可以转化原问题为:

  这时,我们可以设新的特征矩阵X'和新的目标值向量Y'为:

  到此,新的特征矩阵X'是m×m的方阵,可以求其逆矩阵了(当然,这还是在原特征矩阵的秩等于m的前提下)。因此有:

  不难看到,上式同样也是诠释了完美的民主,只是特征矩阵X变成了X',目标值向量Y变成了Y'而已。


 

4 支持向量机:现实的民主

  完美的民主可遇而不可求,如果特征矩阵X的秩小于m呢?此时最小二乘法便不奏效了。我们期望无论特征矩阵X的秩是否小于m,仍然可以高效地求解权值向量W。

  我们可以利用支持向量机解决该问题。不妨直接看到权值向量的最终结果(具体推导可参考《支持向量机通俗导论(理解SVM的三层境界)》

  使用上式计算出来的权值向量W对未知个体x'进行预测的原理是显见的:首先将未知个体与特征矩阵X中的个体相乘得到对应的相似度,然后以此相似度乘以alpha的分量,最后在此基础上以加权求和的方法来计算未知个体x'的目标值。然而,alpha到底是什么呢?

  对支持向量机有一定了解的同学肯定会有一个基本的认识:支持向量为间隔边界上的点,相对应的alpha的分量为0。也就是说,最终的权值只会考虑作为支持向量的样本!然而,进一步,很少有人会去思考:间隔边界上的点都是支持向量吗?支持向量所对应的alpha的分量值大小服从什么规律吗?支持向量为什么叫支持向量呢?

  我们通过一个简单的例子来进一步解答以上的问题,首先生成特征矩阵X和目标向量y:

复制代码
 1 import numpy as np
 2 from sklearn.svm import SVC
 3 from matplotlib import pyplot as plt 
 4 
 5 X1_positive_border = np.random.uniform(-10, 10, size=10)
 6 X2_positive_border = X1_positive_border + 1
 7 X_positive_border = np.hstack((X1_positive_border.reshape(-1,1), X2_positive_border.reshape(-1,1)))
 8 
 9 X1_positive = np.random.uniform(-10, 10, size=10)
10 X2_positive = X1_positive + np.random.uniform(2, 10, size=10)
11 X_positive = np.hstack((X1_positive.reshape(-1,1), X2_positive.reshape(-1,1)))
12 
13 X1_negative_border = np.random.uniform(-10, 10, size=10)
14 X2_negative_border = X1_negative_border - 1
15 X_negative_border = np.hstack((X1_negative_border.reshape(-1,1), X2_negative_border.reshape(-1,1)))
16 
17 X1_negative = np.random.uniform(-10, 10, size=10)
18 X2_negative = X1_negative + np.random.uniform(-10, -2, size=10)
19 X_negative = np.hstack((X1_negative.reshape(-1,1), X2_negative.reshape(-1,1)))
20 
21 X = np.vstack((X_positive_border, X_positive, X_negative_border, X_negative))
22 y = np.hstack((np.ones(20), -np.ones(20)))
复制代码

  使用线性核的SVC进行训练:

1 model = SVC(C=0.1, kernel='linear')
2 model.fit(X, y)

  对训练的结果绘图:

复制代码
 1 #绘制边界正例
 2 plt.plot(X_positive_border[:,0], X_positive_border[:,1], 'g.', markersize=12, label='Positive X At Border')
 3 #绘制正例
 4 plt.plot(X_positive[:,0], X_positive[:,1], 'g^', markersize=12, label='Positive X')
 5 #绘制边界反例
 6 plt.plot(X_negative_border[:,0], X_negative_border[:,1], 'r.', markersize=12, label='Negative X At Border')
 7 #绘制反例
 8 plt.plot(X_negative[:,0], X_negative[:,1], 'rv', markersize=12, label='Negative X')
 9 #绘制正边界
10 plt.plot(np.arange(-10, 11), np.arange(-10, 11) + 1, 'c--')
11 #绘制超平面
12 plt.plot(np.arange(-10, 11), np.arange(-10, 11), 'k-')
13 #绘制负边界
14 plt.plot(np.arange(-10, 11), np.arange(-10, 11) - 1, 'm--')
15 #绘制座标轴
16 plt.plot(np.arange(-10, 11), np.zeros(21), 'k-')
17 plt.plot(np.zeros(41), np.arange(-20, 21), 'k-')
18 #给每个支持向量进行标注
19 for i in range(len(model.support_vectors_)):
20     x = model.support_vectors_[i]
21     a = model.dual_coef_[0][i] * y[model.support_[i]]
22     plt.annotate('a[%d]=%.2f' % (i, a), xy=(x[0], x[1]), xytext=(x[0]-1, x[1]+1), arrowprops=dict(arrowstyle="->",connectionstyle="arc3"))23 
24 plt.legend(loc='best', shadow=True)
25 plt.show()
复制代码

  显示结果如下:

   我们可以看到,当参数C=0.1时,边界上几乎所有的点都是支持向量。再设C=1.0时,显示结果如下:

  此时,只有少数边界上几个点是支持向量了。参数C的变化为什么会影响支持向量的个数呢?官方文档中对参数C的说明是惩罚系数,不同于对权值向量的惩罚,这里的惩罚是针对于alpha的。C越大,惩罚就越大,那么alpha的非零项就越少。当边界上只有少数点为支持向量时,通常来说,边界上靠近两端的点更适合作为支持向量,例如上图中的a[0]至a[3]。如何解释呢?

  先看负边界上靠近两端的点,当它们与目标向量y的分量(值为-1,反向)相乘后,相当于正边界上的点。正边界上,对靠近两端的点进行向量求和,这样便可方便得到超平面的法向量,即权值向量。通俗一点说,靠近两端的点都是一些特色的点(不能被其他点代表),其他点可以由这些有特色的点的线性表示。或者更通俗一点来说,靠近两端的点可以看成是各行各业的先进人士,由于职业不同,他们都不能被彼此代表,但是他们可以代表自己的行业的其他人,他们的组合甚至可以代表一些跨行业的人!

  此时,我们可以引出结论:支持向量机代表的是一种现实的民主,我国的人民代表大会制也是如此。

  最后,我们还需要回答一个显见问题,支持向量的名称由来:一组能够”撑起“分隔边界的向量。


 

5 总结

  这次,我们探讨了3种常见的线性模型权值向量求解思路。从LMS和随机梯度下降到最小二乘,再到支持向量机,人们求解自然科学问题的思路与求解社会科学问题的思路走到了一起。最近的一件小事带给我启发:居住的小区需要对某一些问题进行决策,一开始由热心居民每家每户听取意见,结果迟迟拿不定主意,越听越糊涂。到最后,只好选出业主委员会,由业主委员会代表各个特色群体,问题才得以解决。

  之前对线性模型的权值求解过程和结果都“记得”非常熟悉,但是其真正意义(特别是最小二乘)没有去深究。而这次能够受到启发,并且联系到现实生活中,也算是对线性模型有了更进一步的认识吧。


 

6 参考资料

  1. 支持向量机通俗导论(理解SVM的三层境界)
  2. sklearn svc model





关于线性模型你可能还不知道的二三事(三、特征值与奇异值的魔力)

1 L2惩罚项
  1.1 惩罚项
  1.2 L2惩罚项与过拟合
  1.3 多目标值线性模型
2 特征值分解
3 奇异值分解
4 总结
5 参考资料


1 L2惩罚项

1.1 惩罚项

  为了防止世界被破坏,为了维护世界的和平……不好意思,这篇一开头就荒腔走板!某些线性模型的代价函数包括惩罚项,我们从书本或者经验之谈中学习到惩罚项主要有两个作用:为了防止模型过拟合,为了维护模型的简洁性。常见的惩罚项有L0、L1和L2惩罚项,其中L0惩罚项为权值向量W中不为0的分量个数,L1惩罚项为权值向量W各分量的绝对值之和,这两个惩罚项皆可以很好地维持权值W的稀疏性。单目标值时,L2惩罚项为权值向量W的模,多目标值时,L2惩罚项为权值矩阵W的奇异值的最大值,L2惩罚项可以很好地防止模型过拟合。在机器学习中的范数规则化之(一)L0、L1与L2范数》中,作者直观地说明了为什么L1在维持简洁性上更具优势,而L2在防止过拟合上力压群芳。

  更进一步说,带惩罚项的线性模型的求解过程本质上是解含先验信息的极大似然估计。含有L1惩罚项的线性模型,其假设权值向量W服从双指数分布;含有L2惩罚项的线性模型,其假设权值向量服从高斯分布。在另外的博文中,我将进一步说明其中的奥义。

1.2 L2惩罚项与过拟合

  L0惩罚项本就是最原始的模型简洁性的表示,L1以及单目标值L2惩罚项的几何意义都比较显见,我们也很容易从几何角度上深刻地理解其对防止过拟合或者维持简洁性的原理。在本文中,我们主要关注L2惩罚项。

  过拟合现象,通俗来说就是模型过于适合训练数据,而在待预测数据上性能不好的现象。然而,真正发生过拟合,是数据和模型两个方面共同作用造成的:数据在抽样时可能并不能代表整体,甚至与整体有较大的差异,而足够复杂的模型在这样的数据上训练后,将会产生过拟合现象。例如:在整体中,第i个特征与目标值并没有很强的相关性(平均情况),但是抽样偏偏把那些有强相关性的个体抽了出来,若在此数据上训练未剪枝的决策树模型,其很难对新的待预测数据做出准确的判断。

  单目标值L2惩罚项表示为权值向量W的模的大小,当线性模型的代价函数中加入单目标值L2惩罚项后,一方面,为了更好地符合训练数据,学习的本质促使各特征之间的差异性增大,即权值向量W的各分量之间的差异增大;另一方面,为了满足惩罚项,权值向量W的模必须受限小于一定范围,也就意味着权值向量W的每个分量都受限小于一定范围,分量之间的差异性就不会过于明显。如此以来,我们可以用“瞻前顾后”来形容带惩罚项的线性模型的训练过程。

  然而,多目标值L2惩罚项的意义就不那么好理解了:权值矩阵W的奇异值的最大值是什么鬼?

1.3 多目标值线性模型

  要知道多目标值L2惩罚项的意义,我们先要知道多目标值的线性模型是什么?简单来说,多目标值线性模型是多个单目标值线性模型的组合(这不是废话嘛……),也就是权值向量W变成了权值矩阵W,而目标值向量y变成了目标值矩阵Y。样本容量为m,特征个数为n,目标值个数为l的多目标值线性模型表示如下:

  从上图我们可以看到,由权值矩阵的第k个行向量和样本的特征矩阵X将生成目标值矩阵的第k个行向量。


 

2 特征值分解

  还是让我们简化一下模型:设目标值个数l等于样本容量m。这时,权值矩阵W变成了m阶方阵。

  可能为了学分,为了考研,我们都学习过如何进行特征值分解,也刷过不少的相关习题。但是,可能有很大一部分不理解为什么要特征值分解,其有什么几何意义?首先,让我们回归本质,从定义中得到特征值和特征向量有如下性质:

  特征向量是一组特殊的向量,其通过原矩阵W(在本文中是权值矩阵)进行行变换后,不会改变放心,只会改变大小,而缩放的程度为其对应的特征值大小。另外,我们总是找到一组m个线性无关的特征向量,于是可以将个体Xj表示成:

  在线性模型的定义中,我们需要将权值矩阵W右乘样本的特征矩阵X,对于个体Xj来说:

  不难发现,经过权值矩阵W右乘后的样本与原始样本相比,其仅仅在各特征向量方向上进行了伸缩,伸缩的程度为对应的特征值大小。从几何的角度来说,矩阵W右乘向量Xj,本质是在特征向量组成的m维空间里进行缩放。

  此时,我们再看,到底什么决定着个体Xj的目标值呢?如果某个特征值的绝对值过大,个体Xj的目标值就会近似于对应的伸缩后特征向量。以下3阶的例子很好地进行了说明:

  有3个特征向量q1、q2和q3,对应特征值为1、5和1。Xj表示为(2,2,2) ,W*Xj等于(2,6,6),该目标值近似于特征向量q2伸长了5倍后的结果。通过该例,我们得知,当权值矩阵W为方阵时,特征值绝对值的最大值决定了目标值的偏向性(偏向于对应的伸缩后的特征向量),所以,当特征值绝对值的最大值很大时,那么待预测的样本经过权值矩阵W右乘后,都会偏向于对应的伸缩后的特征向量,这样变造成了过拟合的现象:偏向性体现了在训练数据上的尽力符合,但是却和实际情况并不相符。

  这样一来,当权值矩阵W为方阵时,选择特征值绝对值的最大值作为多目标值L2惩罚项就不无道理了。


 

3 奇异值分解

  当权值矩阵W不为方阵时,无法进行特征值分解,我们只能进行奇异值分解了。根据定义,我们知道有如下性质:

  上式中,v为W自乘后(m阶)进行特征值分解的特征向量,lambda为对应的特征值开方(奇异值),u为l维的列向量。与特征值分解不同的是,特征向量q变成了v向量和u向量。我们可以理解,通过W右乘后,m维的v向量其在l维空间中的一一对应u向量,不会发生方向上的变化,仅仅进行伸缩。于是,同样我们可以对样本进行重新表示和计算:

  还是同样的配方,还是熟悉的味道,我们可以用奇异值的最大值用来表示任意权值矩阵W的L2惩罚项。


 

4 总结

  矩阵问题的推导,很多时候都是从方阵开始,然后到任意矩阵。特征值分解和奇异值分解刻画了矩阵对向量(或矩阵)的转换作用,特征值(奇异值)描绘了转换力度,特征向量描绘了转换方向,特征值分解的转换在同一空间中,而奇异值分解的转换在两个不同空间中进行。


 

5 参考资料

  1. 机器学习中的范数规则化之(一)L0、L1与L2范数》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值