создание набора данных в weka, если значения являются списками / массивами - PullRequest
1 голос
/ 30 августа 2011

если элементы являются просто номинальными или строковыми значениями, мы можем использовать объект Instance для представления этого конкретного экземпляра. Также для набора данных Instances мы можем получить атрибуты, предварительно определив их. Но у меня есть вопрос. Какой подход, если мы хотим использовать коллекции в качестве значений для элементов атрибута?

Например:

weka.core.Attribute attribute1 = new weka.core.Attribute("list1");
weka.core.Attribute attribute2 = new weka.core.Attribute("list2");
weka.core.Attribute classAttribute = new weka.core.Attribute("Function");
FastVector fvWekaAttributes = new FastVector(3);
fvWekaAttributes.addElement(attribute1);
fvWekaAttributes.addElement(attribute2);
fvWekaAttributes.addElement(classAttribute);

- это способ создания атрибутов, если два являются номинальными значениями, а один - строкой (класс). и как мы добавляем элементы в любой набор данных (например: trainInstances), мы создаем объект Instance и добавляем так:

Instance iExample = new Instance(3);
 iExample.setValue((weka.core.Attribute)fvWekaAttributes.elementAt(0), 10);
 iExample.setValue((weka.core.Attribute)fvWekaAttributes.elementAt(0), 15);
 iExample.setValue((weka.core.Attribute)fvWekaAttributes.elementAt(2), "F1");
trainInstances.add(iExample);

это нормально, но что я должен использовать для хранения списков / коллекций вместо отдельных номинальных значений. Я хочу сделать так:

int[] list1={10,20,30,40};
int[] list2={90,80,70,60};
iExample.setValue((weka.core.Attribute)fvWekaAttributes.elementAt(0), **list1**);
 iExample.setValue((weka.core.Attribute)fvWekaAttributes.elementAt(0), **list2**);
 iExample.setValue((weka.core.Attribute)fvWekaAttributes.elementAt(2), "F1");
trainInstances.add(iExample);

точнее, эти списки могут иногда менять свои размеры. то есть, в этом примере мы видим каждый список длиной 4, но должны поддерживать списки разных размеров в других объектах Instance. Это возможно с помощью WEKA или любого обучающего API. Если да, пожалуйста, предоставьте мне ресурсы. Это обязательно для моей магистерской диссертации ..

1 Ответ

0 голосов
/ 17 сентября 2011

Чтобы объекты Instances (набора данных) были как можно более компактными, weka использует метод индекса-значения для представления каждого значения строки или номинального атрибута.Каждый экземпляр weka (строка в наборе данных) хранит только индекс, связанный со значением для атрибута.

Возможно, вам придется решить, является ли элемент списка (в целом) более важным, чем отдельныйэлементы списка.Если это так, вам нужно будет перечислить каждый из возможных списков, которые могут встречаться в качестве значения для этого атрибута, и этот список необходимо будет предоставить атрибуту при его создании.Если это разумно, вы можете решить преобразовать списки в строки (т.е. list1 = "10,20,30,40").

Если отдельные элементы списка имеют значение, может быть прощесоздать отдельные атрибуты, чтобы определить, присутствуют ли элементы в списке или нет.

Если существует фиксированное ограничение на количество элементов в списке (и особенно, если порядок списка важен), выможет рассмотреть возможность иметь отдельный атрибут для каждого элемента списка.(т. е. Attibute ("first_element_of_list"), Attribute ("second_element_of_list"), ... и т. д.)

Если в этих списках может присутствовать фиксированное количество значений, и / или если порядок не важенВы можете рассмотреть возможность использования логического атрибута, чтобы указать, присутствует ли указанный элемент в списке.(т. е. атрибут ("10_in_list"), атрибут ("20_in_list") и т. д.)

...