비선형 최소 제곱 법에 대한 초기 값을 선택하는 방법


13

위의 질문은 모든 것을 말합니다. 기본적으로 내 질문은 내가 추정하려고하는 매개 변수에서 비선형 적 인 일반적인 피팅 함수 (임의로 복잡 할 수 있음)에 대한 것입니다. 맞춤을 초기화하기 위해 초기 값을 어떻게 선택합니까? 비선형 최소 제곱을하려고합니다. 전략이나 방법이 있습니까? 이것이 연구 되었습니까? 어떤 참조? 임시 추측 외에 다른 것? 특히, 내가 지금 사용하고있는 피팅 양식 중 하나는 다음과 같이 추정하려고하는 5 개의 매개 변수가있는 가우스 플러스 선형 양식입니다.

y=Ae(xBC)2+Dx+E

여기서 (abscissa data) 및 y = log 10 (좌표 데이터)는 log-log 공간에서 내 데이터가 직선과 범프처럼 보이고 가우시안으로 근사한다는 것을 의미합니다. 나는 이론이 없으며 선의 기울기와 같은 그래프와 안구 및 범프의 중심 / 너비가 아닌 것을 제외하고 비선형 맞춤을 초기화하는 방법에 대해 안내 할 것이 없습니다. 그러나 그래프와 추측 대신 이러한 작업을 수행 할 수있는 수백 가지가 넘습니다. 자동화 할 수있는 접근 방식을 선호합니다.x=log10y=log10

도서관이나 온라인에서 참조를 찾을 수 없습니다. 내가 생각할 수있는 유일한 것은 초기 값을 무작위로 선택하는 것입니다. MATLAB은 균일하게 분포 된 [0,1]에서 무작위로 값을 선택할 수 있습니다. 따라서 각 데이터 세트에서 무작위로 초기화 된 맞춤을 천 번 실행 한 다음 가장 높은 ? 다른 (더 나은) 아이디어가 있습니까?r2


부록 # 1

먼저, 데이터 세트를 시각적으로 표현하여 어떤 종류의 데이터에 대해 이야기하는지 보여줍니다. 나는 어떤 종류의 변환없이 원본 형식으로 데이터를 게시 한 다음 로그 기능에 시각적으로 표시하여 데이터의 일부 기능을 명확하게하고 다른 데이터를 왜곡합니다. 좋은 데이터와 나쁜 데이터의 샘플을 게시하고 있습니다.

좋은 데이터 좋은 데이터를 기록하십시오 나쁜 데이터 불량 데이터 기록

각 그림의 6 개 패널은 각각 빨강, 녹색, 파랑 및 녹청으로 표시된 4 개의 데이터 세트를 보여 주며 각 데이터 세트에는 정확히 20 개의 데이터 포인트가 있습니다. 나는 데이터에 보이는 융기 때문에 직선과 가우스로 그들 각각을 맞추려고합니다.

첫 번째 수치는 좋은 데이터 중 일부입니다. 두 번째 그림은 그림 1과 동일한 양호한 데이터의 로그-로그 플롯입니다. 세 번째 수치는 잘못된 데이터 중 일부입니다. 네 번째 그림은 그림 3의 로그-로그 플롯입니다. 훨씬 더 많은 데이터가 있으며 이들은 두 개의 하위 집합에 불과합니다. 여기서 보여준 좋은 데이터와 비슷한 대부분의 데이터 (약 3/4)가 좋습니다.

이제 약간의 의견이 있습니다. 시간이 오래 걸릴 수 있기 때문에 저와 함께하십시오. 그러나이 모든 세부 사항이 필요하다고 생각합니다. 최대한 간결하게 노력하겠습니다.

나는 원래 간단한 로그 법칙 (로그-로그 공간에서 직선을 의미)을 예상했다. 로그 로그 공간에 모든 것을 표시했을 때, 약 4.8mHz에서 예기치 않은 충돌이 발생했습니다. 범프는 철저하게 조사되었으며 다른 작업에서도 발견되었으므로 우리가 엉망이되지 않았습니다. 그것은 물리적으로 거기에 있으며 다른 출판물에도 언급되어 있습니다. 그런 다음 선형 형식에 가우스 용어를 추가했습니다. 이 적합은 로그 로그 공간에서 수행 되었으므로이 질문을 포함한 두 가지 질문에 유의하십시오.

이제 읽은 후 내 다른 질문에 똥똥 조 피트로 대답을 (모두에서 이러한 데이터와 관련이없는) 및 읽기 (클라우으로 물건) 및 참조 거기에, 나는 로그 - 로그에 맞지 않는 것을 실현 우주. 이제는 사전 변환 된 공간에서 모든 작업을 수행하려고합니다.

