![](https://img.haomeiwen.com/i3985559/2e12cddb6fe4f81c.png)
有时候,我们可能收集到上百或者上千的特征变量,我们很难理清楚各个特征之间的关系。
也就常常容易出现这样的情况,两个特征是强相关的,但是却都用来训练。
例如厘米和英尺,都是长度的度量,两者具有强相关关系,如果存在大量这样的冗余特征,就非常影响机器学习的效率。
这时候我们就需要进行维数约减(Dimensionality Reduction)。
去掉这些冗余特征,对于内存容量、对于算法运算速度来说,都会有所改善。
1 维数约减的方法
可是问题在于,成百上千个特征变量,甚至是更多的特征变量,我们不可能人工逐一去辨识和剔除。
而有些方法可以自动做到这一点:
主成分分析(PCA)
线性判别分别(LDA)
自组织特征映射(Self-organizing maps,SOM)
主曲线(Principal Curves)
等距映射(Isometric Feature Mapping,ISOMAP)
局部线性嵌入(Locally Linear Embedding,LLE)
拉普拉斯特征值映射(Laplacian Eigenmaps,LE)
局部保持投影(Locality Preserving Projections,LPP)
近邻保持嵌入(Neighborhood Preserving Embedding,NPE)
……
2 维数约减的直观印象
也许上面说的还是有点抽象,我们通过几个图形理解一下,维数约减是怎么运行的。
就以刚刚所说的厘米和英寸为例:
![](https://img.haomeiwen.com/i3985559/7decd6dac4d8316f.png)
我们可以将这些落点,用一根直线串起来:
![](https://img.haomeiwen.com/i3985559/2701923fd6ecf3a4.png)
出于一些误差的原因,所以落点没有在一根直线上。
对于这样的情况,我们可以将它从二维压缩到一维:
![](https://img.haomeiwen.com/i3985559/dccf427396a2f3fe.png)
类似的,如果我们有一些三维的数据:
![](https://img.haomeiwen.com/i3985559/eb811d0df6eac8ac.png)
在打印的时候我们发现,这些数据几乎落在了一个平面上:
![](https://img.haomeiwen.com/i3985559/5bcefa93e2c82c77.png)
这也说明其存在一些强相关关系,我们可以将数据从三维降到二维:
![](https://img.haomeiwen.com/i3985559/b53f74dd621b7080.png)
通过降维将数据映射到二维或者三维,我们可以绘画出图形,更好地理解这些数据。
3 维数约减的应用
一个图片其实是每一个像素亮度的数据矩阵:
![](https://img.haomeiwen.com/i3985559/da89d64099c4f670.png)
我们处理的时候将它展开成一个向量,一个像素 100 × 100 的照片,也才几KB,却有 10000 个特征维度。
而对于像素更大的图片来说,其特征维度就更多了。
直接对这样的数据进行处理,巨大的运算量是我们无法忍受的。
并且图片像素中可能有很多冗余的内容,没有能反映出图片的本质特征。
而进行维数约减,压缩特征数据,就能很好地解决运算量的问题,并且因为只保留了最本质的特征,也能很好地去除噪声的影响。
文章转载自公众号:止一之路
网友评论