我需要在Java中实现PCA。我有兴趣找到一些记录良好,实用且易于使用的东西。有什么建议吗?
答案 0 :(得分:10)
现在有许多针对Java的主要组件分析实现。
Apache Spark:https://spark.apache.org/docs/2.1.0/mllib-dimensionality-reduction.html#principal-component-analysis-pca
describe('test1', function(){
require('./test1.js');
require('./test2.js');
});
ND4J:http://nd4j.org/doc/org/nd4j/linalg/dimensionalityreduction/PCA.html
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();
}
Apache Commons Math(单线程;无框架)
//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);
注意,奇异值分解(也可用于查找主成分)具有相同的实现。
答案 1 :(得分:8)
这是一个:PCA Class。
此类包含具有varimax旋转的基本主成分分析所需的方法。选项可用于使用协方差或相关martix进行分析。使用蒙特卡罗模拟进行并行分析。基于大于1的特征值,大于蒙特卡罗特征值百分位数或大于蒙特卡罗特征值均值的提取标准是可用的。
答案 2 :(得分:3)
检查http://weka.sourceforge.net/doc.stable/weka/attributeSelection/PrincipalComponents.html weka实际上还有许多其他算法可以和PCA一起使用,weka也会不时添加更多的算法。所以,我,如果你正在研究java,那么切换到weka api。
答案 3 :(得分:1)
您可以在DataMelt项目中看到一些PCA实现:
https://jwork.org/dmelt/code/index.php?keyword=PCA
(它们在Jython中重写)。它们包括一些降低维数的图形示例。它们显示了几个Java包的用法,例如JSAT,DatumBox等。
答案 4 :(得分:0)
Smile是一个完整的ML库。您试试其PCA实现。请参阅:https://haifengl.github.io/smile/api/java/smile/projection/PCA.html
还有微笑的PCA tutorial,但教程使用Scala。