Main Content

smooth

응답 변수 데이터 평활화

설명

예제

yy = smooth(y)는 이동평균 필터를 사용하여 열 벡터 y에 있는 응답 변수 데이터를 평활화합니다.

다음은 yy의 처음 몇 개의 요소입니다.

yy(1) = y(1)
yy(2) = (y(1) + y(2) + y(3))/3
yy(3) = (y(1) + y(2) + y(3) + y(4) + y(5))/5
yy(4) = (y(2) + y(3) + y(4) + y(5) + y(6))/5
...
smooth가 끝점을 처리하는 방식 때문에 결과는 filter 함수가 반환하는 결과와 다릅니다.

yy = smooth(y,span)은 이동평균의 범위를 span으로 설정합니다.

yy = smooth(y,method)method로 지정된 방법과 디폴트 span을 사용하여 y의 데이터를 평활화합니다.

예제

yy = smooth(y,span,method)method의 범위를 span으로 설정합니다.

yy = smooth(y,'sgolay',degree)degree로 지정된 다항식 차수를 적용한 사비츠키-골레이 방법을 사용합니다.

yy = smooth(y,span,'sgolay',degree)는 사비츠키-골레이 계산에서 span으로 지정된 데이터 점의 개수를 사용합니다. span은 홀수여야 하고 degreespan보다 작아야 합니다.

예제

yy = smooth(x,y,___)는 독립 변수 x에 대한 값을 지정합니다. 이 구문은 위에 열거된 구문의 인수에 사용할 수 있습니다.

gpuarrayYY = smooth(gpuarrayY,___)gpuArray 데이터를 사용하여 GPU에서 연산을 수행합니다. gpuArray 응답 변수 데이터는 위에 열거된 모든 구문에서 사용할 수 있습니다. 이 구문을 사용하려면 Parallel Computing Toolbox™가 필요합니다.

gpuarrayYY = smooth(gpuarrayX,gpuarrayY,___)gpuArray 입력 데이터를 사용하여 GPU에서 연산을 수행합니다. 이 구문을 사용하려면 Parallel Computing Toolbox가 필요합니다.

참고

smooth 함수에서 gpuArray xy 입력값을 사용하는 것은 디폴트 방법 'moving'을 사용하는 경우에만 권장됩니다. 다른 방법에서 GPU 데이터를 사용하면 어떠한 성능 이점도 제공되지 않습니다.

예제

모두 축소

이동평균 필터를 사용하여 데이터를 선형 인덱스 기준으로 평활화해 보고, 이동평균 필터를 사용하여 각 열을 개별적으로 평활화해 봅니다. 결과를 플로팅하고 비교합니다.

count.dat의 데이터를 불러옵니다. 24×3 배열 count에는 하루 동안 세 곳의 교차로에서 집계된 시간당 교통량이 포함되어 있습니다.

load count.dat

데이터가 연속 3일 동안 한 곳의 교차로에서 집계된 것이라고 가정하겠습니다. 모든 데이터를 한꺼번에 평활화하면 이 교차로를 통과하는 교통량의 전반적인 주기를 알아낼 수 있습니다. 5시간 범위를 갖는 이동평균 필터를 사용하여 모든 데이터를 선형 인덱스를 기준으로 동시에 평활화합니다.

c = smooth(count(:));
C1 = reshape(c,24,3);

그러나 실제로 데이터는 세 곳의 서로 다른 교차로에서 집계된 것입니다. 그러므로 열을 기준으로 평활화하면 하루 동안 각 교차로를 통과하는 교통량에 대한 보다 의미 있는 정보를 볼 수 있습니다. 데이터의 각 열을 개별적으로 평활화하려면 동일한 이동평균 필터를 사용하십시오.

C2 = zeros(24,3);
for I = 1:3
    C2(:,I) = smooth(count(:,I));
end

원래 데이터와 선형 인덱스를 기준으로 평활화한 데이터와 각 열을 개별적으로 평활화한 데이터를 플로팅합니다. 그런 다음 평활화된 데이터 세트 간의 차이를 플로팅합니다. 두 방법은 끝점 근방에서 서로 다른 결과를 보입니다.

subplot(3,1,1)
plot(count,':');
hold on
plot(C1,'-');
title('Smooth C1 (All Data)')

subplot(3,1,2)
plot(count,':');
hold on
plot(C2,'-');
title('Smooth C2 (Each Column)')

subplot(3,1,3)
plot(C2 - C1,'o-')
title('Difference C2 - C1')

Figure contains 3 axes objects. Axes object 1 with title Smooth C1 (All Data) contains 6 objects of type line. Axes object 2 with title Smooth C2 (Each Column) contains 6 objects of type line. Axes object 3 with title Difference C2 - C1 contains 3 objects of type line.

loess 방법과 rloess 방법을 사용하여 데이터를 평활화하고 결과를 플로팅하여 비교합니다. 그런 다음 어느 방법이 이상값에 덜 민감한지 확인합니다.

2개의 이상값을 포함하는 잡음이 있는 데이터를 만듭니다.

x = (0:0.1:15)';
y = sin(x) + 0.5*(rand(size(x))-0.5);
y([90,110]) = 3;

loess 방법과 rloess 방법을 사용하여 데이터를 평활화합니다. 데이터 점의 총 개수의 10%를 범위로 사용합니다.

