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


先求得ATA的特征值为
对应的特征向量和矩阵为:
下面对使用SVD方法找出的PCA结果画图查看一下 。
defdraw_vector(v1,v0,ax=None):ax=axorplt.gca()arrowprops=dict(arrowstyle='plt.scatter(X[:,0],X[:,1],alpha=0.3)forlength,vectorinzip(pca.explained_variance_,pca.components_):v=vector*3*np.sqrt(length)draw_vector(pca.mean_,pca.mean_+v)plt.axis('equal')
Pca.components_:array,shape(n_components,n_features)
Components_=V
Principalaxesinfeaturespace,representingthedirectionofmaximumvarianceinthedata 。
特征空间中的主轴(主要成分) , 展示数据中最大方差的方向 , (要看你需要 , 需要两个主成分 , n_components=2时就是前两大) , 确定的是主成分的方向 。
Pca.explained_variance_:array,shape(n_components,)
Explained_variance_=(S**2)/(n_samples-1)
Theamountofvarianceexplainedbyeachoftheselectedcomponents.
选择的成分的方差的大小 , 确定的是对应的方向上的大小 , 也就是上图中两个黑色箭头的长短 , 排序是S中方差从大到小的排序 。
Pca.mean_:array,shape(n_feature)
Per-featureempiricalmean,estimatedfromthetrainingset.EqualtoX.mean,
计算出整个训练集中点群的中间点位置 , 即上图中两个黑色箭头的交叉点(箭头的起点) 。
因为我们给定的n_components=2 , 所以上图中有两个向量 , V确定了这两个矢量的方向 , 在计算时我们使用了sqrt(explained_variance_) , 对explained_variance开了根号 , 而explained_variance是由S的平方除以(n_samples-1)得到的 , 所以这里的结果和S是线性的关系 , 从而确定了这两个矢量的大小 , 由此画出了上图中两个黑色的既有长度 , 又有大小的箭头 。 箭头越长说明图上的散点在这个方向上越分散 , 不同的点在这个方向上更能有较大的区别 , 而sigma值更小的 , 表现出来箭头也更短 , 所以长箭头表示的方向比短箭头表示的方向在这组数据中更为主要 , 图中两个黑色箭头互相垂直 。


推荐阅读