У меня есть двоичный набор данных класса (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 и имеет достойное ложное положительное и отрицательное отношение.
Быстрое и грязное решение - повторная выборка. Выбросьте все положительные примеры, кроме 1500, и тренируйтесь на сбалансированном наборе данных. Я уверен, что в Weka есть компонент повторной выборки для этого.
Другое решение - использовать классификатор с переменной стоимостью для каждого класса. Я уверен, что libSVM позволяет это сделать, и я знаю, что Weka может обернуть libSVM. Однако я давно не использовал Weka, поэтому не могу оказать практическую помощь.
Weka содержит два мета-классификатора, представляющих интерес:
Они позволяют сделать любой алгоритм чувствительным к затратам (не ограничиваясь SVM) и задать матрицу затрат (штрафы за различные ошибки); вы дадите больший штраф за неправильную классификацию 1
экземпляров как 0
, чем за ошибочную классификацию 0
как 1
.
В результате алгоритм будет пытаться:
минимизировать ожидаемую стоимость ошибочной классификации (а не наиболее вероятный класс)