Weka Classifier不接受字符串值

问题描述 投票:0回答:2

我正在使用Weka对数据集进行分类。 .arrf数据文件如下所示。我在分类时遇到的问题是很多像NaiveBayes等的分类器都不会采用字符串属性来对其进行分类。这两个字符串属性是分类的重要特征。我尝试使用过滤器将字符串转换为标称类型,但它不会将其转换为标称值。考虑到我的数据集,我应该怎么做呢?

@RELATION transaction

@ATTRIBUTE transactionType  {'CC Credit',Trans,Exp,Dep,Check}
@ATTRIBUTE number numeric
@ATTRIBUTE posting {Yes,No}
@ATTRIBUTE String1 string
@ATTRIBUTE String2 string


@ATTRIBUTE amount real
@ATTRIBUTE class {1,2}


@DATA
'CC Credit',?,Yes,'XYZ Bank','ONLINE PYMT Aug',-1582100.38,1   
Trans,?,Yes,?,'ACH DEBIT XYZ CREDIT CRD-EPAY',-59219.40,2   
Exp,?,Yes,'First Nolastname','ACH DEBIT First Nolastname-RECEIVER',-176011.56,2   
machine-learning classification weka
2个回答
3
投票

你没有说你正在使用什么接口。我假设您正在使用GUI。

在“预处理”选项卡上的“过滤器”下,选择

filters -> unsupervised -> attribute

向下滚动以找到StringToNominal。默认情况下,它只会转换最后一个属性。您需要更改它以转换所有字符串。

Screenshot of GUI

以防万一:

如果您使用的是R和RWeka,则可以通过运行来获取此过滤器

Str2Nom = make_Weka_filter("weka/filters/unsupervised/attribute/StringToNominal")
Str2Nom(transactionType ~ ., data=Transaction, control=Weka_control(R=4:5))

0
投票

G5W's answer应该可以工作,但是如果你自己构建ARFF文件,那么另一种选择是在ARFF文件中将这些属性定义为名义属性,就像你已经为transaction typeposting属性所做的那样。

要在{行中手动构建介于}@ATTRIBUTE之间的名义值列表,您可以使用Excel中的Data> Remove Duplicates函数。

© www.soinside.com 2019 - 2024. All rights reserved.