这是第二个无监督学习的算法,是一个降维算法,可以把多个特征进行压缩,我在压缩后计算了与原数据的偏差,当我把四个特征压缩为三个时偏差只有0.5%,压缩为一个特征时偏差也只有7%,当只有一个特征时把数据展开也可以轻易的分为三类,所以这是一个非常优秀的算法。
值得注意的点是在计算奇异矩阵时遇到的问题,首先我们有一个m×n(m个数据,n个特征)的矩阵X,我们希望得到一个m×k的矩阵Z,具体降维过程分三步:
·第一步:均值归一化,就是把每一个数都减去总数的平均值,得到的一个和平均数差距的新矩阵Xj。
·第二部:计算协方差矩阵,在这里要注意的时,Xj(i)是一个n×1的矩阵,Xj(i)的转置是一个1×n的矩阵,所以他俩相乘得到一个n×n的矩阵Σ,其实就是的到一个奇异矩阵,因为只有奇异矩阵才可能有特征值。
·第三部:奇异值分解,计算∑的特征值,使用svd()函数分解出U,S,V三个向量,U也是一个n×n的矩阵,在U中选取k个向量,获得一个n×k的矩阵Ureduce,新的特征矩阵z就等于Ureduce的转置(k×n)乘以X(n×m)结果得到一个k×m的新矩阵
1 | #!/usr/bin/python |