Main Content

ischange

데이터 내 급격한 변화 찾기

설명

예제

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

라이브 스크립트에 변화 지점 찾기 작업을 추가하여 ischange 기능을 대화형 방식으로 사용할 수 있습니다.

예제

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' — 기울기에서 급격한 변화와 데이터의 절편을 찾습니다.

연산 차원으로, 양의 정수 스칼라로 지정됩니다. 값이 지정되지 않은 경우 디폴트 값은 크기가 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형 또는 문자형 벡터

  • 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).

대체 기능

라이브 편집기 작업

라이브 스크립트에 변화 지점 찾기 작업을 추가하여 ischange 기능을 대화형 방식으로 사용할 수 있습니다.

Find Change Points task in the Live Editor

참고 문헌

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

모두 확장

참고 항목

함수

라이브 편집기 작업