采取几个主要成分?
data-mining
machine-learning
5
0

我知道主成分分析会对矩阵进行SVD,然后生成特征值矩阵。要选择主要成分,我们仅需采用前几个特征值。现在,我们如何决定应从特征值矩阵中获取的特征值数量?

参考资料:
Stack Overflow
收藏
评论
共 5 个回答
高赞 时间 活跃

就像其他人所说的那样,绘制出解释的方差并没有什么坏处。

如果您将PCA用作监督学习任务的预处理步骤,则应交叉验证整个数据处理管道,并将PCA维数视为超参数,以使用网格搜索对最终监督分数(例如,用于分类的F1分数)进行选择或RMSE进行回归)。

如果对整个数据集进行交叉验证的网格搜索成本太高,请尝试使用2个子样本,例如,一个子样本的数据为1%,第二个子样本的数据为10%,然后查看您是否为PCA维度得出了相同的最佳值。

收藏
评论

没有正确的答案,它在1到n之间。

可以将主要部分想像成您从未去过的城镇的街道。您应该走几条街来了解这个镇?

好吧,显然您应该参观主要街道(第一部分),也许还应该参观其他一些主要街道。您需要参观每条街道以充分了解小镇吗?可能不是。

要完全了解该镇,您应该参观所有街道。但是,如果您可以参观,例如说50条街道中的10条,对小镇有95%的了解,该怎么办?这样够好吗?

基本上,您应该选择足够的组件来解释足够的差异。

收藏
评论

根据您的情况,通过将数据投影到ndimndim定义最大允许相对误差可能会很有趣。

我将通过一个小Matlab示例来说明这一点。如果您对代码不感兴趣,请跳过该代码。

我首先将生成一个随机矩阵,其中包含n样本(行)和p个要素,这些要素恰好包含100个非零主成分。

n = 200;
p = 119;
data = zeros(n, p);
for i = 1:100
  data = data + rand(n, 1)*rand(1, p);
end

该图像将类似于:

在此处输入图片说明

对于此示例图像,可以通过将输入数据投影到ndim尺寸来计算相对误差,如下所示:

[coeff,score] = pca(data,'Economy',true);

relativeError = zeros(p, 1);
for ndim=1:p
    reconstructed = repmat(mean(data,1),n,1) + score(:,1:ndim)*coeff(:,1:ndim)';
    residuals = data - reconstructed;
    relativeError(ndim) = max(max(residuals./data));
end

绘制尺寸(主成分)数量函数的相对误差将导致下图:

在此处输入图片说明

根据此图,您可以确定需要考虑的主要成分。在该理论图像中,拍摄100个分量会得到精确的图像表示。因此,采用100多个元素是没有用的。例如,如果要最大5%的误差,则应采用约40个主要成分。

免责声明 :所获得的值仅对我的人工数据有效。因此,不要在您的情况下盲目使用建议的值,而要执行相同的分析,并在所产生的错误和所需的组件数量之间进行权衡。

代码参考

收藏
评论

要确定要保留多少个特征值/特征向量,应首先考虑进行PCA的原因。您是为了降低存储需求,降低分类算法的维数还是其他原因而这样做?如果没有严格的限制,建议您绘制特征值的累加总和(假设它们以降序排列)。如果在绘图之前将每个值除以特征值的总和,则绘图将显示保留的总方差与特征值数的比例。然后,该图将很好地指示您何时到达收益递减点(即,通过保留其他特征值而获得的差异很小)。

收藏
评论

有很多启发式的用途。

例如,采用前k个特征向量,它们至少捕获了总方差的85%

但是,对于高维,这些启发式方法通常不是很好。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号