PCA(Principal Component Analysis,主成分分析)降维

PCA降维过程

1、求所给数据(变量)矩阵的协方差矩阵

2、求协方差矩阵的特征值和特征向量(数据矩阵的主成分是其协方差矩阵的特征向量,按照对应的特征值大小排序。最大的特征值对应的向量就是第一主成分,以此类推)

3、所有数据(变量)减去对应的平均值

4、用第三步点乘特征向量(从二维降到一维,只要点乘特征向量中的第一主成分)

例子如下:

#n是给出的变量x1和x2的数据,第一列表示x1,第二列表示x2,即n是二维的
print('----求协方差矩阵----')
n = [[0.9,1],
     [2.4,2.6],
     [1.2,1.7],
     [0.5,0.7],
     [0.3,0.7],
     [1.8,1.4],
     [0.5,0.6],
     [0.3,0.6],
     [2.5,2.6],
     [1.3,1.1]]
#a是将n转变成数组后并转置的结果
a = np.array(n).T
'''a= [[0.9 2.4 1.2 0.5 0.3 1.8 0.5 0.3 2.5 1.3]
      [1.  2.6 1.7 0.7 0.7 1.4 0.6 0.6 2.6 1.1]]
    转置后第一行为x1的数据,第二行为x2的数据'''
#c是计算得到的协方差矩阵
c = np.cov(a)
print('c=',c)
'''c= [[0.68677778 0.60666667]
      [0.60666667 0.59777778]]'''

print('-----求特征值和特征向量-----')
#eig函数返回特征值和特征向量的元组
w,v = np.linalg.eig(c)
print('特征值:',w,'\n','特征向量:',v)
#print('特征值:{}\n特征向量:{}'.format(w,v))#format输出方式
'''特征值: [1.25057433 0.03398123] 
 特征向量: [[ 0.73251454 -0.68075138]
           [ 0.68075138  0.73251454]]'''

print('------各数据样本减去对应的均值,x1样本的均值为1.17,x2样本的均值为1.3--------')
#x为减去均值后的样本数据值
x=[[-0.27,-0.3],
   [1.23,1.3],
   [0.03,0.4],
   [-0.67,0.6],
   [-0.87,0.6],
   [0.63,0.1],
   [-0.67,-0.7],
   [-0.87,-0.7],
   [1.33,1.3],
   [0.13,-0.2]]
y = [[ 0.73251454], [0.68075138]]#y为最大特征值1.25057433 对应的特征向量,从上面特征向量要竖着读
print('-------将上面的结果点乘----------')
q=np.dot(x,y)#点乘得到降维后的结果
print(q)

运行结果:

D:\python36\python.exe "D:/PyCharm files/machine learning/pca.py"
----求协方差矩阵----
c= [[0.68677778 0.60666667]
 [0.60666667 0.59777778]]
-----求特征值和特征向量-----
特征值: [1.25057433 0.03398123] 
 特征向量: [[ 0.73251454 -0.68075138]
 [ 0.68075138  0.73251454]]
------各数据样本减去对应的均值,x1样本的均值为1.17,x2样本的均值为1.3--------
-------将上面的结果点乘----------
[[-0.40200434]
 [ 1.78596968]
 [ 0.29427599]
 [-0.08233391]
 [-0.22883682]
 [ 0.5295593 ]
 [-0.96731071]
 [-1.11381362]
 [ 1.85922113]
 [-0.04092339]]

猜你喜欢

转载自blog.csdn.net/jiangsujiangjiang/article/details/80546612