질문 1 : 좋은 데이터를 보면 여전히 사전 변환 된 공간에서 선형 + 가우스가 좋은 형태라고 생각합니다. 더 많은 데이터 경험이있는 사람들의 의견을 듣고 싶습니다. 가우스 + 선형이 합리적입니까? 가우스 만해야합니까? 아니면 완전히 다른 형태입니까?

질문 2 : 질문 1에 대한 답이 무엇이든, 나는 여전히 비선형 최소 자승이 필요하기 때문에 초기화에 도움이 필요합니다.

우리가 두 세트를 보는 데이터는 약 4-5 mHz에서 첫 번째 범프를 캡처하는 것을 매우 선호합니다. 따라서 가우스 용어를 더 추가하고 싶지 않으며 가우스 용어는 거의 항상 큰 범프 인 첫 번째 범프를 중심으로해야합니다. 우리는 0.8mHz에서 약 5mHz 사이의 "더 높은 정확도"를 원합니다. 우리는 더 높은 주파수에 너무 신경 쓰지 않지만 완전히 무시하고 싶지는 않습니다. 아마도 어떤 종류의 무게는? 아니면 B는 항상 4.8mHz 주위에서 초기화 될 수 있습니까?

fL

L=Ae(fBC)2+Df+E.
  • f
  • L
  • AA>0A
  • B
  • CCC
  • D
  • ELELf=0

Ae(B/C)2+E.

EEf=0

L

질문 3 :이 경우에이 방법을 외삽한다고 생각하십니까? 찬반 양론? 외삽에 대한 다른 아이디어가 있습니까? 다시 우리는 더 낮은 주파수에 대해서만 신경을 쓰므로 0에서 1mHz 사이에서 외삽합니다. 때로는 0에 가까운 매우 작은 주파수입니다. 이 게시물이 이미 포장되어 있음을 알고 있습니다. 대답은 관련이있을 수 있기 때문에이 질문을했지만, 원하는 경우이 질문을 분리하고 나중에 다른 질문을 할 수 있습니다.

마지막으로 요청시 두 개의 샘플 데이터 세트가 있습니다.

0.813010000000000   0.091178000000000   0.012728000000000
1.626000000000000   0.103120000000000   0.019204000000000
2.439000000000000   0.114060000000000   0.063494000000000
3.252000000000000   0.123130000000000   0.071107000000000
4.065000000000000   0.128540000000000   0.073293000000000
4.878000000000000   0.137040000000000   0.074329000000000
5.691100000000000   0.124660000000000   0.071992000000000
6.504099999999999   0.104480000000000   0.071463000000000
7.317100000000000   0.088040000000000   0.070336000000000
8.130099999999999   0.080532000000000   0.036453000000000
8.943100000000001   0.070902000000000   0.024649000000000
9.756100000000000   0.061444000000000   0.024397000000000
10.569000000000001   0.056583000000000   0.025222000000000
11.382000000000000   0.052836000000000   0.024576000000000
12.194999999999999   0.048727000000000   0.026598000000000
13.008000000000001   0.045870000000000   0.029321000000000
13.821000000000000   0.041454000000000   0.067300000000000
14.633999999999999   0.039596000000000   0.081800000000000
15.447000000000001   0.038365000000000   0.076443000000000
16.260000000000002   0.036425000000000   0.075912000000000

첫 번째 열은 모든 단일 데이터 세트에서 동일한 주파수 (mHz)입니다. 두 번째 열은 올바른 데이터 세트 (좋은 데이터 그림 1 및 2, 패널 5, 빨간색 마커)이고 세 번째 열은 잘못된 데이터 세트 (잘못된 데이터 그림 3 및 4, 패널 5, 빨간색 마커)입니다.

이것이 더 밝은 토론을 자극하기에 충분하기를 바랍니다. 모두 감사합니다.


추가 정보는 +1이지만 이제는 새로운 질문처럼 보입니다. 덧붙여서, 이전의 것을 삭제하고 싶다면 괜찮을 것이라고 생각합니다. 이제 추가 정보를 다룬 것처럼 보입니다.
Glen_b-복지 주 모니카

@Glen_b 왜 그렇습니까? 왜 새로운 질문처럼 보입니까? 오래된 질문에 관해서는, 우리 모두 포인트를 매춘부 ;-D와 오래된 질문에는 두 개의 투표가 있습니다.
Fixed Point

