按照题意一步一步实现即可。
数据读取与转换
train
和测试集 test
。numpy
数组方便后续矩阵运算。均值向量计算(Mean Centering)
给定一批训练样本与若干测试样本,请你手写实现主成分分析 (PCA) 并仅保留第一主成分来压缩-重建数据,最后输出每个测试样本在重建后的均方误差 (MSE) 。
1.输入读取
train - 二维列表,每行是一个 m 维数值特征向量
test - 二维列表,维度同上
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 数组一行输出
标准输入仅一行,为如下 JSON 对象:
{
"train":[[...],[...],...],
"test":[[...],[...],...]
}
其中
train 长度 n≥2 ,每行长度 m≥2
test 任意条数,维度同 train
标准输出仅一行 -- 测试集中 每个样本 MSE 的字符串形式(两位小数),用 JSON 数组包裹.
1.算法不含随机过程(无需设置随机种子)。
2.为了确保通过所有测试用例,仅允许使用 Numpy库与Pandas库实现本题。
3.使用总体方差 np.var(x,ddof=0).
输入
{"train": [[0,0],[0,1],[1,0],[1,1]],"test":[[0.5,0.5],[1.5,1.5]]}
输出
["0.00","0.50"]