我正在与Weka合作。我的问题是,使用StringToWordVector之后,某些属性被省略了。所以这是我的代码:
这是使用任何过滤器之前的ARFF文件:
@relation QueryResult
@attribute class {Qualität,Bord,Kite,Harness}
@attribute text {evo,foil,end,fin,edg}
@data
Qualität,evo
Bord,foil
Kite,end
Harness,fin
Qualität,edg
这是我的Java代码:
Instances train = new Instances(loadInstancesForWeka("root","",sqlCommand));
train.setClassIndex(train.numAttributes() - 2);
System.out.println(train);
NominalToString filter1 = new NominalToString();
filter1.setInputFormat(train);
train = Filter.useFilter(train, filter1);
System.out.println("\nSelect nach NominaltoString \n"+train);
//filter
StringToWordVector filter = new StringToWordVector();
filter.setInputFormat(train);
train = Filter.useFilter(train, filter);
使用Vector之后,它看起来像这样:
@relation 'QueryResult-weka.filters.unsupervised.attribute.NominalToString-Clast-weka.filters.unsupervised.attribute.StringToWordVector-R2-W1000-prune-rate-1.0-N0-stemmerweka.core.stemmers.NullStemmer-stopwords-handlerweka.core.stopwords.Null-M1-tokenizerweka.core.tokenizers.WordTokenizer -delimiters \" \\r\\n\\t.,;:\\\'\\\"()?!\"'
@attribute class {Qualität,Bord,Kite,Harness}
@attribute edg numeric
@attribute evo numeric
@attribute foil numeric
@attribute end numeric
@attribute fin numeric
@data
{2 1}
{0 Bord,3 1}
{0 Kite,4 1}
{0 Harness,5 1}
{1 1}
那么为什么省略了“ foil,end,fin”属性?谢谢您的帮助。
答案 0 :(得分:0)
输出中没有遗漏任何属性。输出在sparse ARFF format中:
稀疏ARFF文件与ARFF文件非常相似,但数据具有价值 0未明确表示。 ...
每个实例都被 花括号,每个条目的格式为:
[index] [space] [value]
,其中index
是属性索引(从0开始)。
因此,对于您示例中的第三个实例
{0 Kite,4 1}
表示此实例的属性0为Kite
,属性4(即'end')为1
,其他属性为0
。
StringToWordVector
产生稀疏输出是有意义的,因为它创建了许多新属性,每个实例的大多数属性将为0。如果需要非稀疏版本,可以使用weka.filters.unsupervised.instance.SparseToNonSparse
。