Рассмотрим набор данных A
, в котором есть примеры для обучения проблеме бинарной классификации.Я использовал SVM и применил взвешенный метод (в MATLAB), поскольку набор данных сильно разбалансирован.Я применил веса обратно пропорционально частоте данных в каждом классе.Это делается на тренировке с помощью команды
fitcsvm(trainA, trainTarg , ...
'KernelFunction', 'RBF', 'KernelScale', 'auto', ...
'BoxConstraint', C,'Weight',weightTrain );
. Я использовал 10-кратную перекрестную проверку для обучения и также изучил гиперпараметр.поэтому внутри CV набор данных A
разбивается на поезд (trainA
) и наборы проверки (valA
).После того, как обучение закончено и вне цикла CV, я получаю матрицу путаницы на A
:
80025 1
0 140
, где первая строка для класса большинства, а вторая строка для класса меньшинства.Существует только 1 ложноположительный результат (FP), и все примеры классов меньшинства были правильно классифицированы, давая истинно положительный результат (TP) = 140.
ПРОБЛЕМА : Затем я запускаю обученную модель нановый набор невидимых тестовых данных B
, который никогда не был виден во время тренировки.Это путаница для тестирования на B
.
50075 0
100 0
. Как видно, класс меньшинства вообще не был классифицирован, поэтому назначение весов провалилось.Хотя нет FP, SVM не может собрать примеры классов меньшинства.Я не применял весов или методов балансировки, таких как выборка (SMOTE, RUSBoost и т. Д.) На B
.Что может быть не так и как преодолеть эту проблему?