Как классифицировать реальные непрерывные данные для WEKA - PullRequest
2 голосов
/ 22 марта 2012

Это мои данные

@attribute Service_type {Fund,Loan,CD,Bank_Account,Mortgage}
@attribute Customer {Student,Business,Other,Doctor,Professional}
@attribute Monthly_fee real
@attribute Advertisement_budget real
@attribute Size {Small,Large,Medium}
@attribute Promotion {Web&Email,Full,Web,None}
@attribute Interest_rate real
@attribute Period real
@attribute Label real

И это одна соответствующая строка.

Fund,Student,0.64,0.95,Small,Full,0,10,26.72

Проблема заключается в том, что я хочу предсказать, что атрибут LABEL является реальным, но не даетмне вариант для дерева решений J48.

Я получил этот совет, что мне нужно классифицировать мой атрибут LABEL по диапазонам, таким как LABEL больше 25 && LABEL меньше 30 как C1 и так далее.

Мой вопрос заключается в том, существует ли какой-либо другой способ сделать это для J48, или есть какой-то конкретный способ или обоснование, по крайней мере, для классификации данных?

1 Ответ

2 голосов
/ 23 марта 2012

Вы должны определить, что вы подразумеваете под «классифицировать данные», поскольку это неоднозначно в контексте реально значимых меток классов. Если гипотетический классификатор предсказал Label = 26.7200000000001 для вашего примера строки, следует ли это считать правильным? Если да, то в каком эпсилоне это уже не так? Если нет, то вы, вероятно, ошибаетесь из-за того, что компьютеры работают с действительными числами.

J48 не решает (и не может реально) решить эти проблемы. Требуется конечное количество значений на выбор. Обычный способ сделать это, как сказал ваш совет, дискретизировать переменную. Таким образом, вместо бесконечного количества меток у вас есть одна метка для «0 <= x <10», другая для «10 <= x <20» и т. Д. Как именно это сделать, зависит от проблемы - насколько точность нужен ли вам, какой диапазон значений вы можете наблюдать и т. д. Чем точнее дискретизация, тем более точным может быть получаемый в результате классификатор, но за счет времени и количества необходимых данных обучения. </p>

Если вы не хотите таким образом дискретизировать выходную переменную, другой подход заключается в том, чтобы рассматривать ее как проблему регрессии, а не как проблему классификации. Там цель состоит в том, чтобы вывести действительное число таким образом, чтобы некоторая мера ошибки (например, среднеквадратическая ошибка по всему обучающему набору) была минимизирована. J48 не является хорошим выбором для этого подхода. Я не очень много делаю с Weka, но кажется, что пространство имен weka.classifiers.functions содержит базовую поддержку Weka для регрессионных моделей. С другой стороны, если вы хотите придерживаться чего-то, основанного на деревьях решений, вы можете взглянуть на weka.classifiers.trees.M5P.

Обратите внимание, что это не моя область знаний, но, поскольку вы не получили никаких других ответов в течение 18 часов или около того, я подумал, что это может помочь. Просто имейте в виду, что если вы видите что-то, что противоречит мне, автоматически не предполагайте, что я правильно понял детали.

...