구간 별 선형 데이터 적합


18

부분 선형이지만 잡음이 많은 데이터를 맞추는 강력한 방법은 무엇입니까?

거의 선형 인 여러 세그먼트로 구성된 신호를 측정하고 있습니다. 전이를 감지하기 위해 데이터에 여러 줄을 이상적으로 맞추고 싶습니다.

데이터 세트는 1-10 개의 세그먼트가있는 수천 점으로 구성되며 세그먼트 수를 알고 있습니다.

이것은 내가 자동으로하고 싶은 일의 예입니다.

여기에 이미지 설명을 입력하십시오


브레이크 포인트의 위치를 ​​얼마나 정확하게 알고 싶어하는지, 선형 세그먼트의 최단 길이에 대한 추측 값, 일반적인 샘플 수를 알려주지 않으면이 질문에 합리적으로 대답 할 수 없다고 생각합니다. 전환 지역. 당신의 그림의 수평 축 레이블 샘플 숫자 인 경우, 다음의 범위에서 두 개의 전환과 X [ 0 ] , 태스크에 (직선 세그먼트가 더 이상 지속 기간 인 경우보다 더 어렵다 견본). x[5]x[0]
Dilip Sarwate

@DilipSarwate 나는 요구 사항으로 질문을 업데이트했습니다 (x 축은 테슬라의 자기장입니다)
P3trus

답변:


12

나는 순진하게 두 가지 접근법을 시도했습니다 (3 개의 세그먼트 만 사용). 분명히 더 멋진 방법이있을 것입니다.

    RANSAC는 강력한 피팅 메커니즘이어야합니다. 여러 세그먼트 후에 알고리즘을 중지하기 쉽습니다. 그러나 최소한 간단한 구현으로는 응용 프로그램에 필요한 것처럼 세그먼트간에 연속성을 적용하기가 어려울 수 있습니다. 개념 증명 된 바와 같이, 난의 I가 가능한 RANSAC 엔진을 사용할 수 있도록 데이터 포인트에서 생성 이미지 , 매쓰의 선 검출 기능.ImageLines

여기에 이미지 설명을 입력하십시오

    범용 최소화기를 사용하여 부분 선형 모델을 피팅하십시오. 세그먼트 연속성을 쉽게 적용 할 수 있습니다. 흥미롭게도 잔차 및 기타 속성을 테스트하면 세그먼트 수를 자동으로 결정하기에 충분한 정보를 제공 할 수 있습니다.하지만 시도하지는 않았습니다. Mathematica에서 다음과 같이 보입니다.

여기에 이미지 설명을 입력하십시오


좋은 답변처럼 보입니다. 기여해 주셔서 감사합니다.
Jason R

7

x[n]

  • x[n]y[n]

    y[n]={1,if |(x[n+1]x[n])(x[n]x[n1])|<ϵ,0,otherwise.
    ϵx[n1],x[n],x[n+1](n1,x[n1])(n,x[n])(n,x[n])(n+1,x[n+1])
  • y[n]1011ϵ

  • y[n]x[3]x[88]x[94]x[120]x[129], 등등. 교차하는 위치를 찾으려면 A를 오른쪽으로, B를 왼쪽으로 확장하십시오. B를 오른쪽으로, C를 왼쪽으로 확장하여 교차하는 위치 등을 찾습니다. 축하합니다. 이제 데이터에 대한 연속적이고 부분적인 선형 모델이 생겼습니다.


내 대답을 완전히 훔쳤다! =)
Phonon

아이디어를 방해하지만 슬프게도 신호의 소음으로 인해 좋은 결과를 얻지 못합니다.
P3trus

1
마그 니트가 엡실론과 비교되는 표현은 실제로 데이터의 2 차 미분에 대한 근사치입니다. 노이즈에 많이 반응하지 않는 3 개 이상의 점을 사용하여이를 계산하는 다른 방법이 있습니다. Savitzky-Golay를 찾으십시오.
DarenW

4

(나중에) 부분 선형 함수는 1 차 스플라인이며 대부분의 스플라인 피팅 담당자에게 지시 할 수 있습니다. scipy.interpolate.UnivariateSpline 예를 실행할 수 있습니다 k=1 및 평활 매개 변수 s는 함께 플레이해야합니다 - 참조 scipy-보간와-단 변량 스플라인을 .
Matlab에서 방법 선택 방법 노트를 참조하십시오 .