yy1 = smooth(x,y,0.1,'loess');
yy2 = smooth(x,y,0.1,'rloess');

원래 데이터와 평활화된 데이터를 플로팅합니다. 로버스트 방법 rloess에서 이상값이 더 적은 영향을 줍니다.

subplot(2,1,1)
plot(x,y,'b.',x,yy1,'r-')
set(gca,'YLim',[-1.5 3.5])
legend('Original data','Smoothed data using ''loess''',...
       'Location','NW')
   
subplot(2,1,2)
plot(x,y,'b.',x,yy2,'r-')
set(gca,'YLim',[-1.5 3.5])
legend('Original data','Smoothed data using ''rloess''',...
       'Location','NW')

Figure contains 2 axes objects. Axes object 1 contains 2 objects of type line. These objects represent Original data, Smoothed data using 'loess'. Axes object 2 contains 2 objects of type line. These objects represent Original data, Smoothed data using 'rloess'.

입력 인수

모두 축소

평활화할 데이터로, 열 벡터로 지정됩니다.

데이터가 NaN을 포함하고 있고 x를 지정하지 않은 경우에는 데이터는 비균일한 것으로 처리되고 평활화 방법 'lowess'가 사용됩니다.

데이터형: single | double

평활화된 값을 계산하기 위한 데이터 점 개수로, 정수 또는 (0,1) 범위의 스칼라 값으로 지정됩니다. 후자는 데이터 점의 총 개수 중의 비율을 나타냅니다.

이동평균 방법이나 사비츠키-골레이 방법을 사용할 경우에는 평활화된 값을 계산하기 위한 데이터 점 개수가 홀수 정수여야 합니다. span을 짝수로 지정하거나 데이터 점의 개수가 짝수가 되는 분수로 지정하면 span은 자동으로 1만큼 축소됩니다.

예: 7; 0.6

응답 변수 데이터를 평활화할 방법으로, 다음 방법 중 하나로 지정됩니다.

방법

설명

'moving'(디폴트 값)

이동평균. 범위의 역수를 필터 계수로 갖는 저역통과 필터.

'lowess'

가중 선형 최소제곱 및 1차 다항식 모델을 사용한 국소 회귀.

'loess'

가중 선형 최소제곱 및 2차 다항식 모델을 사용한 국소 회귀.

'sgolay'

사비츠키-골레이 필터. 비가중 선형 최소제곱 회귀로 정해진 필터 계수와 지정된 차수(디폴트 값은 2)의 다항식 모델을 갖는 일반화된 이동평균. 이 방법은 비균일한 예측 변수 데이터를 받을 수 있습니다.

'rlowess'

회귀에서 이상값에 보다 작은 가중치를 부여하는, 'lowess'의 로버스트 버전. 이 방법은 6 평균 절대 편차 밖에 있는 데이터에 가중치 0을 부여합니다.

'rloess'

회귀에서 이상값에 보다 작은 가중치를 부여하는, 'loess'의 로버스트 버전. 이 방법은 6 평균 절대 편차 밖에 있는 데이터에 가중치 0을 부여합니다.

데이터형: char | string

사비츠키-골레이 방법에서 사용되는 모델의 다항식 차수로, 스칼라 값으로 지정됩니다. degreespan보다 작아야 합니다.

예: 3

응답 변수 데이터 y에 대한 독립 변수로, 열 벡터로 지정됩니다. x를 제공하지 않으면 x가 필요한 방법에서는 x = 1:length(y)라고 간주합니다. y가 정렬되지 않았거나 균일한 간격을 갖지 않을 경우 x 데이터를 지정하십시오. x가 균일하지 않고 method를 지정하지 않은 경우에는 lowess가 사용됩니다. x가 정렬되어야 하는 평활화 방법을 지정한 경우에는 함수가 자동으로 x 데이터를 정렬합니다.

데이터형: single | double

평활화할 데이터로, gpuArray 열 벡터로 지정됩니다.

데이터형: single | double

응답 변수 데이터 gpuarrayY에 대한 입력 데이터로, gpuArray 열 벡터로 지정됩니다. gpuarrayX를 제공하지 않으면 gpuarrayX가 필요한 방법에서는 gpuarrayX = 1:length(y)라고 간주합니다. 데이터가 균일한 간격을 갖지 않거나 정렬되지 않은 경우 gpuarrayX 데이터를 지정하십시오. gpuarrayX 데이터가 균일하지 않고 평활화 방법을 지정하지 않은 경우에는 'lowess'가 사용됩니다. gpuarrayX가 정렬되어야 하는 평활화 방법을 지정한 경우에는 함수가 자동으로 gpuarrayX 데이터를 정렬합니다.

데이터형: single | double

출력 인수

모두 축소

평활화된 데이터로, 열 벡터로 반환됩니다.

평활화된 데이터로, gpuArray 열 벡터로 반환됩니다.

  • 이동 중앙값 방법과 가우스 방법을 비롯해 데이터 평활화를 위한 더 많은 옵션을 보려면 smoothdata를 참조하십시오.

  • 평활화 스플라인을 사용하여 데이터에 대한 매끄러운 피팅을 생성할 수 있습니다. 자세한 내용은 fit을 참조하십시오.

확장 기능

버전 내역

R2006a 이전에 개발됨