Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PCA在Java中的实现_Java_Pca - Fatal编程技术网

PCA在Java中的实现

PCA在Java中的实现,java,pca,Java,Pca,我需要在Java中实现PCA。我感兴趣的是找到一些记录良好、实用且易于使用的东西。有什么建议吗?这里有一个: 此类包含使用varimax旋转进行基本主成分分析所需的方法。选项可用于使用协方差或相关martix进行分析。采用蒙特卡罗模拟进行了并行分析。基于大于单位的特征值、大于蒙特卡罗特征值百分位数或大于蒙特卡罗特征值平均值的提取标准可用 检查 事实上,weka还有许多其他算法可以与PCA一起使用,而且weka还不时添加更多的算法。所以我想,如果您正在使用java,那么请切换到weka api。现

我需要在Java中实现PCA。我感兴趣的是找到一些记录良好、实用且易于使用的东西。有什么建议吗?

这里有一个:

此类包含使用varimax旋转进行基本主成分分析所需的方法。选项可用于使用协方差或相关martix进行分析。采用蒙特卡罗模拟进行了并行分析。基于大于单位的特征值、大于蒙特卡罗特征值百分位数或大于蒙特卡罗特征值平均值的提取标准可用

检查
事实上,weka还有许多其他算法可以与PCA一起使用,而且weka还不时添加更多的算法。所以我想,如果您正在使用java,那么请切换到weka api。

现在有许多用于java的主成分分析实现

  • Apache Spark:

  • 注意,奇异值分解也可用于查找主组件,它具有等效的实现。

    是一个成熟的java ML库。您可以尝试一下它的PCA实现。请参阅:


    还有带微笑的PCA,但本教程使用Scala。

    您可以在DataMelt项目中看到PCA的一些实现:


    (它们是用Jython重写的)。其中包括一些降维的图形示例。它们显示了多个Java软件包的使用情况,如JSAT、DatumBox和其他软件包。

    无效链接,请尽量避免只使用链接回答问题,因为这些问题可能会过期,将来可能不可靠。请记住,在PCA之前将数据集中。注意,洛蒂在示例中隐式地做到了这一点,它是Apache2.0许可的。它似乎自动将数据居中。并提供预测。并在适当和允许的情况下切换到SVD实现。为什么这个问题离题了?评论至少可以解释这一选择。因为我发现这个问题很有趣,就像22个人投了更高的票一样,而且答案是正确的。
    SparkConf conf = new SparkConf().setAppName("PCAExample").setMaster("local");
    try (JavaSparkContext sc = new JavaSparkContext(conf)) {
        //Create points as Spark Vectors
        List<Vector> vectors = Arrays.asList(
                Vectors.dense( -1.0, -1.0 ),
                Vectors.dense( -1.0, 1.0 ),
                Vectors.dense( 1.0, 1.0 ));
    
        //Create Spark MLLib RDD
        JavaRDD<Vector> distData = sc.parallelize(vectors);
        RDD<Vector> vectorRDD = distData.rdd();
    
        //Execute PCA Projection to 2 dimensions
        PCA pca = new PCA(2); 
        PCAModel pcaModel = pca.fit(vectorRDD);
        Matrix matrix = pcaModel.pc();
    }
    
    //Create points as NDArray instances
    List<INDArray> ndArrays = Arrays.asList(
            new NDArray(new float [] {-1.0F, -1.0F}),
            new NDArray(new float [] {-1.0F, 1.0F}),
            new NDArray(new float [] {1.0F, 1.0F}));
    
    //Create matrix of points (rows are observations; columns are features)
    INDArray matrix = new NDArray(ndArrays, new int [] {3,2});
    
    //Execute PCA - again to 2 dimensions
    INDArray factors = PCA.pca_factor(matrix, 2, false);
    
    //create points in a double array
    double[][] pointsArray = new double[][] { 
        new double[] { -1.0, -1.0 }, 
        new double[] { -1.0, 1.0 },
        new double[] { 1.0, 1.0 } };
    
    //create real matrix
    RealMatrix realMatrix = MatrixUtils.createRealMatrix(pointsArray);
    
    //create covariance matrix of points, then find eigen vectors
    //see https://stats.stackexchange.com/questions/2691/making-sense-of-principal-component-analysis-eigenvectors-eigenvalues
    
    Covariance covariance = new Covariance(realMatrix);
    RealMatrix covarianceMatrix = covariance.getCovarianceMatrix();
    EigenDecomposition ed = new EigenDecomposition(covarianceMatrix);