Обработайте неустойчивые данные или неравные затраты 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. Задайте массив ячеек из символьных векторов, содержащий имена переменных.

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 как стоимость 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.

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

| | | |

Похожие темы