그럼 우선, 당신은 지금 당신이 무엇에 대해 요구하고 해야 맞는 것이 아니라 이전과 맞게 무엇을 지정. 다른 많은 차이가 있는데, 그 중 일부는 상당히 중요하다고 생각합니다. 나는 내 대답을 바꾸는 것을 살펴볼 것이지만, 나는 이것이 원래의 질문과 대답, 그리고 다른 것을 요구하는 새로운 부분이 새로운 것이 될 수 있다고 생각합니다. 나는 그것을 당신의 현재 판단에 맡길 것입니다.
Glen_b-복지국 모니카

@Glen_b 공정한만큼 추가 질문을 받았습니다. 그래서 질문은 여전히 ​​선형 + 가우스 양식을 사용하여 맞추고 싶은 데이터가 있습니다. 랜덤 초기화보다 낫습니까?
Fixed Point

내 현재의 대답은 적어도 어떤 상황에서는 더 잘 할 수 있으며 @whuber는 내 프로세스보다 훨씬 간단한 것을 제안한다고 생각합니다. 돌아가서 데이터에서 수행 한 작업을 확인할 수는 있지만, 지금도이 시작점을 설정하는 방법에 대한 아이디어를 제공합니다.
Glen_b-복지국 모니카

답변:


10

우수 하고 일반적인 전략 ( 항상 효과 가있는 전략)이 있다면 모든 비선형 최소 제곱 프로그램에서 이미 구현되고 시작 값은 문제가되지 않습니다.

많은 특정한 문제들 또는 문제들의 가족들에 대해, 시작 가치에 대한 꽤 좋은 접근법들이 존재한다. 일부 패키지에는 특정 비선형 모델에 대한 적절한 시작 값 계산 또는 종종 작동하지만보다 구체적인 기능이나 시작 값의 직접 입력으로 도움이 될 수있는보다 일반적인 접근 방식이 포함됩니다.

일부 상황에서는 공간 탐색이 필요하지만보다 구체적인 전략이 가치가있을 수있는 상황 일 가능성이 높다고 생각합니다. 그러나 좋은 전략을 설계하려면 많은 지식이 필요하지 않습니다.

x

yx

A

가능한 경우 전형적인 데이터와 어려운 데이터와 같은 일부 샘플 데이터가 도움이 될 것입니다.


편집 : 문제가 너무 시끄럽지 않은 경우 어떻게 잘 할 수 있는지에 대한 예는 다음과 같습니다.

다음은 모델에서 생성 된 일부 데이터입니다 (인구 값은 A = 1.9947, B = 10, C = 2.828, D = 0.09, E = 5 임).

nls 데이터

내가 추정 할 수 있었던 시작 값은
(As = 1.658, Bs = 10.001, Cs = 3.053, Ds = 0.0881, Es = 5.026)

시작 모델의 적합성은 다음과 같습니다.

nlstart

단계는 다음과 같습니다.

  1. Theil 회귀 분석을 적용하여 대략적인 D 및 E 추정값을 얻습니다.
  2. 테일 회귀 분석에서 적합치 빼기
  3. LOESS를 사용하여 부드러운 곡선에 맞추십시오
  4. 대략적인 A 추정값을 얻으려면 피크를 찾고 대략적인 B 추정값을 얻으려면 피크에 해당하는 x 값을 찾으십시오.
  5. y 값이 A 추정치의 60 %를 초과하는 LOESS 피팅을 관측 값으로 취하고 2 차법에 적합
  6. 2 차를 사용하여 B의 추정값을 업데이트하고 C를 추정하십시오.
  7. 원래 데이터에서 가우스 추정값을 뺍니다.
  8. 조정 된 데이터에 다른 Theil 회귀 분석을 적용하여 D 및 E의 추정치를 업데이트

이 경우 값은 비선형 피팅을 시작하는 데 매우 적합합니다.

이것을 R코드 로 작성했지만 MATLAB에서도 동일한 작업을 수행 할 수 있습니다.

나는 이것보다 더 좋은 것이 가능하다고 생각합니다.

데이터가 매우 시끄럽다면 전혀 작동하지 않습니다.


Edit2 : 누군가 관심이 있다면 R에서 사용한 코드입니다.

