В этом примере показано, как обнаруживать отклонения с помощью квантильного случайного леса. Квантильный случайный лес может обнаруживать отклонения относительно условного распределения , заданного X. Однако этот метод не может обнаруживать отклонения в данных предиктора. Для обнаружения отклонений в данных предиктора с использованием пакета деревьев решений см. OutlierMeasure свойство TreeBagger модель.
Отклонение - это наблюдение, которое расположено достаточно далеко от большинства других наблюдений в наборе данных и может считаться аномальным. Причины внешних наблюдений включают в себя внутреннюю изменчивость или ошибку измерения. Отклонения существенно влияют на оценки и вывод, поэтому важно обнаружить их и решить, удалять их или рассматривать надежный анализ.
Toolbox™ статистики и машинного обучения предоставляет несколько функций для обнаружения отклонений, включая:
zscore - Вычислить z баллов наблюдений.
trimmean - Оценка среднего значения данных, исключая отклонения.
boxplot - Нарисовать рамочный график данных.
probplot - Нарисуйте график вероятностей.
robustcov - Оценка надежной ковариации многомерных данных.
fitcsvm - Поместите одноклассную машину векторов поддержки (SVM), чтобы определить, какие наблюдения расположены далеко от границы принятия решения.
dbscan - разбиение наблюдений на кластеры и определение отклонений с использованием основанной на плотности пространственной кластеризации приложения с алгоритмом шума (DBSCAN).
Кроме того, MATLAB ® обеспечивает isoutlier функция, которая находит отклонения в данных.
Для демонстрации обнаружения отклонений в следующем примере:
Генерирует данные из нелинейной модели с гетероскедастичностью и моделирует несколько отклонений.
Выращивает квантильный случайный лес регрессионных деревьев.
Оценивает условные квартили (, и ) и межквартильный диапазон () в диапазонах переменных предиктора.
Сравнивает наблюдения с заборами, которые являются количествами Q1-1.5IQR 1 .5IQR. Любое наблюдение, которое F1 или F2, является отклонением.
Создание 500 наблюдений из модели
2t) + αt.
равномерно распределяется между 0 и , и 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 = quartiles(:,3) - quartiles(:,1); k = 1.5; f1 = quartiles(:,1) - k*iqr; f2 = quartiles(:,3) + k*iqr;
k = 1.5 означает, что все наблюдения менее f1 или больше, чем f2 считаются отклонениями, но этот порог не отличается от крайних отклонений. A 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

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