부분 선형이지만 잡음이 많은 데이터를 맞추는 강력한 방법은 무엇입니까?
거의 선형 인 여러 세그먼트로 구성된 신호를 측정하고 있습니다. 전이를 감지하기 위해 데이터에 여러 줄을 이상적으로 맞추고 싶습니다.
데이터 세트는 1-10 개의 세그먼트가있는 수천 점으로 구성되며 세그먼트 수를 알고 있습니다.
이것은 내가 자동으로하고 싶은 일의 예입니다.
부분 선형이지만 잡음이 많은 데이터를 맞추는 강력한 방법은 무엇입니까?
거의 선형 인 여러 세그먼트로 구성된 신호를 측정하고 있습니다. 전이를 감지하기 위해 데이터에 여러 줄을 이상적으로 맞추고 싶습니다.
데이터 세트는 1-10 개의 세그먼트가있는 수천 점으로 구성되며 세그먼트 수를 알고 있습니다.
이것은 내가 자동으로하고 싶은 일의 예입니다.
답변:
나는 순진하게 두 가지 접근법을 시도했습니다 (3 개의 세그먼트 만 사용). 분명히 더 멋진 방법이있을 것입니다.
, 등등. 교차하는 위치를 찾으려면 A를 오른쪽으로, B를 왼쪽으로 확장하십시오. B를 오른쪽으로, C를 왼쪽으로 확장하여 교차하는 위치 등을 찾습니다. 축하합니다. 이제 데이터에 대한 연속적이고 부분적인 선형 모델이 생겼습니다.
(나중에) 부분 선형 함수는 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에 사용할 수 있습니까? 모름; 노이즈가 많은 데이터를 차별화하여 시작하면 노이즈가 증가합니다.
다른 테스트 기능 및 / 또는 논문 또는 코드 링크도 환영합니다. 두 개의 링크 :
매개 변수로 매듭이있는 부분 선형 회귀
선형 스플라인은 매듭이 배치되는 위치에 입방체 회귀 스플라인에 대한 매듭 선택에 매우 민감합니다.
이것은 까다로운 문제이며 대부분의 사람들은 시행 착오로 매듭을 선택합니다.
인기가 높아지고있는 한 가지 방법은 처벌 회귀 스플라인을 대신 사용하는 것입니다.
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 증후군.
미분을 취하고 거의 일정한 값의 영역을 찾으십시오. 이상적으로 +/- 경사 레벨이있는 영역을 검색하려면 해당 섹션에 대한 선의 경사를 제공하는 알고리즘을 만들어야합니다. 단면 분류를 수행하기 전에 슬라이딩 평균과 같은 일부 평활화를 수행 할 수 있습니다. 다음 단계는 y- 교차점을 얻는 것입니다.