gausslin.start <- function(x,y) {

  theilreg <- function(x,y){
    yy <- outer(y, y, "-")
    xx <- outer(x, x, "-")
    z  <- yy / xx
    slope     <- median(z[lower.tri(z)])
    intercept <- median(y - slope * x)
    cbind(intercept=intercept,slope=slope)
  }

  tr <- theilreg(x,y1)
  abline(tr,col=4)
  Ds = tr[2]
  Es = tr[1]
  yf  <- y1-Ds*x-Es
  yfl <- loess(yf~x,span=.5)

  # assumes there are enough points that the maximum there is 'close enough' to 
  #  the true maximum

  yflf   <- yfl$fitted    
  locmax <- yflf==max(yflf)
  Bs     <- x[locmax]
  As     <- yflf[locmax]

  qs     <- yflf>.6*As
  ys     <- yfl$fitted[qs]
  xs     <- x[qs]-Bs
  lf     <- lm(ys~xs+I(xs^2))
  bets   <- lf$coefficients
  Bso    <- Bs
  Bs     <-  Bso-bets[2]/bets[3]/2
  Cs     <- sqrt(-1/bets[3])
  ystart <- As*exp(-((x-Bs)/Cs)^2)+Ds*x+Es

  y1a <- y1-As*exp(-((x-Bs)/Cs)^2)
  tr  <- theilreg(x,y1a)
  Ds  <- tr[2]
  Es  <- tr[1]
  res <- data.frame(As=As, Bs=Bs, Cs=Cs, Ds=Ds, Es=Es)
  res
}

.

# population parameters: A = 1.9947 , B = 10, C = 2.828, D = 0.09, E = 5
# generate some data
set.seed(seed=3424921)
x  <- runif(50,1,30)
y  <- dnorm(x,10,2)*10+rnorm(50,0,.2)
y1 <- y+5+x*.09 # This is the data
xo <- order(x)

starts <- gausslin.start(x,y1)
ystart <- with(starts, As*exp(-((x-Bs)/Cs)^2)+Ds*x+Es)
plot(x,y1)
lines(x[xo],ystart[xo],col=2)

3
+1. 적합치를 천 번 반복하고 가장 좋은 것을 선택하면 (정확하게 이해한다면) 이상한 생각이 들립니다. 모델이 데이터에 적합하고 초기 값이 좋은 경우 비선형 최소 제곱이 수렴해야합니다. 당연히 두 번째는 당신이 요구하는 것입니다. 그러나 각 맞춤에 대해 다른 시작 값을 선택해야 할 수도 있음을 암시하는 것은 비관적 인 것 같습니다.
Nick Cox

1
@NickCox 발생하는 문제의 범위에 해당합니다-이전 게시물에서 바로 기억하면 OP는 많은 수의 문제를 얻지 만 이전에 좋은 제안을하기에 충분한 세부 사항을 보았지만 조금 투자했지만 잠재적 인 접근 방식으로 놀아 보는 시간 (포스팅하기에 결정적인 것을 얻지 못했습니다). OP는 아마 항상 자신의 문제를 해결하는 좋은 시작 가치를 산출 할 수있는 일종의 도메인 지식을 가지고있을 것입니다.
Glen_b-복지국 모니카


3
|A|BA>0CA1/4A>0A<0

2
BB

6

이러한 종류의 비선형 모델을 피팅하는 일반적인 방법이 있습니다. 첫 번째, 마지막 주파수 값, 중간의 좋은 점은 6 번째 점에서 종속 변수의 값으로 선형 매개 변수를 다시 매개 변수화합니다. 그런 다음 이러한 매개 변수를 고정 된 상태로 유지하고 최소화의 첫 번째 단계에서 비선형 매개 변수를 해결 한 다음 전체 5 개의 매개 변수를 최소화 할 수 있습니다.

Schnute와 저는 1982 년경 물고기의 성장 모델을 맞출 때 이것을 알아 냈습니다.

http://www.nrcresearchpress.com/doi/abs/10.1139/f80-172

그러나이 논문을 읽을 필요는 없습니다. 모수가 선형이라는 사실 때문에 모델의 안정적인 모수화를 사용하기 위해 3x3 선형 방정식 시스템을 설정하고 풀면됩니다.

모델의 경우 선형 부분은 행렬 의해 결정됩니다.M

M=(exp(((x(1)B)/C)2)x(1)1exp(((x(6)B)/C)2)x(6)1exp(((x(n)B)/C)2)x(n)1)
n=20
DATA_SECTION
  init_int n
  int mid
 !! mid=6;
  init_matrix data(1,n,1,3)
  vector x(1,n)
  vector y(1,n)
 !! x=column(data,1);
 !! y=column(data,3);   //use column 3
