2025年6月

人一定还是得自律,还是得靠自己,人生的路那么多,不能总是依靠别人帮忙,别人也不能总是帮忙,一定要自律,要靠自己战胜自己。

每一天都比昨天更强一点,每一天都比昨天更好一点,不断超越自己,只要做自己就好了。

人生的路子那么多,人的生命那么短暂,也许有的时候你的上限是被决定了的,但是你其实还可以依靠自己来决定你的下限。

或许有时候,我们还能做到更多,我们还远远没有到达我们自己的极限。

未来有望,前途有望,每个人的力量,青年的力量。

汇聚在一起,就能点燃星火。

## 使用sklearn进行pca(主成分分析)处理
import numpy as np
from sklearn.decomposition import PCA
import pandas as pd
# newdata=pd.read_excel("test.xlsx",sheet_name='Sheet5')
# 在此处可以导入数据
tempdata=pd.read_excel("c.xlsx").to_numpy()

zscore = (tempdata-np.mean(tempdata))/np.std(tempdata)
# print("zscore = ",zscore)
pca = PCA()
socpca = pca.fit_transform(zscore)
# print(socpca)
# 打印主成分(特征向量矩阵)
print("主成分:\n", pca.components_.T)

# 打印特征值(即主成分的方差)
eigenvalues = pca.explained_variance_
print("特征值:\n", eigenvalues)

# 打印每个主成分的贡献率
contribution_rate = pca.explained_variance_ratio_
print("贡献率:\n", contribution_rate)

# 打印累计贡献率
cum_contribution_rate = np.cumsum(contribution_rate)
print("累计贡献率:\n", cum_contribution_rate)

# # 打印降维后的数据
# print("降维后的数据:\n", socpca)

# 需要注意的是,使用sklearn求解出来的结果与matlab求解出来的结果存在正负号的误差,但是整体计算结果相同。
#出现这样的问题并非是由于计算错误,而是在计算的时候使用的方法不同导致的正常现象,只要数值是相同的即可。
# 猜测可能是在过程中使用了有区别的处理方法。
# 在本程序中,先是自行处理出Zscore标准化的结果,再使用sklearn的函数进行进一步的处理。

你可能会发现,在python使用Numpy的mean再加std使用zscore算法计算出来的标准差结果与在matlab中使用zscore函数计算出来的结果存在10e-3级别的误差,我虽然还没有知道是为什么导致的这样的误差,但是由于误差非常小,我认为这是正常的现象,同时,直接使用numpy的结果进行运算出来的最终主成分分析的结果与matlab计算出来的结果在数值上相同,我认为这是没有问题的。

在matlab中如何进行主成分分析计算?

直接使用pca()函数即可,需要注意的是,pca函数接受的结果是原始的矩阵,而不是像python一样经过标准化处理之后的矩阵。

在Matlab中同样可以使用这样类似手搓的方式求出主成分,但是计算出来的结果和pca函数与python计算出来的结果相比,同样也会有正负号的差异,而且同时结果从数值上来看也是相同的,这更进一步证明使用python计算出的来结果与pca函数计算出来的结果存在正负号的差异是十分正常的现象。