错误使用pca,输出参数太多

调用pca降维:[score,latent]=pca(Abs);
报错输出参数太多,没搜到什么资料,看了官方文档调用方式也没问题
matlab自带的pca函数官方文档:https://ww2.mathworks.cn/help/stats/pca.html

emm这个问题困扰了我好久qaq
突然想到我调用的是我想调用的那个pca呢,会不会存在重名函数?
一搜五个
一搜在不同工具箱里有五个pca,看了一下是两种不同的。
然后照着这篇文章:https://blog.csdn.net/cakaf/article/details/109283091
更改首先调用路径(addpath语句)就OK了

虽说在这个问题上耗了一段时间,但是查了很多pca的资料,发现了两点,
其一,训练集和测试集要分别降维,统一降维存在“信息泄露”问题,测试集的信息提前被训练集知道了,相当于作弊
其二,对测试集的降维好像要依赖于训练集的降维方法。这个还没仔细找。

搜了一些pca资料记录下:
协方差:度量两个变量变动的同步程度,也就是度量两个变量线性相关性。如果两个变量的协方差为0,则认为二者线性无关
协方差矩阵:由数据集中两两变量的协方差构成

pca算法步骤
原始数据m行n列(每行一个样本)
①将X的每一列零均值化(用该列数据减掉该列均值)
②计算协方差矩阵D=X’X ,并计算D的特征值与特征向量
③特征向量按特征值(大→小)排列(竖着按列排)为矩阵P’
④取矩阵P’前k列构成矩阵P(想降至k维)
⑤降维后的数据Y=XP

贡献率是指选取的p个特征值之和占全部特征值之和的比重,一般取85%以上为特征值越大,对应的特征向量(主成分)包含的信息量越大

训练集降维:https://blog.csdn.net/fengkuangdexiaoji123/article/details/80986625
测试集的降维与训练集不一样,因为我们对于模型来说,是在训练集上进行训练的,所以如果要使用这个模型对测试集进行测试,那么就需要利用相同的处理将测试集中的数据也变换到与降维后训练集数据相同的数据空间中。具体来说就是在对测试集降维的时候,在第一步数据零均值化的过程中,要减去的是训练集中相对应向量的均值,然后在乘以训练集的COEFF投影矩阵

之后再详细搜一搜这个,以及降维后数据可视化的问题
另外还有一点小感悟,看辣么多博客不如首先看一看官方文档,再说现在很多官方文档都有中文翻译了

猜你喜欢

转载自blog.csdn.net/qq_45832958/article/details/113767422
PCA