如果元素只是名义或字符串值,我们可以使用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);
更具体地说,这些列表有时可能会改变它们的大小。 i..e,在这个例子中,我们看到每个长度为4的列表,但是应该支持其他Instance对象中不同大小的列表。 是否可以使用WEKA或任何学习API。如果是这样,请提供资源。这是我的硕士论文的必修课。
答案 0 :(得分:0)
为了使其实例(数据集)对象尽可能紧凑,weka使用索引值方法来表示字符串或名义属性的每个值。每个weka实例(数据集中的行)仅存储与属性值相关联的索引。
您可能需要决定列表元素(作为一个整体)是否对列表中的各个元素更重要。如果是这样,您将需要枚举每个可能作为该属性值发生的列表,并且在创建属性时需要将该列表提供给属性。如果这是合理的,您可以决定将列表转换为字符串(即list1 =“10,20,30,40”)。
如果列表中的各个元素具有值,则可以更容易地创建单独的属性以识别元素是否出现在列表中。
如果列表中出现的元素数量存在固定限制(特别是如果列表的顺序很重要),您可以考虑为每个列表元素设置单独的属性。 (即Attibute(“first_element_of_list”),属性(“second_element_of_list”),......等)
如果这些列表上可能出现固定数量的值和/或订单不重要,您可以考虑使用布尔属性来指示列表中是否出现指定的元素。 (即属性(“10_in_list”),属性(“20_in_list”),......等)