Обнаружьте выбросы Используя регрессию квантиля

В этом примере показано, как обнаружить выбросы с помощью квантиля случайный лес. Квантиль случайный лес может обнаружить выбросы относительно условного распределения Y данный X. Однако этот метод не может обнаружить выбросы в данных о предикторе. Для определения выбросов в данных о предикторе с помощью мешка деревьев решений смотрите OutlierMeasure свойство TreeBagger модель.

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

Statistics and Machine Learning Toolbox™ обеспечивает несколько функций, чтобы обнаружить выбросы, включая:

  • zscore — Вычислите z множество наблюдений.

  • trimmean — Оцените среднее значение данных, исключая выбросы.

  • boxplot — Чертите диаграмму данных.

  • probplot — Постройте график вероятности.

  • robustcov — Оцените устойчивую ковариацию многомерных данных.

  • fitcsvm — Соответствуйте машине опорных векторов (SVM) одного класса, чтобы определить, какие наблюдения расположены далекие от контура решения.

  • dbscan — Наблюдения раздела в кластеры и идентифицируют выбросы с помощью основанной на плотности пространственной кластеризации приложения с шумом (DBSCAN) алгоритм.

Also, MATLAB® обеспечивает isoutlier функция, которая находит выбросы в данных.

Продемонстрировать определение выбросов, этот пример:

  1. Генерирует данные из нелинейной модели с heteroscedasticity и симулирует несколько выбросов.

  2. Выращивает квантиль случайный лес деревьев регрессии.

  3. Оценочные условные квартили (Q1, Q2, и Q3) и межквартильный размах (IQR) в областях значений переменных предикторов.

  4. Сравнивает наблюдения с заборами, которые являются количествами F1=Q1-1.5IQR и F2=Q3+1.5IQR. Любое наблюдение, которое меньше F1 или больше, чем F2 выброс.

Сгенерируйте данные

Сгенерируйте 500 наблюдений из модели

yt=10+3t+tsin(2t)+εt.

t равномерно распределено между 0 и 4π, и εtN(0,t+0.01). Храните данные в таблице.

n = 500;
rng('default'); % For reproducibility
t = randsample(linspace(0,4*pi,1e6),n,true)';
epsilon = randn(n,1).*sqrt((t+0.01));
y = 10 + 3*t + t.*sin(2*t) + epsilon;

Tbl = table(t,y);

Переместите пять наблюдений в случайное вертикальное направление 90% значения ответа.

numOut = 5;
[~,idx] = datasample(Tbl,numOut);
Tbl.y(idx) = Tbl.y(idx) + randsample([-1 1],numOut,true)'.*(0.9*Tbl.y(idx));

Чертите график рассеивания данных и идентифицируйте выбросы.

figure;
plot(Tbl.t,Tbl.y,'.');
hold on
plot(Tbl.t(idx),Tbl.y(idx),'*');
axis tight;
ylabel('y');
xlabel('t');
title('Scatter Plot of Data');
legend('Data','Simulated outliers','Location','NorthWest');

Вырастите квантиль случайный лес

Вырастите мешок 200 деревьев регрессии с помощью TreeBagger.

Mdl = TreeBagger(200,Tbl,'y','Method','regression');

Mdl TreeBagger ансамбль.

Предскажите условные квартили и межквартильные размахи

Используя регрессию квантиля, оцените условные квартили 50 равномерно распределенных значений в области значений t.

tau = [0.25 0.5 0.75];
predT = linspace(0,4*pi,50)';
quartiles = quantilePredict(Mdl,predT,'Quantile',tau);

quartiles 500 3 матрица условных квартилей. Строки соответствуют наблюдениям в t, и столбцы соответствуют вероятностям в tau.

На графике рассеивания данных постройте условные средние и средние ответы.

meanY = predict(Mdl,predT);

plot(predT,[quartiles(:,2) meanY],'LineWidth',2);
legend('Data','Simulated outliers','Median response','Mean response',...
    'Location','NorthWest');
hold off;

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

Вычислите условное выражение IQR, F1, и F2.

iqr = quartiles(:,3) - quartiles(:,1);
k = 1.5;
f1 = quartiles(:,1) - k*iqr;
f2 = quartiles(:,3) + k*iqr;

k = 1.5 средние значения, что все наблюдения меньше, чем f1 или больше, чем f2 рассматриваются выбросами, но этот порог не снимает неоднозначность от экстремальных выбросов. k из 3 идентифицирует экстремальные выбросы.

Сравните наблюдения с заборами

Постройте наблюдения и заборы.

figure;
plot(Tbl.t,Tbl.y,'.');
hold on
plot(Tbl.t(idx),Tbl.y(idx),'*');
plot(predT,[f1 f2]);
legend('Data','Simulated outliers','F_1','F_2','Location','NorthWest');
axis tight
title('Outlier Detection Using Quantile Regression')
hold off

Все симулированные выбросы идут снаружи [F1,F2], и некоторые наблюдения находятся вне этого интервала также.

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

Классы

Функции

Похожие темы