当数据特征较多时,基本有两种方法:
1 PCA降维
2 Feature Selection(特征选择)
PCA降维
<1> PCA降维的思路:(假设从2维降到1维)
(红、蓝分别代表两个维度,叉叉代表样本)
维度红:每个样本都依据红线进行投影(投影到红线上),会发现数据分布在红线上会比较密集
维度蓝:每个样本都依据蓝线进行投影(投影到蓝线上),会发现数据分布在蓝线上相对没有那么密集
而实际上,数据一旦很紧密,那么model就很难将其区分开;
什么样的参数能够度量发散性呢?——方差
所以就将PCA降维问题,转化成求取方差的问题,即求解
该公式的方差。
<2> 另一个角度出发 ,在吴恩达机器学习中,将PCA问题,描述为 每个点到他们对应直线上的投影点的距离(也就投影误差),使得距离的平方最小
常规来说,在进行PCA之间,需要进行均值归一化和特征规范化,使得所有样本X1,X2的均值分别都为0
所以,PCA降维,如从2维降到1维,会去找个向量(向量是来自2维的),能够最小化投影误差。
=====》生产中,常常需要将N维特征降到K维特征,这种情况下,我们不仅需要找到单个向量(一个维度的向量代表一个方向),而是需要找到K个方向来对数据进行投影(同时需要最小化投影误差)
<3> PCA与线性回归的区别
线性回归:
是拟合一条直线,使得点到线的垂直距离最小。
PCA:
是使得这些"斜着"的距离最小,实际上是最短的正交距离,也就是点x与红色直线的最短距离
<4> PCA算法
a. 数据预处理
在做PCA之前,需要进行数据预处理(特征缩放/均值标准化)
均值标准化:计算样本n个特征的每个特征的均值,假设Xj是某个样本的第j个特征,uj是所有样本的第j个特征的均值,均值标准化就是使用Xj-uj来代替Xj
特征缩放:缩放不同的特征进入一个相对的价值范围,比如说(Xj-uj)/sj,这里的sj是特征j的标准偏差
b.PCA算法需要计算两个东西
一个是向量 u (以2维来说,有了向量u就会知道投影的那条线,即降维后的样本分布)降到k维就是计算k个向量;
另一个就是降维后的新的特征值z,比如说2维特征(X1,X2),降到1维后特征(Z1),这个Z1如何计算出来。
计算过程:
<1> 计算协方差Sigma,Sigma是一个nn矩阵
<2> 计算Sigma的特征向量
使用svd(奇异值分解),最终得到3个矩阵,我们需要矩阵U(也是n*n矩阵)
如果我们降到K维,那么就是提取前k个向量
<3> 得到这k个向量了,那么开始计算z值
U矩阵降到k为,U_reduce=[u^(1), u^(2), u^(3)... u^(k)] ,这是一个n*k,即n行k列矩阵,
将其转置得到k行n列,再乘以特征X(n行1列),最终得到k维向量,即z^(1), z^(2)... z^(k)
<5>主成分数量选择
Xapprox应该就是X与向量u的乘积
平均投影误差/数据总方差<=0.01
选择K使得99%的方法被保留下来。
那么,如何快速地知道选择哪一个k呢?
上一步中使用奇异值分解 svd(Sigma) 会返回3个矩阵 [U,S,V],
其中的S(N*N),这个矩阵除了对角线上的元素,其余都会为0,
那么计算平均投影误差/数据总方差<=0.01,可以转换成计算
即