exponenta event banner

Обработка несбалансированных данных или неравных затрат на неправильную классификацию в коллекциях классификации

Во многих приложениях может потребоваться асимметричная обработка классов в данных. Например, данные могут иметь гораздо больше наблюдений одного класса, чем любой другой. Или неправильная классификация наблюдений одного класса имеет более серьезные последствия, чем неправильная классификация наблюдений другого класса. В таких ситуациях можно либо использовать алгоритм RUSBoost (указать 'Method' как 'RUSBoost') или используйте аргумент пара имя-значение 'Prior' или 'Cost' из fitcensemble.

Если некоторые классы недопредставлены или перепредставлены в вашем наборе обучения, используйте либо 'Prior' аргумент пары имя-значение или алгоритм RUSBoost. Например, предположим, что данные обучения получены путем моделирования. Потому что имитация класса A дороже, чем имитация класса B, вы выбираете, чтобы создать меньше наблюдений класса A и больше наблюдений за классом B. Однако ожидается, что этот класс A и класс B смешиваются в другой пропорции в реальных (немоделированных) ситуациях. В этом случае используйте 'Prior' установить предварительные вероятности для класса A и B приблизительно до значений, которые вы ожидаете наблюдать в реальной ситуации. fitcensemble функция нормализует предыдущие вероятности, чтобы заставить их 1. Умножение всех предшествующих вероятностей на один и тот же положительный фактор не влияет на результат классификации. Другим способом обработки несбалансированных данных является использование RUSBoost алгоритм ('Method','RUSBoost'). При использовании этого алгоритма не требуется корректировать предыдущие вероятности. Дополнительные сведения см. в разделе Ускорение и классификация случайной неполной выборки с несбалансированными данными.

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

Необходимо передать затраты на неправильную классификацию в виде квадратной матрицы с неотрицательными элементами. Элемент C(i,j) этой матрицы является стоимость классификации наблюдения по классу j если истинным классом является i. Диагональные элементы C(i,i) матрицы затрат должна быть 0. В предыдущем примере можно выбрать злокачественную опухоль 1 класса, а доброкачественную опухоль 2 класса. Затем можно установить для матрицы затрат значение

[0c10]

где c > 1 - стоимость неправильной идентификации злокачественной опухоли как доброкачественной. Затраты относительны - умножение всех затрат на один и тот же положительный фактор не влияет на результат классификации.

Если у вас только два класса, fitcensemble регулирует их предшествующие вероятности, используя класс i P˜i=CijPifor  = 1,2 и j ≠ i. Пи - предшествующие вероятности, в которые любой прошел fitcensemble или вычисляют из частот классов в обучающих данных, и P˜i корректируют предыдущие вероятности. Тогда fitcensemble использует матрицу затрат по умолчанию

[0110]

и эти скорректированные вероятности для обучения своих слабых учеников. Таким образом, манипулирование матрицей затрат эквивалентно манипулированию предшествующими вероятностями.

Если у вас есть три или более класса, fitcensemble также преобразует входные затраты в скорректированные предыдущие вероятности. Это преобразование более сложное. Во-первых, fitcensemble пытается решить матричное уравнение, описанное у Чжоу и Лю [1]. Если не удается найти решение, fitcensemble применяет корректировку «средней стоимости», описанную в Breiman et al. [2]. Для получения дополнительной информации см. Zadrozny, Langford и Abe [3].

Ансамбль поездов с неравными затратами на классификацию

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

Считывайте набор данных о гепатите из репозитория UCI как массив символов. Затем преобразуйте результат в массив ячеек символьных векторов с помощью textscan. Укажите массив ячеек символьных векторов, содержащих имена переменных.

options = weboptions('ContentType','text');
hepatitis = textscan(webread(['http://archive.ics.uci.edu/ml/' ...
    'machine-learning-databases/hepatitis/hepatitis.data'],options),...
    '%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f','Delimiter',',',...
    'EndOfLine','\n','TreatAsEmpty','?');
size(hepatitis)
ans = 1×2

     1    20

VarNames = {'dieOrLive' 'age' 'sex' 'steroid' 'antivirals' 'fatigue' ...
    'malaise' 'anorexia' 'liverBig' 'liverFirm' 'spleen' ...
    'spiders' 'ascites' 'varices' 'bilirubin' 'alkPhosphate' 'sgot' ...
    'albumin' 'protime' 'histology'};

hepatitis является массивом ячеек 1 на 20 символьных векторов. Ячейки соответствуют ответу (liveOrDie) и 19 гетерогенных предикторов.

Укажите числовую матрицу, содержащую предикторы, и вектор ячейки, содержащий 'Die' и 'Live', которые являются категориями ответов. Ответ содержит два значения: 1 указывает, что пациент умер, и 2 указывает, что пациент жил. Укажите массив ячеек символьных векторов для ответа с помощью категорий ответов. Первая переменная в hepatitis содержит ответ.

X = cell2mat(hepatitis(2:end));
ClassNames = {'Die' 'Live'};
Y = ClassNames(hepatitis{:,1});

