Как преднамеренно переоборудовать классификаторы деревьев Weka? - PullRequest
7 голосов
/ 11 июля 2010

У меня есть набор данных двоичного класса (0/1) с большим перекосом в сторону класса «0» (около 30000 против 1500).Для каждого экземпляра имеется 7 функций, без пропущенных значений.

Когда я использую J48 или любой другой древовидный классификатор, я получаю почти все экземпляры "1", ошибочно классифицированные как "0".

Установка классификатора на "unpruned", установка минимального числа экземпляров на лист равной 1, установка коэффициента достоверности на 1, добавление фиктивного атрибута с номером экземпляра экземпляра - все это не помогло.

Я простоне могу создать модель, которая соответствует моим данным!

Я также попробовал почти все другие классификаторы, которые предоставляет Weka, но получил аналогичные результаты.

Использование IB1 дает 100% точность (trainsetна trainset), так что это не проблема нескольких экземпляров с одинаковыми значениями объектов и разными классами.

Как я могу создать полностью необрезанное дерево?Или иначе заставить Weka перезаписать мои данные?

Спасибо.

Обновление: Хорошо, это абсурд.Я использовал только около 3100 отрицательных и 1200 положительных примеров, и вот дерево, которое я получил (без обрезки!):

J48 unpruned tree
------------------

F <= 0.90747: 1 (201.0/54.0)
F > 0.90747: 0 (4153.0/1062.0)

Излишне говорить, что IB1 по-прежнему дает 100% точность.

Обновление 2: Не знаю, как я это пропустил - безрукавная SimpleCart работает и дает 100% точность поезда на поезде;Урезанная SimpleCart не так смещена, как J48, и имеет приличное ложное положительное и отрицательное соотношение.

Ответы [ 2 ]

5 голосов
/ 15 июля 2010

Weka содержит два мета-классификатора, представляющих интерес:

Они позволяют сделать любой алгоритм чувствительным к стоимости (не ограничиваясь SVM) и указать матрицу затрат (штраф за различные ошибки); за неправильную классификацию 1 экземпляров как 0 вы получите более высокий штраф, чем за ошибочную классификацию 0 как 1.

В результате алгоритм попытается:

минимизировать ожидаемую стоимость неправильной классификации (а не наиболее вероятный класс)

2 голосов
/ 11 июля 2010

Быстрое и грязное решение заключается в повторной выборке. Отбросьте все, кроме 1500 ваших положительных примеров, и тренируйтесь на сбалансированном наборе данных. Я почти уверен, что в Weka для этого есть компонент resample.

Другим решением является использование классификатора с переменной стоимостью для каждого класса. Я уверен, что libSVM позволяет вам сделать это, и я знаю, что Weka может обернуть libSVM. Однако я давно не пользовался Weka, поэтому не могу оказать здесь большую практическую помощь.

...