PARAMETER_SECTION
  init_number L1(3)     //(3) means estimate in phase 3
  init_number Lmid(3)
  init_number Ln(3)

  vector L(1,3)
  init_number log_B       // estimate in phase 1
  init_number log_C(2)    // estimate in phase 2 
  matrix M(1,3,1,3);
  objective_function_value f
  sdreport_vector P(1,3)
  sdreport_number B
  sdreport_number C
  vector pred(1,n);
PROCEDURE_SECTION
  L(1)=L1;
  L(2)=Lmid;
  L(3)=Ln;
  B=exp(log_B);
  C=exp(log_C);
  M(1,1)=exp(-square((x(1)-B)/C));
  M(1,2)=x(1);
  M(1,3)=1;
  M(2,1)=exp(-square((x(mid)-B)/C));
  M(2,2)=x(mid);
  M(2,3)=1;
  M(3,1)=exp(-square((x(n)-B)/C));
  M(3,2)=x(n);
  M(3,3)=1;

  P=solve(M,L);  // solve for standard parameters 
                 // P is vector corresponding to A,D,E

  pred=P(1)*exp(-square((x-B)/C))+P(2)*x+P(3);
  if (current_phase()<4)
    f+=norm2(y-pred);
  else
    f+=0.5*n*log(norm2(y-pred))  //concentrated likelihood

BCBBC

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

나쁜 데이터의 경우에는 매우 쉽게 적합하며 (일반) 모수 추정치는 다음과 같습니다.

         estimate    std dev
A      2.0053e-01 5.8723e-02
D      1.6537e-02 4.7684e-03
E     -1.8197e-01 7.3355e-02
B      3.0609e+00 5.0197e-01
C      5.6154e+00 9.4564e-01]

데이브, 이건 흥미롭지 만 몇 가지 질문이 제기됩니다. "이러한 종류의 비선형 모델"은 정확히 무엇을 의미합니까? 문제는 "일반 피팅 함수"를 참조하여 시작하지만 설명은 "전체 5 개 매개 변수"만 언급합니다.
whuber

예를 들어, vonbertalanffy 또는 로지스틱 또는 이중 지수와 같은 모델을 의미합니다. 모든 경우에 모델은 일부 매개 변수에서 선형이고 다른 매개 변수에서 비선형입니다. 사람들은 일반적으로 비선형 매개 변수에 집중하여보다 안정적인 매개 변수를 얻도록 변환하려고합니다. 그러나 이것은 잘못된 접근법입니다. 예를 들어 4 개의 매개 변수 로지스틱의 경우 모델은 상한 및 하한 점근선에서 선형이지만 이러한 매개 변수를 사용하는 대신 가장 작고 큰 ind에 대해 예측 된 값을 사용해야합니다. var.
dave fournier 2016 년

@davefournier 답장을 보내 주셔서 감사합니다. 당신의 논문은 이해하기가 조금 어려워 보이지만 기술은 흥미롭게 들리므로 그것을 기다릴 수 없습니다.
고정 포인트

2

이 작업을 여러 번 수행해야하는 경우 SSE 함수에서 Evolutionary Algorithm을 프런트 엔드로 사용하여 시작 값을 제공하는 것이 좋습니다.

반면에 GEOGEBRA를 사용하여 매개 변수에 대한 슬라이더를 사용하여 함수를 작성하고이를 사용하여 시작 값을 얻을 수 있습니다.

또는 데이터로부터의 시작 값은 관찰에 의해 추정 될 수있다.

  1. D와 E는 데이터의 기울기와 절편에서 나옵니다 (가우시안 무시).
  2. A는 Dx + E 선 추정치로부터 가우스 최대 값의 수직 거리입니다.
  3. B는 가우스 최대 값의 x 값입니다.
  4. C는 가우스 폭의 절반입니다.

1

시작 값의 경우 보통 최소 제곱 맞춤을 수행 할 수 있습니다. 그것의 기울기와 절편은 D와 E의 시작 값이 될 것입니다. 가장 큰 잔차는 A의 시작 값이 될 것입니다. 가장 큰 잔차의 위치는 B의 시작 값이 될 것입니다. 다른 누군가가 시그마의 시작 값을 제안 할 수 있습니다.

그러나 주제 지식 에서 어떤 종류의 기계적인 방정식을 도출하지 않은 비선형 최소 제곱 은 위험한 사업이며, 많은 개별적 적합을 수행하면 상황이 더욱 의심됩니다. 제안 된 방정식 뒤에 주제 지식이 있습니까? 100 개 정도의 개별 피팅 간의 차이와 관련된 다른 독립 변수가 있습니까? 이러한 차이를 단일 데이터에 통합하여 모든 데이터를 한 번에 맞출 수 있다면 도움이 될 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.