X - числовая матрица, содержащая 19 предикторов. Y является массивом ячеек символьных векторов, содержащих ответ.

Проверьте данные на отсутствие значений.

figure
barh(sum(isnan(X),1)/size(X,1))
h = gca;
h.YTick = 1:numel(VarNames) - 1;
h.YTickLabel = VarNames(2:end);
ylabel('Predictor')
xlabel('Fraction of missing values')

Большинство предикторов имеют отсутствующие значения, а один имеет почти 45% отсутствующих значений. Поэтому используйте деревья принятия решений с суррогатными разделениями для лучшей точности. Поскольку набор данных невелик, время обучения с суррогатными разделениями должно быть допустимым.

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

rng(0,'twister') % For reproducibility
t = templateTree('surrogate','all');

Изучите данные или описание данных, чтобы увидеть, какие предикторы категоричны.

X(1:5,:)
ans = 5×19

   30.0000    2.0000    1.0000    2.0000    2.0000    2.0000    2.0000    1.0000    2.0000    2.0000    2.0000    2.0000    2.0000    1.0000   85.0000   18.0000    4.0000       NaN    1.0000
   50.0000    1.0000    1.0000    2.0000    1.0000    2.0000    2.0000    1.0000    2.0000    2.0000    2.0000    2.0000    2.0000    0.9000  135.0000   42.0000    3.5000       NaN    1.0000
   78.0000    1.0000    2.0000    2.0000    1.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    0.7000   96.0000   32.0000    4.0000       NaN    1.0000
   31.0000    1.0000       NaN    1.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    0.7000   46.0000   52.0000    4.0000   80.0000    1.0000
   34.0000    1.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    1.0000       NaN  200.0000    4.0000       NaN    1.0000

Оказывается, что предикторы 2-13 категоричны, а также предиктор 19. Этот вывод можно подтвердить с помощью описания набора данных в репозитарии данных машинного обучения UCI.

Перечислите категориальные переменные.

catIdx = [2:13,19];

Создание перекрестно проверенного ансамбля с использованием 150 учеников и GentleBoost алгоритм.

Ensemble = fitcensemble(X,Y,'Method','GentleBoost', ...
    'NumLearningCycles',150,'Learners',t,'PredictorNames',VarNames(2:end), ...
    'LearnRate',0.1,'CategoricalPredictors',catIdx,'KFold',5);
figure
plot(kfoldLoss(Ensemble,'Mode','cumulative','LossFun','exponential'))
xlabel('Number of trees')
ylabel('Cross-validated exponential loss')

Проверьте матрицу путаницы, чтобы увидеть, каких пациентов ансамбль предсказывает правильно.

[yFit,sFit] = kfoldPredict(Ensemble);
confusionchart(Y,yFit)

Из 123 пациентов, которые живут, ансамбль правильно предсказывает, что 112 будут жить. Но для 32 пациентов, которые умирают от гепатита, ансамбль только правильно прогнозирует, что примерно половина умрет от гепатита.

Существует два типа ошибок в прогнозах ансамбля:

  • Предсказывая, что пациент живет, но пациент умирает

  • Предсказывая, что пациент умирает, но пациент живет

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

cost.ClassNames = ClassNames;
cost.ClassificationCosts = [0 5; 1 0];

Создание нового перекрестно проверенного ансамбля с помощью cost в качестве стоимости неправильной классификации и проверьте результирующую матрицу путаницы.

EnsembleCost = fitcensemble(X,Y,'Method','GentleBoost', ...
    'NumLearningCycles',150,'Learners',t,'PredictorNames',VarNames(2:end), ...
    'LearnRate',0.1,'CategoricalPredictors',catIdx,'KFold',5,'Cost',cost);
[yFitCost,sFitCost] = kfoldPredict(EnsembleCost);
confusionchart(Y,yFitCost)

Как и ожидалось, новый ансамбль лучше классифицирует пациентов, которые умирают. Несколько удивительно, но новый ансамбль также лучше классифицирует пациентов, которые живут, хотя результат статистически не значимо лучше. Результаты перекрестной проверки являются случайными, поэтому этот результат является просто статистической флуктуацией. Результат, по-видимому, указывает на то, что классификация пациентов, которые живут, не очень чувствительна к стоимости.

Ссылки

[1] Чжоу, З.-Х. и X.-Y. Лю. «Обучение с учетом затрат для нескольких классов». Вычислительный интеллект. Том 26, выпуск 3, 2010, стр. 232-257 CiteSeerX.

[2] Брейман, Л., Дж. Х. Фридман, Р. А. Ольшен и К. Дж. Стоун. Деревья классификации и регрессии. Бока Ратон, Флорида: Чепмен энд Холл, 1984.

[3] Задрозный, Б., Дж. Лэнгфорд и Н. Абэ. «Обучение, учитывающее затраты, по взвешиванию, пропорциональному затратам». Третья Международная конференция IEEE по анализу данных, 435-442. 2003.

См. также

| | | |

Связанные темы