线性回归简单实践
代码如下:
import numpy as np
#如果取不到,默认取很大的维度
def myPCA(data,n_components = 100000000):# data的均值,axis是每个属性的均值mean_vals = np.mean(data,axis=0)mid = data - mean_vals#求斜方差#rowvar = False,如果不指定False那么会对行进行斜方差计算,# 而这里我需要对列进行斜方差进行计算cov_mat = np.cov(mid,rowvar=False)#引入线性计算的包from scipy import linalg#求斜方差的特征值和特征向量eig_vals,eig_vects = linalg.eig(np.mat(cov_mat))#取出最大值所对应的特征向量,得到排序后的索引eig_val_index = np.argsort(eig_vals)#取最大的eig_val_index = eig_val_index[:-(n_components+1):-1]#取出特征向量eig_vects = eig_vects[:,eig_val_index]#利用矩阵乘法low_dim_mat = np.dot(mid,eig_vects)#返回转换后的矩阵转换后的特征值return low_dim_mat,eig_valsdata = np.array([np.array([2.5,0.5,2.2,1.9,3.1,2.3,2,1,1.5,1.1]),np.array([2.4,0.7,2.9,2.2,3.0,2.7,1.6,1.1,1.6,0.9])]).T
print(myPCA(data,n_components=1))
运行结果如下: