Обработайте неустойчивые данные или неравные затраты Misclassification в ансамблях классификации

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

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

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

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

[0c10]

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

Если у вас есть только два класса, fitcensemble настраивает их использование априорных вероятностей P˜i=CijPiдля класса i = 1,2 и j ≠ i. Pi является априорными вероятностями, или переданными в fitcensemble или вычисленными из частот класса в данных тренировки, и P˜i настроенные априорные вероятности. Затем fitcensemble использует матрицу стоимости по умолчанию

[0110]

и эти настроенные вероятности для обучения его слабые ученики. Управление матрицей стоимости таким образом эквивалентно управлению априорными вероятностями.

Если у вас есть три или больше класса, fitcensemble также преобразовывает производственные затраты в настроенные априорные вероятности. Это преобразование является более комплексным. Во-первых, fitcensemble пытается решить матричное уравнение, описанное в Чжоу и Лю [1]. Если этому не удается найти решение, fitcensemble применяет корректировку “средней стоимости”, описанную в Бреимене и др. [2]. Для получения дополнительной информации смотрите Zadrozny, Лэнгфорда и Абэ [3].

Обучите ансамбль с неравными затратами классификации

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

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

hepatitis = textscan(urlread(['https://archive.ics.uci.edu/ml/' ...
    'machine-learning-databases/hepatitis/hepatitis.data']),...
    '%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f','TreatAsEmpty','?',...
    'Delimiter',','); 
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 в качестве стоимости misclassification, и осмотрите получившуюся матрицу беспорядка.

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] Чжоу, Z.-H. и X.-Y. Лю. “На Мультиклассе Чувствительное к стоимости Изучение”. Вычислительный Интеллект. Издание 26, Выпуск 3, 2010, стр 232-257 CiteSeerX.

[2] Бреимен, L., Дж. Х. Фридман, Р. А. Олшен и К. Дж. Стоун. Классификация и деревья регрессии. Бока-Ратон, FL: Chapman & Hall, 1984.

[3] Zadrozny, B., Дж. Лэнгфорд и Н. Абэ. “Чувствительное к стоимости изучение пропорциональным стоимостью взвешиванием в качестве примера”. Третья международная конференция IEEE по вопросам анализа данных, 435–442. 2003.

Смотрите также

| | | |

Похожие темы