2012-05-15 23 views
8

Tôi cần triển khai PCA trong Java. Tôi quan tâm đến việc tìm kiếm nội dung nào đó được tài liệu tốt, thực tế và dễ sử dụng. Bất kỳ đề xuất?Thực hiện PCA trong Java

Trả lời

8

Đây là một: PCA Class.

Lớp này chứa các phương pháp cần thiết cho Phân tích thành phần chính cơ bản với xoay vòng varimax. Các tùy chọn có sẵn cho một phân tích bằng cách sử dụng hiệp phương sai hoặc siêu kết hợp. Một phân tích song song, sử dụng mô phỏng Monte Carlo, được thực hiện. Các tiêu chí khai thác dựa trên các giá trị riêng biệt lớn hơn sự thống nhất, lớn hơn một tỷ lệ phần trăm riêng của Monte Carlo hoặc lớn hơn các phương tiện trị riêng của Monte Carlo có sẵn.

3

séc http://weka.sourceforge.net/doc.stable/weka/attributeSelection/PrincipalComponents.html WEKA trên thực tế có nhiều thuật toán khác mà có thể được sử dụng với cùng với PCA và cũng WEKA là thêm thuật toán hơn bất cứ lúc nào. vì vậy tôi điều, nếu bạn đang làm việc trên java sau đó chuyển sang weka api.

+3

Liên kết không hợp lệ, hãy cố gắng tránh trả lời các câu hỏi chỉ với một liên kết vì chúng có thể hết hạn và không đáng tin cậy trong tương lai. – Iancovici

8

Hiện tại có một số triển khai Phân tích thành phần chính cho Java.

  1. Apache Spark: https://spark.apache.org/docs/2.1.0/mllib-dimensionality-reduction.html#principal-component-analysis-pca

    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(); 
    } 
    
  2. ND4J: http://nd4j.org/doc/org/nd4j/linalg/dimensionalityreduction/PCA.html

    //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); 
    
  3. Apache Commons Math (đơn ren, không có khung)

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

Lưu ý, Phân tích giá trị số ít, cũng có thể được sử dụng để tìm Thành phần chính, có các triển khai tương đương.