Усреднение данных и определение выбросов

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

Перемещение методов окна

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

Например, считайте измерения скорости ветра бравшимися каждую минуту в течение приблизительно 3 часов. Используйте функцию movmean с размером окна 5 минут, чтобы сгладить высокоскоростные порывы ветра.

load windData.mat
mins = 1:length(speed);
window = 5;
meanspeed = movmean(speed,window);
plot(mins,speed,mins,meanspeed)
axis tight
legend('Measured Wind Speed','Average Wind Speed over 5 min Window','location','best')
xlabel('Time')
ylabel('Speed')

Точно так же можно вычислить среднюю скорость ветра по раздвижному окну с помощью функции movmedian.

medianspeed = movmedian(speed,window);
plot(mins,speed,mins,medianspeed)
axis tight
legend('Measured Wind Speed','Median Wind Speed over 5 min Window','location','best')
xlabel('Time')
ylabel('Speed')

Не все данные подходит для сглаживания с движущимся методом окна. Например, создайте синусоидальный сигнал с введенным случайным шумом.

t = 1:0.2:15;
A = sin(2*pi*t) + cos(2*pi*0.5*t);
Anoise = A + 0.5*rand(1,length(t));
plot(t,A,t,Anoise)
axis tight
legend('Original Data','Noisy Data','location','best')

Используйте движущееся среднее значение с размером окна 3, чтобы сглаживать шумные данные.

window = 3;
Amean = movmean(Anoise,window);
plot(t,A,t,Amean)
axis tight
legend('Original Data','Moving Mean - Window Size 3')

Движущееся среднее значение достигает общей формы данных, но не получает долины (локальные минимумы) очень точно. Поскольку точки долины окружаются двумя более крупными соседями в каждом окне, среднее значение не является очень хорошим приближением к тем точкам. Если вы делаете размер окна больше, среднее значение устраняет более короткий peaks в целом. Для этого типа данных вы можете рассмотреть альтернативные методы сглаживания.

Amean = movmean(Anoise,5);
plot(t,A,t,Amean)
axis tight
legend('Original Data','Moving Mean - Window Size 5','location','best')

Общие методы сглаживания

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

Используйте метод Savitzky-Golay, чтобы сглаживать сигнал с шумом Anoise и вывести размер окна, который это использует. Этот метод обеспечивает лучшее приближение долины по сравнению с movmean.

[Asgolay,window] = smoothdata(Anoise,'sgolay');
plot(t,A,t,Asgolay)
axis tight
legend('Original Data','Savitzky-Golay','location','best')

window
window = 3

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

Anoise(36) = 20;
Arlowess = smoothdata(Anoise,'rlowess',5);
plot(t,Anoise,t,Arlowess)
axis tight
legend('Noisy Data','Robust Lowess')

Обнаружение выбросов

Выбросы в данных могут значительно скосить результаты обработки данных и другие вычисленные количества. Например, при попытке сглаживать данные, содержащие выбросы с движущейся медианой, можно получить вводящий в заблуждение peaks или долины.

Amedian = smoothdata(Anoise,'movmedian');
plot(t,Anoise,t,Amedian)
axis tight
legend('Noisy Data','Moving Median')

Функция isoutlier возвращает логическую единицу, когда изолированная часть обнаруживается. Проверьте индекс и значение изолированной части в Anoise.

TF = isoutlier(Anoise);
ind = find(TF)
ind = 36
Aoutlier = Anoise(ind)
Aoutlier = 20

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

Afill = filloutliers(Anoise,'next');
plot(t,Anoise,t,Afill)
axis tight
legend('Noisy Data with Outlier','Noisy Data with Filled Outlier')

Неоднородные данные

Не все данные состоят из равномерно распределенных точек, которые могут влиять на методы для обработки данных. Создайте вектор datetime, который содержит неправильное время выборки для данных в Airreg. Вектор time представляет выборки, бравшиеся каждую минуту в течение первых 30 минут, затем каждый час более чем двух дней.

t0 = datetime(2014,1,1,1,1,1);
timeminutes = sort(t0 + minutes(1:30));
timehours = t0 + hours(1:48);
time = [timeminutes timehours];
Airreg = rand(1,length(time));
plot(time,Airreg)
axis tight

По умолчанию smoothdata сглаживает относительно равномерно распределенных целых чисел, в этом случае, 1,2,...,78. Поскольку целочисленные метки времени не координируют с выборкой точек в Airreg, час первой половины данных все еще кажется шумным после сглаживания.

Adefault = smoothdata(Airreg,'movmean',3);
plot(time,Airreg,time,Adefault)
axis tight
legend('Original Data','Smoothed Data with Default Sample Points')

Много функций обработки данных в MATLAB®, включая smoothdata, movmean, и filloutliers, позволяют вам обеспечивать точки выборки, гарантируя, что данные обрабатываются относительно его модулей выборки и частот. Чтобы удалить высокочастотное изменение в час первой половины данных в Airreg, используйте опцию 'SamplePoints' с метками времени в time.

Asamplepoints = smoothdata(Airreg,'movmean',hours(3),'SamplePoints',time);
plot(time,Airreg,time,Asamplepoints)
axis tight
legend('Original Data','Smoothed Data with Sample Points')

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

| | | |

Похожие темы

Была ли эта тема полезной?