使用模型向量中的数据(具有很少的属性),而无需在JAVA中的WEKA API中生成ARFF文件

使用模型向量中的数据(具有很少的属性),而无需在JAVA中的WEKA API中生成ARFF文件,java,weka,Java,Weka,我正试图准备一些数据,这些数据存在于我的模型类的两个向量中,以便使用java中的WEKAAPI进行分类训练(一个用于训练,另一个用于测试)。是否有一种方法可以安排我的数据,使我不必制作*.ARFF文件 我的模型类由六个属性组成 L1(串)、L2(串)、A(串)、B(串)、C(串)、D(串)、站(串) 每一行都是这样的,其中traindata是向量: for(int i=0; i<traindata.size(); i++) { double[] row = new double[]

我正试图准备一些数据,这些数据存在于我的模型类的两个向量中,以便使用java中的WEKAAPI进行分类训练(一个用于训练,另一个用于测试)。是否有一种方法可以安排我的数据,使我不必制作*.ARFF文件

我的模型类由六个属性组成 L1(串)、L2(串)、A(串)、B(串)、C(串)、D(串)、站(串)

每一行都是这样的,其中traindata是向量:

for(int i=0; i<traindata.size(); i++) {
    double[] row = new double[] { traindata.get(i).getL1(),traindata.get(i).getL2(),traindata.get(i).getA(), traindata.get(i).getB(), traindata.get(i).getC(), traindata.get(i).getD(), traindata.get(i).getStation() };
}

用于(int i=0;i要在Weka中训练分类器,您需要一个
实例
对象。
实例
对象既包含数据的结构,也包含数据的每个
实例
。ARFF文件是实例对象的序列化版本。
实例
只是包含实例的结构你的数据

因此,您可以创建一个
Instances
对象,用
Instance
s填充它。 下面是一个简单的代码:

// create attributes. For nominal attributes list all possible values
ArrayList<Attribute> attributes = new ArrayList<Attribute>();
attributes.add(new Attribute("L1", new ArrayList<String>(Arrays.AsList("L1_val1", "L1_val2", ...)));
attributes.add(new Attribute("L2", new ArrayList<String>(Arrays.AsList("L2_val1", "L2_val2", ...)));
attributes.add(new Attribute("A"));
attributes.add(new Attribute("B"));
attributes.add(new Attribute("C"));
attributes.add(new Attribute("D"));
attributes.add(new Attribute("Station", new ArrayList<String>(Arrays.AsList("S1", "S2", ...)));

//create Instances
Instances ins = new Instances(name, attributes, traindata.size());

//create Instance
for(int i=0; i<traindata.size(); i++) {
    String L1 = traindata.get(i).getL1();
    String L2 = traindata.get(i).getL2();
    String station = traindata.get(i).getStation();

    double[] row = new double[] { 
        attributes.get(0).indexOfValue(L1), //convert string to double - index of L1
        attributes.get(1).indexOfValue(L2), //convert string to double - index of L2
        traindata.get(i).getA(), 
        traindata.get(i).getB(), 
        traindata.get(i).getC(), 
        traindata.get(i).getD(), 
        attributes.get(1).indexOfValue(station), //convert string to double  
     };
    Instance instance = new DenseInstance(weight, row);
    instances.add(instance);
 }

//build classifier
classifier.buildClassifier(instances);
//创建属性。对于标称属性,列出所有可能的值
ArrayList attributes=新的ArrayList();
add(新属性(“L1”,新ArrayList(Arrays.AsList(“L1_val1”,“L1_val2”,“…))));
add(新属性(“L2”),新ArrayList(Arrays.AsList(“L2_val1”,“L2_val2”,“…)));
属性。添加(新属性(“A”);
属性。添加(新属性(“B”);
添加(新属性(“C”);
添加(新属性(“D”);
add(新属性(“Station”),新ArrayList(Arrays.AsList(“S1”,“S2”,“…))));
//创建实例
实例ins=新实例(名称、属性、traindata.size());
//创建实例

for(int i=0;我感谢你的帮助。它奏效了!我真的很感激!!如果它解决了你的问题,你可以接受答案@ANJANSAPKOTA。参见