Weka中的PCA时间太长运行(Weka's PCA is taking too long

2019-07-30 10:41发布

我想使用的Weka使用PCA算法特征选择。

我原来的功能空间包括〜9000点的属性,在2700个样本。
我试图减少使用下面的代码数据的维度:

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);

我的问题是:预计秧鸡的PCA这么长的计算时间? 还是我用错PCA?

如果从长远来看,时间预计:
我怎样才能调整PCA算法运行更快? 您能否提供一个替代? (+示例代码如何使用它)?

如果不是:
我究竟做错了什么? 我应该如何调用PCA使用秧鸡拿到我的降维?

更新:评论证实了我的怀疑,它正在采取比预期更多的时间。
我想知道 :我怎样才能在Java中获得PCA -使用秧鸡或备选库。
新增的赏金这一个。

Answer 1:

在WEKA代码深化之后,瓶颈正在创建的协方差矩阵,然后计算该矩阵的特征向量。 即使尝试切换到矩阵疏林实现(我用COLT的SparseDoubleMatrix2D )并没有帮助。

我想出了首先降低使用第一快速方法的维数的溶液(I使用的信息增益排名器,并且基于文档frequencey滤波),然后使用PCA上减小的维数到更远酌减。

该代码是比较复杂的,但它基本上可以归结为:

Ranker ranker = new Ranker();
InfoGainAttributeEval ig = new InfoGainAttributeEval();
Instances instances = SamplesManager.asWekaInstances(trainSet);
ig.buildEvaluator(instances);
firstAttributes = ranker.search(ig,instances);
candidates = Arrays.copyOfRange(firstAttributes, 0, FIRST_SIZE_REDUCTION);
instances = reduceDimenstions(instances, candidates)
PrincipalComponents pca = new PrincipalComponents();
pca.setVarianceCovered(var);
ranker = new Ranker();
ranker.setNumToSelect(numFeatures);
selection = new AttributeSelection();
selection.setEvaluator(pca);
selection.setSearch(ranker);
selection.SelectAttributes(instances );
instances = selection.reduceDimensionality(wekaInstances);

但是,这种方法取得了差那么用贪婪的信息增益和排序器,当I交叉验证用于估计的准确性。



Answer 2:

它看起来像你使用的PCA,其中由长期运行的情况来看,很可能是做了太多的工作,你的目的的默认配置。

看看的选项PrincipalComponents 。

  1. 我不知道如果-D意味着他们将它归为你或者你必须自己做。 您希望您的数据进行归一化(为中心的意思)了,所以我就自己做手工第一。
  2. -R设置要将占方差的量。 默认值是0.95 。 在您的数据的相关性可能不是很好,所以尽量状下将其设置为东西0.8
  3. -A设置属性包括的最大数量。 我相信默认为所有的人。 再次,你应该尝试将其设置为较低值。

我建议首先以非常宽松的设置开始了(例如-R=0.1-A=2 ),那么工作的方式达到可接受的结果。



Answer 3:

最好

为您的协方差矩阵的结构,你可以使用下面的公式,也使用MATLAB。 这是更快,那么Apache的库。

由此矩阵是m×n矩阵。 (米 - > #databaseFaces)



文章来源: Weka's PCA is taking too long to run