java 在weka中添加一个新实例

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/12118132/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 07:39:14  来源:igfitidea点击:

Adding a new Instance in weka

javamachine-learningweka

提问by TeFa

How can I add a new Instance to an existing Instances object that I created ?

如何向我创建的现有实例对象添加新实例?

Here is an example:

下面是一个例子:

ArrayList<Attribute> atts = new ArrayList<Attribute>(2);
ArrayList<String> classVal = new ArrayList<String>();
classVal.add("A");
classVal.add("B");
atts.add(new Attribute("content",(ArrayList<String>)null));
atts.add(new Attribute("@@class@@",classVal));

Instances dataRaw = new Instances("TestInstances",atts,0);

I want to add a new instance to dataRaw. As far as I know I have to use dataRaw.add(Instance i) .... How can I create an instance object if the Instance class is an interface ?

我想向 dataRaw 添加一个新实例。据我所知,我必须使用 dataRaw.add(Instance i) .... 如果 Instance 类是一个接口,我如何创建一个实例对象?

Thanks in Advance

提前致谢

回答by Atilla Ozgur

Let start with some highlights.

让我们从一些亮点开始。

  • weka stores every instance value as double[]. Therefore you create double[] instanceValue1 and add values to this array.
  • Even strings are stored in this double[]. You add your string values with following code:
  • weka 将每个实例值存储为 double[]。因此,您创建 double[] instanceValue1 并向该数组添加值。
  • 甚至字符串也存储在这个 double[] 中。您可以使用以下代码添加字符串值:

instanceValue1[0] = dataRaw.attribute(0).addStringValue("This is a string!");

instanceValue1[0] = dataRaw.attribute(0).addStringValue("这是一个字符串!");

  • Instance is interface, and it is implemented by two classes, { SparseInstance , DenseInstance}. We add our value array to dataset using following code :
  • Instance 是接口,它由两个类实现,{ SparseInstance , DenseInstance}。我们使用以下代码将值数组添加到数据集:

dataRaw.add(new DenseInstance(1.0, instanceValue1));

dataRaw.add(new DenseInstance(1.0, instanceValue1));

Here is the complete running example:

这是完整的运行示例:

import java.util.ArrayList;

import weka.core.Attribute;
import weka.core.DenseInstance;
import weka.core.Instance;
import weka.core.Instances;

public class Program {
    public static void main(String[] args) {
        ArrayList<Attribute> atts = new ArrayList<Attribute>(2);
        ArrayList<String> classVal = new ArrayList<String>();
        classVal.add("A");
        classVal.add("B");
        atts.add(new Attribute("content",(ArrayList<String>)null));
        atts.add(new Attribute("@@class@@",classVal));

        Instances dataRaw = new Instances("TestInstances",atts,0);
        System.out.println("Before adding any instance");
        System.out.println("--------------------------");
        System.out.println(dataRaw);
        System.out.println("--------------------------");

        double[] instanceValue1 = new double[dataRaw.numAttributes()];

        instanceValue1[0] = dataRaw.attribute(0).addStringValue("This is a string!");
        instanceValue1[1] = 0;

        dataRaw.add(new DenseInstance(1.0, instanceValue1));

        System.out.println("After adding a instance");
        System.out.println("--------------------------");
        System.out.println(dataRaw);
        System.out.println("--------------------------");

        double[] instanceValue2 = new double[dataRaw.numAttributes()];

        instanceValue2[0] = dataRaw.attribute(0).addStringValue("This is second string!");
        instanceValue2[1] = 1;

        dataRaw.add(new DenseInstance(1.0, instanceValue2));

        System.out.println("After adding second instance");
        System.out.println("--------------------------");
        System.out.println(dataRaw);
        System.out.println("--------------------------");


    }

}

Its output is following:

它的输出如下:

Before adding any instance
--------------------------
@relation TestInstances

@attribute content string
@attribute @@class@@ {A,B}

@data

--------------------------
After adding a instance
--------------------------
@relation TestInstances

@attribute content string
@attribute @@class@@ {A,B}

@data
'This is a string!',A
--------------------------
After adding second instance
--------------------------
@relation TestInstances

@attribute content string
@attribute @@class@@ {A,B}

@data
'This is a string!',A
'This is second string!',B
--------------------------