吾本轻狂|PCA 主成分分析( 三 )


假设A矩阵如下:
吾本轻狂|PCA 主成分分析下面将A矩阵分解为U , V , S:计算U时 , 因为U是AAT的正交特征矩阵 , 所以下面要先计算AAT , 然后待求得特征值之后 , 再计算它的正交矩阵:
吾本轻狂|PCA 主成分分析计算特征值:
吾本轻狂|PCA 主成分分析得AAT的特征值为
吾本轻狂|PCA 主成分分析代入特征值 , 并计算得特征向量和矩阵为:
吾本轻狂|PCA 主成分分析由于V是ATA的正交特征矩阵 , 那么可以使用相同的方法计算V:
先求得ATA的特征值为
吾本轻狂|PCA 主成分分析
对应的特征向量和矩阵为:
吾本轻狂|PCA 主成分分析由上面得到的U和V , 可以通过下式求解得S:
吾本轻狂|PCA 主成分分析把所求得的矩阵代回下式计算验证 , 最后等于A , 没有问题 。
吾本轻狂|PCA 主成分分析至于为什么可以通过这样的方式计算得到左奇异矩阵 , 右奇异矩阵和奇异值 , 相关证明自己找文献哈 。
下面对使用SVD方法找出的PCA结果画图查看一下 。
def draw_vector(v1,v0,ax=None):ax=ax or plt.gca()arrowprops=dict(arrowstyle='<-',linewidth=2,shrinkA=0,shrinkB=0,color='Black')ax.annotate('',v1,v0,arrowprops=arrowprops)#draw a FancyArrowPatch arrow between the positions xy and xytext(v1 and v0).plt.scatter(X[:,0],X[:,1],alpha=0.3)for length,vector in zip(pca.explained_variance_,pca.components_):v=vector*3*np.sqrt(length)draw_vector(pca.mean_,pca.mean_+v)plt.axis('equal')
吾本轻狂|PCA 主成分分析代码中相关参数解析:
Pca.components_:array,shape(n_components, n_features)
Components_=V
Principal axes in feature space, representing the direction of maximum variance in the data 。
特征空间中的主轴(主要成分) , 展示数据中最大方差的方向 , (要看你需要 , 需要两个主成分 , n_components=2时就是前两大) , 确定的是主成分的方向 。
Pca.explained_variance_:array,shape(n_components,)
Explained_variance_=(S**2)/(n_samples-1)
The amount of variance explained by each of the selected components.