有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    看起来您正在使用PCA的默认配置,从长时间的运行时间来看,这可能是因为它为您的目的做了太多的工作

    看看PrincipalComponents的选项

    1. 我不确定-D是否意味着他们会为你正常化,或者你是否必须自己做。不过,您希望数据被规范化(以平均值为中心),所以我会先手动完成这项工作
    2. -R设置要考虑的差异量。默认值为0.95。数据中的相关性可能不好,所以请尝试将其设置为0.8之类的值
    3. -A设置要包含的最大属性数。我想所有的都是默认的。同样,你应该试着把它调低一点

    我建议首先从非常宽松的设置开始(例如-R=0.1-A=2),然后逐步达到可接受的结果