我正在与 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”呢?感谢您的帮助。
您的输出中没有遗漏任何属性。输出采用稀疏 ARFF 格式:
稀疏 ARFF 文件与 ARFF 文件非常相似,但没有明确表示值为 0 的数据。...
每个实例都用花括号括起来,每个条目的格式为:
[index] [space] [value]
whereindex
是属性索引(从 0 开始)。
因此,对于您示例中的第三个实例,
{0 Kite,4 1}
表示此实例的属性 0 是Kite
,属性 4(即“结束”)是1
,其他属性是0
。
StringToWordVector
产生稀疏输出是有意义的,因为它创建了许多新属性,其中大多数对于每个实例都是 0。如果您需要非稀疏版本,您可以使用weka.filters.unsupervised.instance.SparseToNonSparse
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句