Как отобрать экземпляры в наборе данных в R - PullRequest
1 голос
/ 27 июля 2011

У меня есть набор данных с 20 классами, и он имеет довольно неравномерное распределение. Есть ли какая-либо функциональность в R, которая позволяет нам сбалансировать набор данных (возможно, взвешенный)?

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

Я пытался использовать фильтр SMOTE и фильтр Resample, но они не совсем делают то, что я хочу. Я не хочу, чтобы какие-либо экземпляры были удалены, повторение в порядке.

1 Ответ

1 голос
/ 29 июля 2011

Я думаю, что в вашей терминологии есть недоразумение. Название вашего вопроса относится к выборке, а текст вопроса требует взвешивания.

Для уточнения:

При выборке у вас либо меньше, столько же или больше экземпляров, чем в исходном наборе; уникальное членство образца может быть либо строгим подмножеством исходного набора, либо идентичным исходному набору (с заменой, т.е. дубликатами).

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

Я полагаю, что вы имеете в виду взвешивание, но один и тот же ответ должен работать в обоих случаях. Если общее количество наблюдений составляет N, а частота каждого класса является элементом вектора длиной 20 freq (например, количество элементов в классе 1 составляет freq[1]*N), тогда просто используйте вектор весов 1/freq для нормализации весов. Вы можете масштабировать его по некоторой константе, например N, хотя это не имеет значения. В случае, если какая-либо частота равна 0 или очень близка к ней, вы можете решить эту проблему, используя вектор сглаженных отсчетов (например, сглаживание по Гуд-Тьюрингу).

В результате каждый набор будет иметь равную долю от общего веса.

...