추가 : 최적의 매듭을 찾는 것은 쉬운 일이 아닙니다. 지역 최적화가 많을 수 있기 때문입니다. 대신 UnivariateSpline에 target s, error of sum ^ 2를 부여하고 매듭 수를 결정하게하십시오. 피팅 후 get_residual()실제 오차 = 2와 get_knots()매듭 을 얻습니다 . 작은 변화는 s특히 고 소음인 ymmv에서 매듭을 많이 바꿀 수 있습니다.
이 그림은 다양한 부분 선형 함수 + 노이즈에 적합하다는 것을 보여줍니다 s.

구간 별 상수 피팅에 대해서는 단계 감지를 참조하십시오 . pw linear에 사용할 수 있습니까? 모름; 노이즈가 많은 데이터를 차별화하여 시작하면 노이즈가 증가합니다.

다른 테스트 기능 및 / 또는 논문 또는 코드 링크도 환영합니다. 두 개의 링크 :
매개 변수로 매듭이있는 부분 선형 회귀
선형 스플라인은 매듭이 배치되는 위치에 입방체 회귀 스플라인에 대한 매듭 선택에 매우 민감합니다.

이것은 까다로운 문제이며 대부분의 사람들은 시행 착오로 매듭을 선택합니다.
인기가 높아지고있는 한 가지 방법은 처벌 회귀 스플라인을 대신 사용하는 것입니다.


2014 년 3 월 추가됨 : 동적 프로그래밍 은 다음과 같이 중첩 된 하위 문제에 대한 일반적인 방법입니다.

optimal k lines
    = optimal k - 1 lines up to some x
    + cost of the last line x to the end
over x  (all x in theory, nearby x in practice)

다이나믹 프로그래밍은 매우 영리하지만이 작업에서 무차별 + 휴리스틱을 이길 수 있습니까? MIT 6.006
에서 Erik Demaine의 우수한 강의 노트를 참조하십시오. 알고리즘 소개
Google 세그먼트 선형 회귀 및
John Henry 증후군.


여기에 이미지 설명을 입력하십시오


적어도 scipy의 문제는 매듭의 위치입니다. scipy는 같은 간격의 매듭을 사용합니다.
P3trus

@ P3trus, 예, 시작했지만 그들은 움직일 수 있습니다-줄거리를보십시오. 어쨌든 그것은 매듭이 아닌 총 오류를 목표로합니다.
데니스

@ P3trus 중단 점을 반복적으로 자동 선택하는 다변량 회귀 스플라인 방법을 사용해 보셨습니까? cs.rtu.lv/jekabsons/regression.html
Atul Ingle

@Atul Ingle, afaik 중단 점 / 매듭 선택은 스플라인 피팅에 관계없이 동일한 문제입니다. R / 회귀 사람들과 다른 알고리즘을 알고 있다면 링크를 게시 할 수 있습니까?
데니스

적응 형 회귀 스플라인을 수행하는 R / Matlab 패키지를 찾고 있습니까? 여기 : cran.r-project.org/web/packages/earth/index.html cran.r-project.org/web/packages/mda/index.html 및 Matlab의 ARESLab은 이미 링크를 게시했습니다.
Atul Ingle

0

미분을 취하고 거의 일정한 값의 영역을 찾으십시오. 이상적으로 +/- 경사 레벨이있는 ​​영역을 검색하려면 해당 섹션에 대한 선의 경사를 제공하는 알고리즘을 만들어야합니다. 단면 분류를 수행하기 전에 슬라이딩 평균과 같은 일부 평활화를 수행 할 수 있습니다. 다음 단계는 y- 교차점을 얻는 것입니다.


파생물은 잡음이 심할 수 있습니다. 나는 그것을 추천 할 것이라고 생각하지 않습니다.
robert bristow-johnson 2012

0

l1 트렌드 필터를 사용하는 것도 또 다른 아이디어입니다.

종이

온라인 예


1
당신의 대답은 건설하기에는 너무 짧습니다! 교육 학적 방식으로 확장하기 위해 노력하십시오.
sansuiso
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.