java Weka的PCA运行时间太长
我正在尝试使用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并获得降维
更新:这些评论证实了我的怀疑,即这需要比预期多得多的时间。
我想知道:如何使用weka或其他库获取java中的PCA。
为这件事增加了一笔赏金
# 1 楼答案
看起来您正在使用PCA的默认配置,从长时间的运行时间来看,这可能是因为它为您的目的做了太多的工作
看看PrincipalComponents的选项
-D
是否意味着他们会为你正常化,或者你是否必须自己做。不过,您希望数据被规范化(以平均值为中心),所以我会先手动完成这项工作李>-R
设置要考虑的差异量。默认值为0.95
。数据中的相关性可能不好,所以请尝试将其设置为0.8
之类的值李>-A
设置要包含的最大属性数。我想所有的都是默认的。同样,你应该试着把它调低一点李>我建议首先从非常宽松的设置开始(例如
-R=0.1
和-A=2
),然后逐步达到可接受的结果