P3344.第2题-均方误差
题目内容
给定一批训练样本与若干测试样本,请你手写实现主成分分析 (PCA) 并仅保留第一主成分来压缩-重建数据,最后输出每个测试样本在重建后的均方误差 (MSE) 。
1.输入读取
2.去均值 (mean−center)
Xc=X−μ,μ=mean(Xtrain)
3.协方差矩阵(总体方差,ddof=0)
∑=n1XcTXc 。
4.求第一主成分
-
用 numpy.linalg.eigh 得到全部特征对 (λi,νi)
-
按特征值从大到小选取第一主成分 νmax
-
方向标准化规则 -- 若 νmax 首个非零分量为负,则整体乘以 −1 ;这样方向唯一
5.投影-重建
z=(x−μ)Tνmax, x^=μ+z νmax
6.输出
MSE(x)=m1∑j=1m(xj−x^j)2
输入描述
标准输入仅一行,为如下 JSON 对象:
{
"train":[[...],[...],...],
"test":[[...],[...],...]
}
其中
输出描述
标准输出仅一行 -- 测试集中 每个样本 MSE 的字符串形式(两位小数),用 JSON 数组包裹.
补充说明
1.算法不含随机过程(无需设置随机种子)。
2.为了确保通过所有测试用例,仅允许使用 Numpy库与Pandas库实现本题。
3.使用总体方差 np.var(x,ddof=0).
样例1
输入
{"train": [[0,0],[0,1],[1,0],[1,1]],"test":[[0.5,0.5],[1.5,1.5]]}
输出
["0.00","0.50"]