
正文
PCA历程详细python代码(原创)
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
#PCA主成分分析,原文为文末的链接,代码为自己亲自手码 def cov_out1(dx,dy):
#第一步:求解x,y各自的均值
mean_x=0
mean_y=0
for i in range(len(dx)):
mean_x+=dx[i]
mean_y+=dy[i]
# print(i)
mean_x/=len(dx)
mean_y/=len(dy)
# print('mean_x:',mean_x)
# print('mean_y:',mean_y)
#第二步:求解xy的联合均值
mean_xy=0
for i in range(len(dx)):
mean_xy+=dx[i]*dy[i]
mean_xy/=len(dy)
# print('mean_xy',mean_xy) return mean_xy-mean_x*mean_y
# def cov_out2(dx,dy):
#第一步:求解x,y各自的均值
mean_x=0
mean_y=0
for i in range(len(dx)):
mean_x+=dx[i]
mean_y+=dy[i]
mean_x/=len(dx)
mean_y/=len(dy)
# print('mean_x:',mean_x)
# print('mean_y:',mean_y)
#第二步:求解联合均值
mean_x_y=0
for i in range(len(dx)):
mean_x_y+=(dx[i]-mean_x)*(dy[i]-mean_y)
# print('mean_x_y',mean_x_y)
return mean_x_y/len(dx)
# dx=[2.5,0.5,2.2,1.9,3.1,2.3,2.0,1.0,1.5,1.1]
dy=[2.4,0.7,2.9,2.2,3.0,2.7,1.6,1.1,1.6,0.9]
# print(len(dx))
# print(len(dy)) # covx=cov_out2(dx,dx)
# covy=cov_out2(dy,dy)
# print(covx)
# print(covy) # cov1=cov_out1(dx,dy)
# cov2=cov_out2(dx,dy)
# print(cov1)
# print(cov2) import numpy as np #第一步:求dx,dy的平均值
print('第一步:求dx,dy的平均值')
mean_x=np.mean(dx)
mean_y=np.mean(dy)
print(mean_x,mean_y) #第二步:求解DataAjust
print('第二步:求解DataAjust')
dx=dx-mean_x
dy=dy-mean_y
print(dx)
print(dy)
DataAdjust=np.vstack((dx,dy))
print(DataAdjust.T) covx=cov_out2(dx,dx)
covy=cov_out2(dy,dy)
covxy=cov_out2(dx,dy)
covyx=cov_out2(dy,dx)
print(covx)
print(covy)
print(covxy)
print(covyx) #第三步:求解特征值和特征向量
print('第三步:求解特征值和特征向量')
cov=np.array([[covx,covxy],[covyx,covy]])
print(cov) a,b=np.linalg.eig(cov)
print('特征值')
print(a)
print("特征矩阵")
print(b) #第四步:将特征值由大到小排序,选取其中最大的k个(这里是1个)
print('第四步:将特征值由大到小排序,选取其中最大的k个(这里是1个)')
a_max=np.max(a)
print(a_max)
a_index=np.where(a==a_max)[0][0]
print(a_index)
b_max=b[:,a_index]
print(b_max) #第五步:将样本点投影到选取的特征向量上
print('第五步:将样本点投影到选取的特征向量上')
finalData=np.dot(DataAdjust.T,b_max)
print(finalData)
引文:http://www.cnblogs.com/jerrylead/archive/2011/04/18/2020209.html






