ischange

데이터 내 급격한 변화 찾기

설명

예제

TF = ischange(A)A의 대응하는 요소의 평균에서 급격한 변화가 있을 때 요소가 1(true)인 논리형 배열을 반환합니다.

예제

TF = ischange(A,method)는 데이터 내 변화 지점을 정의하는 방법을 지정합니다. 예를 들어, ischange(A,'variance')A를 구성하는 요소의 분산에서 급격한 변화를 찾습니다.

예제

TF = ischange(___,dim)은 위에 열거된 구문에서 동작을 수행할 A의 차원을 지정합니다. 예를 들어, ischange(A,2)는 행렬 A의 각 행에서 나타난 변화 지점을 계산합니다.

예제

TF = ischange(___,Name,Value)는 하나 이상의 이름-값 쌍의 인수를 사용하여 변화 지점을 찾기 위한 추가 파라미터를 지정합니다. 예를 들어, ischange(A,'MaxNumChanges',m)은 최대 m개의 변화 지점을 감지합니다.

예제

또한 [TF,S1] = ischange(___)는 변화 지점 간 선분에 대한 정보를 반환합니다. 예를 들어, [TF,S1] = ischange(A)는 벡터 A의 변화 지점 간 데이터 평균을 포함하는 벡터 S1을 반환합니다.

예제

[TF,S1,S2] = ischange(___)는 변화 지점 간 선분에 대한 추가 정보를 반환합니다. 예를 들어, [TF,S1,S2] = ischange(A)는 각 선분(세그먼트)에 대한 평균을 포함하는 벡터 S1뿐만 아니라, 벡터 A의 각 세그먼트에 대한 분산을 포함하는 벡터 S2도 반환합니다.

예제

모두 축소

잡음이 있는 데이터로 구성된 벡터를 만들고 데이터 평균의 급격한 변화를 계산합니다.

A = [ones(1,5) 25*ones(1,5) 50*ones(1,5)] + rand(1,15);
TF = ischange(A)
TF = 1x15 logical array

   0   0   0   0   0   1   0   0   0   0   1   0   0   0   0

변화 지점 간의 데이터 평균을 계산하려면 두 번째 출력 인수를 지정하십시오.

[TF,S1] = ischange(A);
plot(A,'*')
hold on
stairs(S1)
legend('Data','Segment Mean','Location','NW')

잡음이 있는 데이터로 구성된 벡터를 만들고 기울기의 급격한 변화와 데이터의 절편을 계산합니다. 감지 임계값을 크게 설정하면 잡음으로 인해 감지되는 변화 지점 개수가 줄어듭니다.

A = [zeros(1,100) 1:100 99:-1:50  50*ones(1,250)] + 10*rand(1,500);
[TF,S1,S2] = ischange(A,'linear','Threshold',200);
segline = S1.*(1:500) + S2;
plot(1:500,A,1:500,segline)              
legend('Data','Linear Regime')

임계값을 주는 방법 대신, 감지할 최대 변화 지점 수를 지정할 수도 있습니다.

[TF,S1,S2] = ischange(A,'linear','MaxNumChanges',3);

행렬의 각 행에 대한 평균의 급격한 변화 지점을 계산합니다.

A = diag(25*ones(5,1)) + rand(5,5)
A = 5×5

   25.8147    0.0975    0.1576    0.1419    0.6557
    0.9058   25.2785    0.9706    0.4218    0.0357
    0.1270    0.5469   25.9572    0.9157    0.8491
    0.9134    0.9575    0.4854   25.7922    0.9340
    0.6324    0.9649    0.8003    0.9595   25.6787

TF = ischange(A,2)
TF = 5x5 logical array

   0   1   0   0   0
   0   1   1   0   0
   0   0   1   1   0
   0   0   0   1   1
   0   0   0   0   1

입력 인수

모두 축소

입력 데이터로, 벡터, 행렬, 다차원 배열, table형 또는 timetable형으로 지정됩니다.

데이터형: single | double | table | timetable

변화 감지 방법으로, 다음 중 하나로 지정됩니다.

  • 'mean' — 데이터 평균에서 급격한 변화를 찾습니다.

  • 'variance' — 데이터 분산에서 급격한 변화를 찾습니다.

  • 'linear' — 기울기에서 급격한 변화와 데이터의 절편을 찾습니다.

연산 차원으로, 양의 정수 스칼라로 지정됩니다. 기본적으로 ischange는 크기가 1이 아닌 첫 번째 차원을 따라 동작합니다.

예를 들어, A가 행렬이면 ischange(A,1)A의 행에서 연산을 수행해 각 열에 대한 변화 지점을 계산합니다.

ischange(A,2)A의 열에서 연산을 수행해 각 행에 대한 변화 지점을 계산합니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

