Java机器学习常用三方库
weka.jar
Weka是一个能处理cvs和arff数据文件格式的三方库。并带有各种分类,聚类等机器学习算法。
核心类:weka.core.Instances, weka.core.Instance, weka.core.Attribute
常用方法:
Instances instances = new Instances(new FileReader(new File(“src/data/test.arff”)));
int n = instances.numInstances(); 获取实例个数。
int m = instances.numAttributes(); 获取属性个数。
Instance iInstance = Instances.instance(int i), 获取第i行实例;
double d = iInstance.value(int j), 获取iInstance的第j个属性上的取值;
Note:如果数据集的属性是实数(real, numeric)数据类型的话,上式是获取值。如果是Symbolic,Nominal数据类型的话,上式是获取值在属性取值集合中的下标(double类型)。
String s = iInstance.stringValue(int j); 获取iInstance的第j个属性上的取值(字符串类型), 一般只有对于Symbolic类型的数据集,才这样用。
Attribute kAttr = instances.attribute(int k), 获取数据集的第k个属性
kAttr.numValues(), 获取第k个属性的取值个数。
String s = kAttr.value(int q), 获取属性的第q个值,只有对Symbolic数据集有效。
instances.setClassIndex(int m). 设置类别(决策)属性,一般地,决策属性是最后一个属性,有instances.setClassIndex(instances.numAttributes() - 1)
举例:
src/test.arff
@relation hungarian-14-heart-disease
@attribute 'age' real
@attribute 'sex' { female, male}
@attribute 'chest_pain' { typ_angina, asympt, non_anginal, atyp_angina}
@data
28,male,atyp_angina
30,female,typ_angina
Instances instances = new Instances(new FileReader(new File(“src/data/test.arff”)));
instances.numInstances(); // 2
instances.numAttributes(); // 3
instances.instance(0).value(2); // 3.0, 注意这里是第0个实例的第2个属性,为atyp_angina, atyp_angina对应在属性chest_pain中的下标是3.
instances.instance(0).stringValue(2); //atyp_angina.
Instances.instance(1).value(0); // 30.0
instances.attribute(2).numValues(); //4. 第2个属性的取值个数
instances.attribute(2).value(1); //asympt
instances.attribute(1).name(); //sex
UJMP.jar
UJMP是统一Java矩阵处理包。 处理方式与Python Numpy三方库类似,其中的核心是org.ujmp.core.Matrix类。
Matrix类的常用方法:
Matrix m = Matrix.Factory.zeros(n, m); // 产生一个n行m列的0矩阵
Matrix m = Matrix.Factory.eye(n, m); // 产生一个n行m列的主对角线为1的矩阵
matrix = matrix.appendVertically(Ret.LINK, Matrix m); //在垂直方向添加一个矩阵
matrix = matrix.appendVertically(Ret.LINK, Matrix m); //在水平方向添加一个矩阵
matrix = matrix.times(double value); //点乘一个浮点数
matrix = matrix.times(Matrix another); //点乘一个相同规模的矩阵
matrix = matrix.mtimes(Matrix another); //矩阵乘法
matrix = matrix.plus(Matrix another); //矩阵加法
matrix = matrix.minus(Matrix another); //矩阵减法
matrix = matrix.inv(); //矩阵的逆矩阵
matrix.getRowCount(); //获取矩阵行数
matrix.getColumnCount(); //获取矩阵列数
matrix.setAsDouble(value, n, m); //矩阵的第n行m列设置为value。
matrix.transpose(); // 矩阵的转置
matrix.selectRows(Ret.LINK, long[] indices); //选择矩阵中所有i∈indices行构成的子矩阵。
matrix.selectColumns(Ret.LINK, long[] indices); //选择矩阵中所有i∈indices列构成的子矩阵。
matrix.Factory.randn(n, m); //产生n行m列的随机数矩阵。
Matrix.Factory.emptyMatrix(); //产生一个空矩阵
matrix.norm2(); // 获取L1 norm
matrix.normInf(); // 获取无穷norm
Matrix X = org.ujmp.jmatio.ImportMatrixMAT.fromFile(new File(“src/test.mat”), “X”); // 从matlab数据文件中读取名称为X的矩阵
¥29.8
¥9.9
¥59.8