В этом примере показано, как обнаружить выбросы с помощью случайного леса с количеством. Случайный лес Квантиля может обнаружить выбросы относительно условного распределения данный . Однако этот метод не может обнаружить выбросы в данных предиктора. Для определения выбросов в данных предиктора с помощью пакета деревьев решений, смотрите OutlierMeasure
свойство TreeBagger
модель.
Выбросы являются наблюдением, которое находится достаточно далеко от большинства других наблюдений в наборе данных и может считаться аномальным. Причины окружающих наблюдений включают неотъемлемую изменчивость или ошибку измерения. Выбросы, значимые, влияют на оценки и выводы, поэтому важно обнаружить их и решить, удалять ли их или рассматривать устойчивый анализ.
Statistics and Machine Learning Toolbox™ предоставляет несколько функций для обнаружения выбросов, включая:
zscore
- Вычислите z счетов наблюдений.
trimmean
- Оценка среднего значения данных, исключая выбросы.
boxplot
- Рисуйте прямоугольный график данных.
probplot
- Нарисуйте график вероятностей.
robustcov
- Оценка устойчивой ковариации многомерных данных.
fitcsvm
- Подгонка одноклассной машины опорных векторов (SVM), чтобы определить, какие наблюдения расположены далеко от контура принятия решения.
dbscan
- Разбить наблюдения на кластеры и идентифицировать выбросы с помощью основанной на плотности пространственной кластеризации приложения с шумом (DBSCAN) алгоритма.
Кроме того, MATLAB ® предоставляет isoutlier
функция, которая находит выбросы в данных.
Чтобы продемонстрировать определение выбросов, этот пример:
Генерирует данные нелинейной модели с гетероскедастичностью и имитирует несколько выбросов.
Выращивает квантильный случайный лес регрессионых деревьев.
Оценивает условные квартилии (, , и ) и межквартильная область значений () в областях значений переменных предиктора.
Сравнивает наблюдения с ограждениями, которые являются величинами и . Любое наблюдение, которое меньше или больше, чем - это выбросы.
Сгенерируйте 500 наблюдений из модели
равномерно распределено между 0 и , и . Сохраните данные в таблице.
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
Все моделируемые выбросы падают наружу , и некоторые наблюдения также находятся вне этого интервала.