이름-값 쌍의 인수

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정됩니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. Name은 따옴표 안에 표시해야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 어떤 순서로든 지정할 수 있습니다.

예: TF = ischange(A,'MaxNumChanges',5)

변화 지점 임계값으로, 'Threshold'와 함께 음이 아닌 스칼라가 쉼표로 구분되어 지정됩니다. 임계값을 1보다 큰 값으로 늘리면 더 적은 변화 지점이 생성됩니다.

임계값은 감지되는 변화 지점 개수를 정의하고 'MaxNumChanges'가 지정된 경우에는 지정할 수 없습니다.

데이터형: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

감지할 최대 변화 지점 개수로, 'MaxNumChanges'와 함께 양의 정수 스칼라가 쉼표로 구분되어 지정됩니다. ischange는 지정한 변화 지점 값까지만 계산하는 자동 임계값을 사용하므로 'MaxNumChanges'가 지정된 경우에는 'Threshold'를 지정할 수 없습니다.

데이터형: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

테이블 변수로, 'DataVariables'와 함께 변수 이름, 변수 이름으로 구성된 셀형 배열, 숫자형 벡터, 논리형 벡터 또는 함수 핸들이 쉼표로 구분되어 지정됩니다. 'DataVariables' 값은 입력 테이블 또는 타임테이블의 어느 열에서 작동하는지를 나타내며, 다음 중 하나일 수 있습니다.

  • 단일 테이블 변수 이름을 지정하는 문자형 벡터

  • 각 요소가 테이블 변수 이름인, 문자형 벡터로 구성된 셀형 배열

  • 테이블 변수 인덱스로 구성된 벡터

  • 각각의 요소가 테이블 변수에 해당하는 논리형 벡터. 여기서 true는 해당하는 변수를 포함하고 false는 해당하는 변수를 제외합니다.

  • 테이블을 입력값으로 취하고 논리형 스칼라를 반환하는 함수 핸들

지정된 테이블 변수는 double형이나 single형이어야 합니다.

예: 'Age'

예: {'Height','Weight'}

예: @isnumeric

데이터형: char | cell | logical | double | single | function_handle

샘플 점으로, 'SamplePoints'와 함께 벡터가 쉼표로 구분되어 지정됩니다. 샘플 점은 A에 있는 데이터의 위치를 나타냅니다. 샘플 점은 균일하게 샘플링할 필요가 없지만, 고유한 요소로 정렬되어야 합니다. 기본적으로, 샘플 점 벡터는 [1 2 3 ...]입니다.

입력 데이터가 timetable형인 경우 ischange에는 이 이름-값 쌍이 지원되지 않습니다.

데이터형: double | single | datetime | duration

출력 인수

모두 축소

변화 지점 표시자로, 벡터, 행렬 또는 다차원 배열로 반환됩니다. TFA와 크기가 동일합니다.

데이터형: logical

변화 지점 간 데이터의 평균 또는 기울기로, 벡터, 행렬, 다차원 배열, 테이블 또는 타임테이블로 반환됩니다.

  • 변화 지점 감지 방법이 'mean'이나 'variance'이면 S1에는 각 세그먼트에 대한 평균이 포함됩니다.

  • 방법이 'linear'이면 S1에는 각 세그먼트에 대한 기울기가 포함됩니다.

s1의 유형은 입력 데이터와 같습니다.

데이터형: double | single | table | timetable

변화 지점 간 데이터의 분산 또는 절편으로, 벡터, 행렬, 다차원 배열, 테이블 또는 타임테이블로 반환됩니다.

  • 변화 지점 감지 방법이 'mean'이나 'variance'이면 S2에는 각 세그먼트에 대한 분산이 포함됩니다.

  • 방법이 'linear'이면 S2에는 각 세그먼트에 대한 절편이 포함됩니다.

s2의 유형은 입력 데이터와 같습니다.

데이터형: double | single | table | timetable

세부 정보

모두 축소

변화 지점

데이터 A로 구성된 벡터는 다음과 같이 두 개의 세그먼트, A1과 A2로 분할될 수 있는 경우 변화 지점이 포함됩니다.

'Threshold' 파라미터로 지정되는 임계값이고, C는 비용 함수를 나타냅니다.

예를 들어, 평균에서 급격한 변화를 감지하는 비용 함수는 입니다. 여기서, N은 벡터 x에 있는 요소의 개수입니다. 비용 함수는 세그먼트가 얼마나 평균에 근접한지를 측정합니다.

ischange는 비용 함수의 합계를 반복적으로 최소화하여 다음과 같이 변화 지점 개수 k와 이러한 변화 지점의 위치를 판별합니다.

참고 문헌

[1] Killick R., P. Fearnhead, and I.A. Eckley. "Optimal detection of changepoints with a linear computational cost." Journal of the American Statistical Association. Vol. 107, Number 500, 2012, pp.1590-1598.

R2017b에 개발됨