8

作成した既存のインスタンスオブジェクトに新しいインスタンスを追加するにはどうすればよいですか?

次に例を示します。

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

dataRawに新しいインスタンスを追加したいと思います。私の知る限り、dataRaw.add(Instance i)を使用する必要があります.... Instanceクラスがインターフェイスの場合、インスタンスオブジェクトを作成するにはどうすればよいですか?

前もって感謝します

4

1 に答える 1

19

いくつかのハイライトから始めましょう。

  • weka はすべてのインスタンス値を double[] として保存します。したがって、double[] instanceValue1 を作成し、この配列に値を追加します。
  • 文字列もこの double[] に格納されます。次のコードを使用して文字列値を追加します。

instanceValue1[0] = dataRaw.attribute(0).addStringValue("これは文字列です!");

  • インスタンスはインターフェースであり、{ SparseInstance , DenseInstance} の 2 つのクラスによって実装されます。次のコードを使用して、値の配列をデータセットに追加します。

dataRaw.add(新しい DenseInstance(1.0, instanceValue1));

完全な実行例を次に示します。

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("--------------------------");


    }

}

その出力は次のとおりです。

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
--------------------------
于 2012-08-25T09:19:24.057 に答える