Main Content

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')

Figure contains an axes object. The axes object contains 2 objects of type line, stair. One or more of the lines displays its values using only markers These objects represent Data, Segment Mean.

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

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')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent 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' — 기울기에서 급격한 변화와 데이터의 절편을 찾습니다.

연산 차원으로, 양의 정수 스칼라로 지정됩니다. 값이 지정되지 않은 경우 디폴트 값은 크기가 1이 아닌 첫 번째 배열 차원이 됩니다.

m×n 입력 행렬 A가 있다고 가정합니다.

  • ischange(A,1)A의 각 열에 있는 데이터에 따라 변화 지점을 감지하고 m×n 행렬을 반환합니다.

    ischange(A,1) column-wise operation

  • ischange(A,2)A의 각 행에 있는 데이터에 따라 변화 지점을 감지하고 m×n 행렬을 반환합니다.

    ischange(A,2) row-wise operation

table형 또는 timetable형 입력 데이터의 경우 dim은 지원되지 않으며 연산은 각 테이블 변수나 타임테이블 변수를 따라 개별적으로 수행됩니다.

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

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

데이터 옵션

모두 축소

샘플 점으로, 샘플 점 값으로 구성된 벡터로 지정되거나 입력 데이터가 테이블인 경우 다음 표에 나와 있는 옵션 중 하나로 지정됩니다. 샘플 점은 데이터의 x축 위치를 나타내며, 이 샘플 점은 정렬되고 고유한 요소를 가져야 합니다. 샘플 점은 균일하게 샘플링할 필요가 없습니다. 벡터 [1 2 3 ...]이 디폴트 값입니다.

입력 데이터가 테이블이면 다음 옵션 중 하나를 사용하여 샘플 점을 테이블 변수로 지정할 수 있습니다.

인덱싱 방식예제

변수 이름:

  • string형 스칼라 또는 문자형 벡터

  • "A" 또는 'A'A라는 변수

변수 인덱스:

  • 테이블에서의 변수 위치를 나타내는 인덱스 번호

  • 논리형 벡터. 일반적으로 이 벡터는 변수의 개수와 길이가 같지만 후행 0 값 또는 false 값을 생략할 수 있음

  • 3 — 테이블의 세 번째 변수

  • [false false true] — 세 번째 변수

함수 핸들:

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

  • @isnumeric — 숫자형 값을 포함하는 하나의 변수

변수 유형:

  • 지정된 유형의 변수 하나를 선택하는 vartype 첨자

  • vartype("numeric") — 숫자형 값을 포함하는 하나의 변수

참고

입력 데이터가 timetable형인 경우에는 이 이름-값 인수가 지원되지 않습니다. 타임테이블은 행 시간값으로 구성된 벡터를 샘플 점으로 사용합니다. 다른 샘플 점을 사용하려면 행 시간값이 원하는 샘플 점을 포함하도록 타임테이블을 편집해야 합니다.

예: ischange([1 2 3 4 5 6],'linear','SamplePoints',[1 2 3 10 20 30])

예: ischange(T,'linear','SamplePoints',"Var1")

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

연산을 수행할 테이블 변수로, 다음 표에 있는 옵션 중 하나로 지정됩니다. DataVariables 값은 입력 테이블에서 변화 지점이 있는지 조사할 변수를 나타냅니다. 지정된 변수와 연결된 데이터형은 double 또는 single이어야 합니다.

OutputFormat의 값이 'tabular'가 아닌 경우 첫 번째 출력값 TFDataVariables로 지정되지 않은 변수에 대해 false를 포함합니다.

인덱싱 방식예제

변수 이름:

  • string형, 문자형 벡터 또는 셀형 배열

  • pattern 객체

  • "A" 또는 'A'A라는 변수

  • ["A","B"] 또는 {'A','B'}AB라는 두 개의 변수

  • "Var"+digitsPattern(1)"Var" 다음에 하나의 숫자가 오는 이름을 갖는 변수

변수 인덱스:

  • 테이블에서의 변수 위치를 나타내는 인덱스 번호

  • 숫자로 구성된 벡터

  • 논리형 벡터. 일반적으로 이 벡터는 변수의 개수와 길이가 같지만 후행 0 값 또는 false 값을 생략할 수 있음

  • 3 — 테이블의 세 번째 변수

  • [2 3] — 테이블의 두 번째 변수와 세 번째 변수

  • [false false true] — 세 번째 변수

함수 핸들:

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

  • @isnumeric — 숫자형 값을 포함하는 모든 변수

변수 유형:

  • 지정된 유형의 변수를 선택하는 vartype 첨자

  • vartype("numeric") — 숫자형 값을 포함하는 모든 변수

예: ischange(T,'DataVariables',["Var1" "Var2" "Var4"])

출력 데이터형으로, 다음 값 중 하나로 지정됩니다.

  • 'logical' — table형 또는 timetable형 입력 데이터의 경우 출력값 TF를 논리형 배열로 반환합니다.

  • 'tabular' — table형 입력 데이터의 경우 출력값 TF를 table형으로 반환합니다. timetable형 입력 데이터의 경우 출력값 TF를 timetable형으로 반환합니다.

벡터, 행렬 또는 다차원 배열 입력 데이터에는 OutputFormat이 지원되지 않습니다.

예: ischange(T,'OutputFormat','tabular')

변화 지점 옵션

모두 축소

변화 지점 임계값으로, 음이 아닌 스칼라로 지정됩니다. 임계값을 1보다 큰 값으로 늘리면 더 적은 변화 지점이 생성됩니다.

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

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

출력 인수

모두 축소

변화 지점 표시자로, 벡터, 행렬, 다차원 배열, table형 또는 timetable형으로 반환됩니다.

OutputFormat의 값이 'tabular'가 아닌 경우 TFA와 크기가 동일합니다. OutputFormat의 값이 'tabular'이면 TF는 지정된 DataVariables에 대응하는 변수만 가집니다.

데이터형: logical

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

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

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

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

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

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

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

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

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

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

알고리즘

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

C(A1)+C(A2)+τ<C(A).

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

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

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

C(A1)+C(A2)+...+C(Ak)+kτ<C(A).

참고 문헌

[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에 개발됨

모두 확장

참고 항목

함수

라이브 편집기 작업