【发布时间】:2012-07-13 23:45:59
【问题描述】:
我正在尝试使用 Weka 通过 PCA 算法进行特征选择。
我的原始特征空间在 2700 个样本中包含约 9000 个属性。
我尝试使用以下代码降低数据的维度:
AttributeSelection selector = new AttributeSelection();
PrincipalComponents pca = new PrincipalComponents();
Ranker ranker = new Ranker();
selector.setEvaluator(pca);
selector.setSearch(ranker);
Instances instances = SamplesManager.asWekaInstances(trainSet);
try {
selector.SelectAttributes(instances);
return SamplesManager.asSamplesList(selector.reduceDimensionality(instances));
} catch (Exception e ) {
...
}
但是,它没有在 12 小时内完成运行。卡在selector.SelectAttributes(instances);方法中。
我的问题是: weka 的 PCA 需要这么长的计算时间吗?还是我错误地使用了 PCA?
如果预计运行时间较长:
如何调整 PCA 算法以使 运行得更快?你能建议一个替代方案吗? (+示例代码如何使用)?
如果不是:
我做错了什么?我应该如何使用 weka 调用 PCA 并获得降维?
更新: cmets 证实了我的怀疑,即它花费的时间比预期的要长得多。
我想知道:如何在 java 中获得 PCA - 使用 weka 或替代库。
为此添加了赏金。
【问题讨论】:
-
我不知道 weka,但这不是一个合理的时间量。 PCA 的运行时间与矩阵乘法一样长(因为本质上就是这样)。
-
@GuyAdini:我认为这是不合理的,我在滥用它。你知道我可以使用的开源库[最好是java]吗? [我也很乐意获得如何使用它的示例代码]
-
@GuyAdini,PCA 本质上不是矩阵乘法;这是一个困难得多的问题。不足以证明 12 小时的合理性,但仍然如此。
-
@GuyAdini,计算这些特征向量是计算的主要部分。最粗略的方法是采用协方差矩阵的大幂。
-
我不知道这个问题被否决了(在它发布半年后)。它显示了研究(我发布了我使用的代码),我相信问题非常清楚(尽管解决方案可能不是),并且我相信它对于需要使用具有大特征空间的 Weka 使用 PCA 的任何人都很有用。
标签: java algorithm machine-learning weka