Как намеренно сверхсоответствовать классификаторам дерева Weka?

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

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

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

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

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

Используя IB1 получает 100%-ю точность (состав на составе), таким образом, это не проблема нескольких экземпляров с теми же значениями функции и различными классами.

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

Спасибо.

Обновление: Хорошо, это абсурдно. Я использовал только приблизительно 3 100 отрицательные и 1 200 положительных примеров, и это - дерево, которое я получил (несокращенный!):

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 и имеет достойное ложное положительное и отрицательное отношение.

7
задан Haggai 11 July 2010 в 17:04
поделиться

2 ответа

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

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

2
ответ дан 7 December 2019 в 07:39
поделиться

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

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

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

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

5
ответ дан 7 December 2019 в 07:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: