意图使用面向对象的编程实现主成分分析算法
实现过程中遇到了一些意料之外的情况 没有输出数据
_*_ coding.utf-s _*_
开发人员:Mark
开发时间:2021/10/7 15:43
文件名: 主成分分析.py
import numpy as np
class PAC:
'''一个类完成主成分分析算法
'''
def __init__(self,x,y):
self.x = x
self.y = y
def guiyi(self):
'''数据归一化
m,n分别是x,y数组的个数
x_num,y_num 是各自数组的和
xx,yy是平均值
循环得到归一化后的x,y序列'''
m = len(self.x) - 1
n = len(self.y) - 1
x_num = sum(self.x)
y_num = sum(self.y)
xx = x_num / m
yy = y_num / n
for i in range(m):
self.x[i] = self.x[i] - xx
self.y[i] = self.y[i] - yy
return self.x,self.y
def xiefangchajuzheng(self):
'''求解协方差矩阵'''
PAC.guiyi()
self.x = self.x[:, np.newaxis]
self.y = self.y[:, np.newaxis]
X = np.hstack((self.x, self.y))
Juzhen = (np.cov(X.self.x))
return Juzhen
def max(self):
'''协方差矩阵的特征值的最大值
a是协方差矩阵的特征值,
b是协方差矩阵的特征向量
h是特征向量的最大值并返回'''
PAC.xiefangchajuzheng()
a,b = np.linalg.eig(Juzhen)
h = max(b)
return h
def final_data(self):
'''最终的矩阵输出
利初始矩阵对特征向量的投影
'''
PAC.max()
tran_h = np.transpose(h)
array = np.array([self.x,self.y])
final_array = array * tran_h
print(final_array)
PAC([2.5,0.5,2.2,1.9,3.1,2.3,2,1,1.5,1.1],[2.4,0.7,2.9,2.2,3.0,2.7,1.6,1.1,1.6,0.9])