Weka Classifier не принимает строковые значения - PullRequest
0 голосов
/ 07 сентября 2018

Я использую 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   

Ответы [ 2 ]

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

G5W-ответ должен работать, но если вы создаете файл ARFF самостоятельно, то другой вариант - определить эти атрибуты как номинальные в файле ARFF, так же, как вы уже сделали дляtransaction type и posting атрибуты.

Чтобы вручную составить список номинальных значений, который находится между { и } в строке @ATTRIBUTE, вы можете, например, использовать функцию Данные> Удалить дубликаты вExcel.

0 голосов
/ 08 сентября 2018

Вы не говорите, какой интерфейс вы используете. Я предполагаю, что вы используете графический интерфейс.

На вкладке «Предварительная обработка» в разделе «Фильтры» выберите

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))
...