# 지수함수·로그함수·분수함수 적합

#### 개념적 배경과 모델의 형태

지수함수, 로그함수, 분수함수와 같은 비선형 함수는 다양한 실험 자료나 현상에서 자주 등장한다. 예를 들어 어떤 물리적 반응은 시간이 지남에 따라 지수적으로 변화하며, 어떤 생장 곡선은 로그적 양상을 보인다. 보통 최소제곱법을 적용할 때 선형회귀를 많이 다루지만, 이러한 비선형 모델을 적절하게 선형화하거나 직접 비선형 최소제곱법을 적용할 수 있다.

지수함수 적합을 먼저 살펴보면, 가장 전형적인 모형은 $y = \beta\_0 e^{\beta\_1 x}$ 형태로 많이 쓰인다. 로그함수 적합으로는 $y = \beta\_0 + \beta\_1 \ln x$ 또는 $y = \beta\_0 \ln(x) + \beta\_1$ 등이 있다. 분수함수 적합은 $y = \dfrac{\beta\_0}{x + \beta\_1}$처럼 의도에 따라 다양한 형태로 확장이 가능하다. 이러한 비선형 모델도 최소제곱법으로 풀 수 있는데, 여러 가지 수치적 방법이 동원된다.

#### 지수함수 적합

일반적으로 가장 간단하게 다루는 지수 적합은 $y = \beta\_0 e^{\beta\_1 x}$이다. 관측데이터 $(x\_i, y\_i)$가 다수 존재한다고 할 때, 이를 직접 비선형 모형에 대입하면 해결해야 할 식이 복잡해진다. 하지만 로그를 취해 선형으로 바꿀 수 있는 형태라면 보다 쉽게 최소제곱법을 적용할 수 있다.

$y = \beta\_0 e^{\beta\_1 x}$에 양변 로그를 취하면 $\ln(y) = \ln(\beta\_0) + \beta\_1 x$가 되어, $\ln(y)$가 종속변수, $x$가 독립변수가 된 선형회귀로 보아 $\beta\_1$과 $\ln(\beta\_0)$를 추정할 수 있다. 다만 모든 $y\_i$가 양수일 것을 가정해야 한다. 이를 명시적으로 보이기 위해 식을 제시한다.

$$
\begin{align}
y &= \beta\_0 e^{\beta\_1 x}\\
\ln(y) &= \ln(\beta\_0) + \beta\_1 x\\
\end{align}
$$

위 식에서 $\ln(\beta\_0)$를 새로운 상수 항으로 놓고 $\beta\_1$을 기울기로 두면, 보통의 선형회귀 문제와 동일한 꼴이 된다. 즉 $\alpha = \ln(\beta\_0)$라고 두면 $\ln(y) = \alpha + \beta\_1 x$이다. 예측된 $\alpha$로부터 $\beta\_0 = e^{\alpha}$로 복원할 수 있다. 이렇게 로그 변환으로 선형회귀를 적용할 수 있는 경우는 상당히 직관적이며 계산도 간편하다. 실제로 적합을 구하면 식은 다음과 유사한 형태로 최소제곱 해를 구한다.

$$
\begin{align}
\hat{\beta}*1 &= \frac{\sum*{i} (x\_i - \bar{x})(\ln(y\_i) - \overline{\ln(y)})}{\sum\_{i} (x\_i - \bar{x})^2}\\
\hat{\alpha} &= \overline{\ln(y)} - \hat{\beta}\_1 ,\bar{x}\\
\hat{\beta}\_0 &= e^{\hat{\alpha}}\\
\end{align}
$$

위에서 $\bar{x}$는 $x\_i$들의 평균, $\overline{\ln(y)}$는 $\ln(y\_i)$들의 평균을 나타낸다. 이를 통해 지수함수 적합 계수를 구할 수 있다. 다만 $y\_i$에 음수나 영값이 있을 경우에는 로그를 취할 수 없게 되므로, 이러한 경우에는 다른 방법을 적용해야 한다.

#### 로그함수 적합

로그함수 형태로 보이는 자료를 적합할 때도 유사하게 접근할 수 있다. 예를 들어 $y = \beta\_0 + \beta\_1 \ln(x)$와 같은 모형은 독립변수를 $\ln(x)$로 치환하면 단순한 선형회귀가 된다. 관측데이터가 $(x\_i, y\_i)$라고 하면 모든 $x\_i$가 양수임을 가정하고, $u\_i = \ln(x\_i)$라 두면 $y = \beta\_0 + \beta\_1 u$ 형태다. 그러면 최소제곱법으로 쉽게 $\beta\_0$와 $\beta\_1$을 구할 수 있다.

만약 $y = \beta\_0 \ln(x) + \beta\_1$와 같이 조금 다른 형태라도 본질은 동일하다. 궁극적으로 최소제곱법은 모델이 선형인지 비선형인지 구분하기보다는, 변수를 적절히 변환해 선형 형태가 되도록 만들 수 있는가에 집중한다. 로그함수 모형도 변환만 적절히 수행하면 기존 선형회귀 프로세스와 같은 방식으로 해결된다.

#### 분수함수 적합

분수함수는 $y = \dfrac{\beta\_0}{x + \beta\_1}$나 $y = \dfrac{\beta\_0}{x} + \beta\_1$ 같은 다양한 형태로 다룰 수 있는데, 형태에 따라 선형화가 간단하지 않을 수 있다. 어떤 경우에는 역수를 취해 간단해지기도 하지만, 또 다른 경우에는 비선형 방정식을 직접 풀어야 한다.

가령 $y = \dfrac{\beta\_0}{x + \beta\_1}$ 형태를 생각해보면, 양변을 뒤집어서 $\dfrac{1}{y} = \dfrac{x + \beta\_1}{\beta\_0} = \dfrac{1}{\beta\_0}x + \dfrac{\beta\_1}{\beta\_0}$로 표현 가능하다. 이때 $\dfrac{1}{y}$를 종속변수로, $x$를 독립변수로 두면 선형회귀 형태가 되어 $\dfrac{1}{\beta\_0} \equiv a$, $\dfrac{\beta\_1}{\beta\_0} \equiv b$라 하고 나중에 $\beta\_0$, $\beta\_1$를 복원할 수 있다. 이 방법으로 유도한 식을 명시해보면 다음과 같이 정리할 수 있다.

$$
\begin{align}
y &= \frac{\beta\_0}{x + \beta\_1}\\
\frac{1}{y} &= \frac{x + \beta\_1}{\beta\_0} = a , x + b\\
\end{align}
$$

여기서 $a = \dfrac{1}{\beta\_0}$, $b = \dfrac{\beta\_1}{\beta\_0}$가 되어 $\dfrac{1}{y}$ 대 $x$에 대해 선형회귀를 하면 $a$와 $b$의 최소제곱 추정치를 얻는다. 이로부터 $\beta\_0 = \dfrac{1}{a}$, $\beta\_1 = \dfrac{b}{a}$를 추정하면 된다. 물론 $y\_i$ 중 0에 접근하거나 음수가 포함되면 $\dfrac{1}{y}$를 취하기 어려우므로 모델 혹은 방법을 달리해야 한다.

#### 비선형 최소제곱법 접근

상기 예시들은 변수 변환으로 선형화가 되는 유형이었다. 하지만 모든 지수함수나 로그함수, 분수함수가 그러한 단순 변환으로 선형화가 가능한 것은 아니며, 복잡한 형태의 지수·로그·분수함수에서는 직접 비선형 최소제곱법을 적용해야 한다. 비선형 최소제곱법은 뉴턴-랩슨, 가우스-뉴턴, 레벤버그-마콰르트(Levenberg-Marquardt) 등과 같은 반복법을 사용한다. 모델이 $y = f(x; \boldsymbol{\beta})$라 할 때, 관측값 $y\_i$와 예측값 $\hat{y}\_i(\boldsymbol{\beta})$의 잔차를 최소화하도록 매개변수 벡터 $\boldsymbol{\beta}$를 추정한다.

이 과정을 수식으로 표현하면, 목적함수는 다음과 같이 쓴다.

$$
\begin{align}
S(\boldsymbol{\beta}) &= \sum\_{i} \bigl(y\_i - f(x\_i; \boldsymbol{\beta})\bigr)^2
\end{align}
$$

여기서 $\boldsymbol{\beta} = (\beta\_0, \beta\_1, \dots)$가 많아질수록 식이 복잡해진다. $S(\boldsymbol{\beta})$가 최소가 되는 $\boldsymbol{\beta}$를 직접 미분해 $\mathbf{0}$이 되도록 하는 방정식을 푸는 것은 비선형 시스템이 되는 경우가 많아, 위에서 언급한 수치적 반복 기법에 의존한다. 지수함수·로그함수·분수함수 적합에서도 이러한 비선형 접근이 필수적인 경우가 있는데, 식 자체를 간단히 선형화하기 어려운 경우라면 이러한 반복법을 적용한다. 구체적 구현은 Octave, Python 등의 언어에서 최적화 라이브러리를 통해 손쉽게 시도할 수 있다.

#### 지수함수·로그함수·분수함수 적합의 실제 예시 구현

아래는 Octave 예시 스크립트로, 단순히 지수함수형 데이터를 least squares로 맞춰보는 과정을 보여준다. 관측데이터가 $(x\_i, y\_i)$로 주어졌다고 가정하고, 지수형태 $y = \beta\_0 e^{\beta\_1 x}$를 로그선형화 기법으로 적합하는 예시다.

```octave
x = [0.1; 0.2; 0.4; 0.8; 1.0] ;
y = [0.95; 1.10; 1.30; 1.80; 2.05] ;

% 로그변환
lx = x ;
ly = log(y) ;

% 최소제곱 해 (선형회귀)
xm = mean(lx) ;
ym = mean(ly) ;
b1_hat = sum( (lx - xm).*(ly - ym) ) / sum((lx - xm).^2) ;
alpha_hat = ym - b1_hat*xm ;

beta0_hat = exp(alpha_hat) ;
beta1_hat = b1_hat ;

fprintf("beta0_hat = %f\n", beta0_hat);
fprintf("beta1_hat = %f\n", beta1_hat);

% 예측 곡선 확인
xx = linspace(0.0,1.0,50)' ;
yy = beta0_hat*exp(beta1_hat*xx) ;

plot(x,y,'ro','markersize',8);
hold on;
plot(xx,yy,'b-','linewidth',1.5);
xlabel("x");
ylabel("y");
title("Exponential curve fitting by log-linear method");
grid on;
```

위 코드에서는 관측된 자료에 대해 $\beta\_0 e^{\beta\_1 x}$ 형태를 가정하고, $y$에 로그를 취해 $\ln(y) = \ln(\beta\_0) + \beta\_1 x$를 선형회귀로 적합했다. 그러고 나서 $\beta\_0 = e^{\alpha\_{\text{hat}}}$, $\beta\_1 = b1\_{\text{hat}}$로 복원한 뒤, 그 결과를 시각화한 것이다.

#### 비선형 모델 적합에 대한 구체적 해석

이전에는 변수변환으로 선형화가 가능한 경우를 살펴보았다. 하지만 실제로는 다루고자 하는 지수·로그·분수함수 모델이 반드시 선형화되는 형태가 아닐 수 있다. 예를 들어 여러 개의 지수항이 합쳐진 형태나, 로그함수에 추가 매개변수가 결합된 복합적 형태, 분수함수에 차수가 높은 다항식이 들어간 형태 등은 변수변환만으로는 간단히 선형형태로 만들기 어렵다. 이럴 때 비선형 최소제곱법을 적용하여 반복적 방법으로 해를 찾는다.

일반화된 비선형 모델을 다음과 같이 설정할 수 있다.

$$
\begin{align} y\_i = f(x\_i;\boldsymbol{\beta}) + \varepsilon\_i, \end{align}
$$

여기서

* $x\_i$는 독립변수,
* $y\_i$는 종속변수,
* $\boldsymbol{\beta} = (\beta\_0, \beta\_1, \dots, \beta\_m)$는 추정해야 할 매개변수 벡터,
* $\varepsilon\_i$는 오차(또는 잡음) 항이다.

최소제곱법의 목적함수는

$$
\begin{align} S(\boldsymbol{\beta}) = \sum\_{i=1}^{n} \Bigl( y\_i - f(x\_i; \boldsymbol{\beta})\Bigr)^2 \end{align}
$$

이고, 이는 $\boldsymbol{\beta}$에 대해 미분하여 0이 되도록 하는 조건으로부터 정규방정식을 유도할 수 있다. 그러나 여기서 ff가 비선형이므로 방정식 자체가 비선형 방정식이 되어 일반 해석적 형태의 해를 얻기가 어렵고, 결국 수치적 반복법이 필요하다.

#### 비선형 최소제곱법의 반복해법

**가우스–뉴턴(Gauss–Newton) 방법**

비선형 최소제곱법 중 가장 대표적인 방법으로, 테일러 전개를 바탕으로 한 접근이다. $f(x\_i; \boldsymbol{\beta})$를 $\boldsymbol{\beta}^{(k)}$ 근방에서 1차 테일러 전개하면

$$
\begin{align} f(x\_i; \boldsymbol{\beta}) &\approx f\bigl(x\_i; \boldsymbol{\beta}^{(k)}\bigr)  + \nabla\_{\boldsymbol{\beta}} f\bigl(x\_i; \boldsymbol{\beta}^{(k)}\bigr),\bigl(\boldsymbol{\beta} - \boldsymbol{\beta}^{(k)}\bigr), \end{align}
$$

여기서 $\nabla\_{\boldsymbol{\beta}} f\bigl(x\_i; \boldsymbol{\beta}^{(k)}\bigr)$는 $f$를 $\boldsymbol{\beta}$에 대해 편미분한 결과를 벡터로 모아둔 것이며, 이를 흔히 야코비(Jacobian)이라 부른다. 관측값 $y\_i$에 대하여

$$
\begin{align} r\_i(\boldsymbol{\beta})  &= y\_i - f(x\_i; \boldsymbol{\beta}),\end{align}
$$

라 정의하면 rir\_i는 ii번째 잔차(residual)이다. 이때

$$
\mathbf{J}\bigl(\boldsymbol{\beta}^{(k)}\bigr)
$$

를 다음과 같이 정의한다.

$$
\begin{align} \mathbf{J}\bigl(\boldsymbol{\beta}^{(k)}\bigr) = \begin{bmatrix} \dfrac{\partial f(x\_1;\boldsymbol{\beta}^{(k)})}{\partial \beta\_0} & \dfrac{\partial f(x\_1;\boldsymbol{\beta}^{(k)})}{\partial \beta\_1} & \dots  & \dfrac{\partial f(x\_1;\boldsymbol{\beta}^{(k)})}{\partial \beta\_m} \
$$

6pt] \dfrac{\partial f(x\_2;\boldsymbol{\beta}^{(k)})}{\partial \beta\_0} & \dfrac{\partial f(x\_2;\boldsymbol{\beta}^{(k)})}{\partial \beta\_1} & \dots & \dfrac{\partial f(x\_2;\boldsymbol{\beta}^{(k)})}{\partial \beta\_m} \\

$$
6pt] \vdots & \vdots & \ddots & \vdots \
$$

6pt] \dfrac{\partial f(x\_n;\boldsymbol{\beta}^{(k)})}{\partial \beta\_0} & \dfrac{\partial f(x\_n;\boldsymbol{\beta}^{(k)})}{\partial \beta\_1} & \dots & \dfrac{\partial f(x\_n;\boldsymbol{\beta}^{(k)})}{\partial \beta\_m} \end{bmatrix}, \end{align}

$$
그리고 잔차 벡터 $\mathbf{r}\bigl(\boldsymbol{\beta}^{(k)}\bigr)$를
$$

\begin{align} \mathbf{r}\bigl(\boldsymbol{\beta}^{(k)}\bigr) = \begin{bmatrix} r\_1\bigl(\boldsymbol{\beta}^{(k)}\bigr) \\

$$
3pt] r\_2\bigl(\boldsymbol{\beta}^{(k)}\bigr) \
$$

3pt] \vdots \\

$$
3pt] r\_n\bigl(\boldsymbol{\beta}^{(k)}\bigr) \end{bmatrix} = \begin{bmatrix} y\_1 - f(x\_1;\boldsymbol{\beta}^{(k)}) \
$$

3pt] y\_2 - f(x\_2;\boldsymbol{\beta}^{(k)}) \\

$$
3pt] \vdots \
$$

3pt] y\_n - f(x\_n;\boldsymbol{\beta}^{(k)}) \end{bmatrix}, \end{align}

$$
라고 하면, 가우스–뉴턴 방법은 다음 선형근사를 통해 $\boldsymbol{\beta}^{(k+1)}$를 갱신한다.
$$

\begin{align} \boldsymbol{\beta}^{(k+1)} &= \boldsymbol{\beta}^{(k)} + \Bigl(\mathbf{J}^\mathsf{T}(\boldsymbol{\beta}^{(k)}) ,\mathbf{J}(\boldsymbol{\beta}^{(k)})\Bigr)^{-1} ,\mathbf{J}^\mathsf{T}(\boldsymbol{\beta}^{(k)}) ,\mathbf{r}(\boldsymbol{\beta}^{(k)}). \end{align}

$$
가우스–뉴턴은 잔차 벡터의 1차 테일러 전개만 고려해 빠른 계산이 가능하지만, 수렴을 보장하려면 적절한 초기값이 필요하며 모델 형태에 따라 오차가 크면 발산하거나 이상한 지점에 빠질 수 있다.

#### 레벤버그–마콰르트(Levenberg–Marquardt) 방법

가우스–뉴턴과 뉴턴–랩슨(Newton–Raphson) 기법을 혼합한 형태로서, 수렴 안정성을 개선한 방법이다. 기본적으로 가우스–뉴턴 방법에 댐핑 파라미터(regularization 항)를 추가하여, 매 업데이트 단계에서 역행렬 계산 시 대각성분에 적절한 양을 더한다. 이를 통해 $\mathbf{J}^\mathsf{T}\mathbf{J}$가 잘못된 방향으로 치우치거나 특이행렬이 되는 상황을 완화한다.
레벤버그–마콰르트 업데이트는 예컨대 다음과 같은 형태로 나타낼 수 있다.
$$

\begin{align} \boldsymbol{\beta}^{(k+1)} = \boldsymbol{\beta}^{(k)} + \Bigl(\mathbf{J}^\mathsf{T}\bigl(\boldsymbol{\beta}^{(k)}\bigr),\mathbf{J}\bigl(\boldsymbol{\beta}^{(k)}\bigr) + \lambda,\mathbf{D}\Bigr)^{-1} ,\mathbf{J}^\mathsf{T}\bigl(\boldsymbol{\beta}^{(k)}\bigr),\mathbf{r}\bigl(\boldsymbol{\beta}^{(k)}\bigr),\end{align}

$$
여기서 $\lambda$는 댐핑(damping) 계수이며, $\mathbf{D}$는 흔히 단위행렬 $\mathbf{I}$를 쓰거나, 혹은 다른 기준에 따라 가중값을 부여한 행렬을 쓰기도 한다. λ\lambda를 크게 하면 가우스–뉴턴보다는 더 보수적인(steepest descent에 가까운) 방향으로 업데이트를 수행하고, $\lambda$를 작게 하면 순수 가우스–뉴턴 방식에 가까워진다.

### 적용 예시: 일반 지수함수 $y = \beta\_0 e^{\beta\_1 x} + \beta\_2$

앞서의 단순 지수함수 $y = \beta\_0 e^{\beta\_1 x}$와 달리, $y = \beta\_0 e^{\beta\_1 x} + \beta\_2$ 같은 형태는 $\beta\_2$ 때문에 로그변환만으로는 선형화가 용이하지 않다. 이때는 비선형 최소제곱법을 사용한다.
목적함수
$$

\begin{align} S(\beta\_0, \beta\_1, \beta\_2) = \sum\_{i=1}^{n} \Bigl( y\_i - \beta\_0 e^{\beta\_1 x\_i} - \beta\_2 \Bigr)^2\end{align}

$$
를 $\beta\_0, \beta\_1, \beta\_2$에 대해 최소화하는 문제다. 가우스–뉴턴 방법을 쓴다면, $\mathbf{r}$와 $\mathbf{J}$는 다음과 같이 구성된다.
$$

\begin{align} \mathbf{J}(\beta\_0, \beta\_1, \beta\_2) = \begin{bmatrix} -\frac{\partial}{\partial \beta\_0}\bigl(\beta\_0 e^{\beta\_1 x\_1} + \beta\_2 - y\_1\bigr) & -\frac{\partial}{\partial \beta\_1}\bigl(\beta\_0 e^{\beta\_1 x\_1} + \beta\_2 - y\_1\bigr) & -\frac{\partial}{\partial \beta\_2}\bigl(\beta\_0 e^{\beta\_1 x\_1} + \beta\_2 - y\_1\bigr) \\

$$
6pt] -\frac{\partial}{\partial \beta\_0}\bigl(\beta\_0 e^{\beta\_1 x\_2} + \beta\_2 - y\_2\bigr) & -\frac{\partial}{\partial \beta\_1}\bigl(\beta\_0 e^{\beta\_1 x\_2} + \beta\_2 - y\_2\bigr) & -\frac{\partial}{\partial \beta\_2}\bigl(\beta\_0 e^{\beta\_1 x\_2} + \beta\_2 - y\_2\bigr) \
$$

6pt] \vdots & \vdots & \vdots \\

$$
6pt] -\frac{\partial}{\partial \beta\_0}\bigl(\beta\_0 e^{\beta\_1 x\_n} + \beta\_2 - y\_n\bigr) & -\frac{\partial}{\partial \beta\_1}\bigl(\beta\_0 e^{\beta\_1 x\_n} + \beta\_2 - y\_n\bigr) & -\frac{\partial}{\partial \beta\_2}\bigl(\beta\_0 e^{\beta\_1 x\_n} + \beta\_2 - y\_n\bigr) \end{bmatrix}. \end{align}
$$

위 미분을 구체적으로 쓰면,

$$
\begin{align} -\frac{\partial}{\partial \beta\_0}\bigl(\beta\_0 e^{\beta\_1 x\_i} + \beta\_2 - y\_i\bigr) &= -,e^{\beta\_1 x\_i},  \ -\frac{\partial}{\partial \beta\_1}\bigl(\beta\_0 e^{\beta\_1 x\_i} + \beta\_2 - y\_i\bigr) &= -,(\beta\_0 x\_i) , e^{\beta\_1 x\_i},  \ -\frac{\partial}{\partial \beta\_2}\bigl(\beta\_0 e^{\beta\_1 x\_i} + \beta\_2 - y\_i\bigr) &= -,1. \end{align}
$$

초기값 $\bigl(\beta\_0^{(0)}, \beta\_1^{(0)}, \beta\_2^{(0)}\bigr)$을 적절히 잡고 가우스–뉴턴(혹은 레벤버그–마콰르트) 반복을 수행하면, 원하는 오차 범위 내에서 수렴하는 $\bigl(\hat{\beta}\_0, \hat{\beta}\_1, \hat{\beta}\_2\bigr)$를 구할 수 있다.

#### 여러 매개변수를 갖는 로그함수·분수함수 예시

예컨대 분수함수가 $y = \dfrac{\beta\_0 + \beta\_1 x}{\beta\_2 + x}$와 같이 조금 더 복합적 구조를 보인다면 선형화가 간단치 않다. 이 경우에도

$$
\begin{align} r\_i(\boldsymbol{\beta})  &= y\_i - \frac{\beta\_0 + \beta\_1 x\_i}{\beta\_2 + x\_i},\end{align}
$$

를 정의하고, 야코비을 구성하여 반복법으로 매개변수를 추정한다. 실제로는 모델 복잡도와 잡음 정도에 따라 초기값 설정이 매우 중요한데, 적절한 초기값을 주지 않으면 발산하거나 의도하지 않은 지역최소(local minimum)에 빠질 수 있다.

#### 가중 최소제곱(Weighted Least Squares)

지수·로그·분수함수 형태의 모델에서는 yiy\_i의 분산이 일정하지 않을 수 있다. 예컨대 yy가 지수적으로 커진다면, 큰 xx 근방에서 오차의 크기가 달라지는 경향이 있다. 이런 상황에서 모든 관측값을 동일하게 취급하지 않고, 관측오차(분산 추정)나 중요도에 비례한 가중(Weight)을 두는 가중 최소제곱을 적용할 수 있다. 목적함수를

$$
\begin{align} S(\boldsymbol{\beta})  = \sum\_{i=1}^{n} w\_i, \Bigl( y\_i - f(x\_i;\boldsymbol{\beta})\Bigr)^2,\end{align}
$$

로 정의하면, $w\_i$는 통상 $\dfrac{1}{\text{Var}(y\_i)}$나 문제 특성에 따라 달리 설정되는 양의 값이다. 그에 따라 정규방정식 또는 비선형 반복식의 형태에서도 $w\_i$가 반영된 항이 생긴다. 가우스–뉴턴이나 레벤버그–마콰르트 방법에도 $w\_i$가 들어간 수정 야코비을 이용하면 동일한 방식으로 추정이 가능하다.

#### 구현 예시: 비선형 회귀 (Python)

아래는 Python 예시 코드로, 레벤버그–마콰르트(혹은 다른 최적화 루틴)를 사용해 $y = \beta\_0 e^{\beta\_1 x} + \beta\_2$를 적합하는 간단한 예시를 보여준다.

```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

# 목표 함수(비선형 모델)
def func(x, b0, b1, b2):
    return b0 * np.exp(b1 * x) + b2

# 가상의 데이터 생성
x_data = np.linspace(0, 5, 20)
y_true = func(x_data, 2.0, 0.5, 1.0)
noise = 0.2 * np.random.randn(len(x_data))
y_data = y_true + noise

# curve_fit: 레벤버그–마콰르트 기본 적용
p0 = [1.0, 0.1, 0.0]  # 초기값 추정
popt, pcov = curve_fit(func, x_data, y_data, p0)

print("추정된 파라미터:", popt)
# popt -> [beta0, beta1, beta2]

# 적합 결과 확인
x_fit = np.linspace(0, 5, 100)
y_fit = func(x_fit, *popt)

plt.scatter(x_data, y_data, label="Data")
plt.plot(x_fit, y_fit, 'r-', label="Fitted Curve")
plt.legend()
plt.xlabel("x")
plt.ylabel("y")
plt.title("Nonlinear regression: y = b0 exp(b1 x) + b2")
plt.show()
```

`curve_fit`은 내부적으로 레벤버그–마콰르트 방식을 활용하므로, 모델 함수와 초기값만 제공하면 쉽고 빠르게 적합 결과를 얻을 수 있다.

#### 모델 선택과 적합의 유의점

지수·로그·분수함수는 특성상 특정 구간에서만 잘 맞거나, 데이터가 넓은 범위에 걸쳐 있을 때 일부 구간에서 큰 오차가 날 수 있다. 모델을 선택할 때는 이론적 배경, 데이터 분포, 예상되는 오차 구조 등을 종합적으로 고려하여야 한다. 또한, 로그함수 모형을 적용할 때에는 xx가 양수 범위에 속해야 하고, 지수함수 모형은 yy가 음수가 아니어야 한다는 등, 각 모델이 갖는 전제조건을 주의 깊게 살핀다.

비선형 회귀에서는 초깃값과 레귤러라이제이션 기법(댐핑, 가중 등)이 중요하다. 같은 데이터라도 초기값을 달리 주었을 때, 전혀 다른 계수에 수렴할 수 있다. 이는 지수·로그·분수함수에서 흔히 발생하므로, 반드시 적절한 초기 추정이나 사전 지식을 결합하는 작업이 권장된다.

#### 오차분석과 잔차분포

모델이 지수함수·로그함수·분수함수 등 어느 형태이든, 최소제곱법으로 구한 매개변수의 품질을 평가하기 위해서는 잔차(residual) 분석이 필수적이다. 잔차 $r\_i = y\_i - \hat{y}\_i$가 특정 패턴을 갖지 않고 무작위로 분포한다면, 모델이 자료를 잘 설명한다고 볼 수 있다. 반면 잔차가 $x$에 따라 체계적으로 양(+)이나 음(-)으로 치우치거나, 특정 곡선을 따라 분포한다면 모델이 자료를 충분히 포착하지 못했음을 시사한다.

잔차의 통계적 특성을 확인하기 위해 잔차평균(평균이 0에 가까운가), 잔차의 분산(회귀선 근방에서 골고루 퍼져 있는가), 오차의 정상성(normality)을 가정할 수 있는지 등을 탐색한다. 특히 지수함수·로그함수 적합에서는 $x$나 $y$ 스케일에 따라 잔차 분산이 균일하지 않을 수 있는데, 이 경우 가중 최소제곱이나 변환(transform)을 시도해볼 만하다.

#### 이상점(Outlier) 처리

지수·로그·분수함수 적합 과정에서 일부 관측값이 극단적으로 모델에서 벗어나 있을 때, 이 이상값(Outlier)들이 전체 추정에 큰 영향을 미칠 수 있다. 예컨대 로그함수 적합에 쓰려고 했는데 $x$가 $0$ 또는 $0$에 아주 근접하여 로그가 크게 발산하거나, 분수함수에서$x + \beta\_1$가 $0$에 가까워져 $y$가 극단적 값으로 치우치는 상황 등이 발생할 수 있다.

이상점을 찾기 위한 다양한 통계적 방법이 있으며, 그중 단순히 $\vert r\_i \vert$가 지나치게 큰 지를 확인하거나, 확장된 기법으로 쿠크의 거리(Cook’s distance) 등을 활용하기도 한다. 이상점이 모델 방정식 자체에 의해 자연스럽게 생긴 것인지, 아니면 관측상 실수나 간헐적 노이즈 때문인지에 따라 처리를 달리한다. 모델 자체를 재고하거나, 해당 값을 제거(또는 가중을 줄이기)하는 로버스트 회귀(Robust Regression) 기법도 고려할 수 있다.

#### 로버스트 회귀(Robust Regression)

최소제곱법은 잔차제곱합을 최소화하므로, 잔차가 큰 이상점이 있으면 추정 결과가 크게 흔들릴 수 있다. 이를 완화하기 위해 $\vert r\_i \vert$를 줄이는 로스함수(loss function)를 사용하거나, 잔차가 큰 지점에 대한 가중을 감소시키는 Huber 함수, Cauchy 함수, Tukey 함수 등을 쓰기도 한다. 이러한 방법을 통칭하여 로버스트 회귀라고 한다.

지수함수·로그함수·분수함수의 비선형 적합에서도, 선형회귀에 로버스트 기법을 접목하는 것처럼, 잔차항에 대한 가중 함수를 도입한 뒤 가우스–뉴턴이나 레벤버그–마콰르트 반복에서 업데이트할 때 잔차 크기에 따라 가중을 동적으로 조정한다. 간단한 예시로 Huber 로스 함수를 적용한다고 하면, 오차가 작을 때는 제곱오차와 비슷하게 작동하다가, 오차가 일정 임계값 이상이면 선형적으로 벌점을 주어 이상점을 덜 민감하게 처리한다.

#### 매개변수의 신뢰구간

지수함수·로그함수·분수함수 적합 후의 매개변수 추정값 $\hat{\boldsymbol{\beta}}$에 대해, 이들이 얼마만큼의 불확실성을 갖는지 신뢰구간(Confidence Interval)을 구하는 일은 중요하다. 선형회귀에서는 해석적 공식이 존재하여 분산–공분산 행렬을 구하고, 각 매개변수별 표준오차와 신뢰구간을 쉽게 계산한다.

비선형 모델에서는 가우스–뉴턴, 레벤버그–마콰르트 알고리즘이 수렴한 지점에서, 잔차제곱합의 최소화에 따른 야코비 행렬을 통해 추정량의 근사 공분산행렬을 구할 수 있다. 예를 들어 가우스–뉴턴 방법의 정상상태(수렴점)에서 야코비 J\mathbf{J}가 정규방정식의 근사 역할을 하므로,

$$
\begin{align} \text{Cov}(\hat{\boldsymbol{\beta}})  \approx \sigma^2 \Bigl(\mathbf{J}^\mathsf{T}\mathbf{J}\Bigr)^{-1},\end{align}
$$

형태의 근사를 사용한다. 여기서 σ2\sigma^2는 모델 잔차의 추정 분산이다. 이를 통해 매개변수별 표준오차를 구하고, 정규근사를 적용할 수 있다면 $\hat{\beta}*j \pm z*{\alpha/2},\mathrm{SE}(\hat{\beta}\_j)$ 형태의 신뢰구간을 구한다.

#### 적합도 지표

지수함수·로그함수·분수함수 적합의 결과를 평가할 때, 단순히 잔차제곱합이나 평균제곱오차(MSE) 등으로도 충분히 비교할 수 있으나, 데이터의 상대적인 변동성을 고려하기 위해 결정계수(R2R^2)를 구하거나, 예측값과 실제값의 상대오차(relative error)를 확인하기도 한다. 다만 R2R^2의 해석은 변환 회귀(log-linear, reciprocal transform 등)에서는 주의가 필요하다.

필요에 따라 Akaike Information Criterion(AIC), Bayesian Information Criterion(BIC) 같은 모델 선택 지표를 도입해 지수함수, 로그함수, 분수함수 등 여러 모델 후보 중에서 데이터에 가장 적합하고 과적합(overfitting)이 덜한 모델을 선정하는 과정도 가능하다.

#### 다차원·다중 지수함수 적합

변수가 2차원 이상인 상황에서, 예를 들어 $\mathbf{x} = (x\_1, x\_2)$를 독립변수로 하여 $y = \beta\_0 \exp(\beta\_1 x\_1 + \beta\_2 x\_2)$ 등의 모델을 세울 수도 있다. 이 경우에도 핵심 아이디어는 동일하다. 비선형 최소제곱법을 적용하거나, 변환으로 선형형태가 된다면 선형회귀를 쓸 수 있다. 모델 구조가 복잡해질수록 초기값 선정과 수치안정성, 그리고 매개변수 상호간 상관관계(Collinearity)에 주의해야 한다.

또한, 복수의 지수항이 합쳐진 $y = \beta\_0 e^{\beta\_1 x} + \beta\_2 e^{\beta\_3 x}$와 같은 모델은 변환만으로는 해결이 어렵다. 이 경우에는 역시 비선형 최소제곱법을 활용하며, 야코비 행렬이 좀 더 복잡해질 뿐이다. 자료가 많고 노이즈가 큰 상황이라면 지역최소(local minimum)에 빠지지 않도록 다양한 초기값을 시도하거나 전역탐색 알고리즘과 결합하기도 한다.

#### Box-Cox 변환, Box-Tidwell 변환

일반 선형회귀의 잔차정규성이나 분산균일성을 개선하기 위해 자주 쓰이는 변환 기법으로 Box-Cox 변환 등이 있다. 예를 들어 yy가 양의 값만을 갖는다면,

$$
\begin{align} y^{(\lambda)}  = \begin{cases} \dfrac{y^\lambda - 1}{\lambda}, \quad &\lambda \neq 0 \
$$

6pt] \ln(y), \quad &\lambda = 0 \end{cases} \end{align}

$$
와 같은 변환을 적용해 선형화·분산균일화를 꾀한다. 로그함수 적합과 유사하게 yy를 변환하는 효과를 가질 수 있어, 지수함수형 자료나 분수함수형 자료의 잔차특성을 개선시키는데 유용하다. Box-Tidwell 변환은 독립변수의 변환을 동적으로 맞추는 방식으로, xx에 대한 로그 변환이나 거듭제곱 변환 등을 동시에 추정한다.

### 구현 예시: 로버스트 회귀 (Octave)

아래는 Octave에서 로버스트 회귀를 사용하여 y=β0eβ1xy = \beta\_0 e^{\beta\_1 x}를 적합해 보는 단순 예시다. Octave 자체에 로버스트 회귀 함수를 직접 제공하지 않을 수도 있으나, 유사한 패키지를 활용하거나 커스텀 함수를 작성할 수 있다. 여기서는 간단히 M-estimator 형태를 한 번 구현한다고 가정한다.

```octave
% 가상의 지수 모델: y = b0*exp(b1*x)
% 이상점(outlier)이 포함된 데이터를 만든 뒤 로버스트 회귀로 적합
% 데이터 생성
x = linspace(0,5,20)';
y_clean = 2 * exp(0.5*x);
noise = 0.3*randn(size(x));
y_data = y_clean + noise;
% 이상점 추가
y_data(5) = y_data(5)*5;  % 극단값으로 수정
y_data(15) = y_data(15)/10; 
% 초기값
b0_init = 1;
b1_init = 0.1;
% 로스 함수 (Huber)
function val = huberLoss(r, delta)
  % r: residual
  % delta: tuning parameter
  if abs(r) <= delta
    val = 0.5 * r^2;
  else
    val = delta*(abs(r) - 0.5*delta);
  end
endfunction
% Huber 로스를 합산하는 목적함수
function S = huberObj(params, x, y, delta)
  b0 = params(1);
  b1 = params(2);
  yhat = b0*exp(b1*x);
  residuals = y - yhat;
  costs = arrayfun(@(r) huberLoss(r, delta), residuals);
  S = sum(costs);
endfunction
% fminunc 등을 이용해 최적화 (Octave Optimization Package)
pkg load optim
delta = 1.0; % Huber 파라미터
[theta, fval, info] = fminunc(@(p) huberObj(p, x, y_data, delta), [b0_init; b1_init]);
b0_hat = theta(1);
b1_hat = theta(2);
fprintf("로버스트 회귀 추정치:\n");
fprintf("b0 = %f, b1 = %f\n", b0_hat, b1_hat);
% 시각화
xx = linspace(0,5,100)';
yy_robust = b0_hat * exp(b1_hat*xx);
plot(x, y_data, 'ro', 'markersize', 8);
hold on;
plot(xx, yy_robust, 'b-', 'linewidth', 2);
xlabel("x");
ylabel("y");
title("Robust fitting: Huber loss for exponential model");
grid on;
```

위 코드는 순수한 로버스트 최소제곱이라기보다는 허버(Huber) 로스 함수를 직접 정의하여 fminunc 최적화를 수행한 예시다. 실제로는 레벤버그–마콰르트 구조나, 잔차의 가중을 반복 재계산하는 방법도 가능하다.

### 참고 및 확장

비선형 곡선 근사를 할 때, 지수·로그·분수함수 외에도 시그모이드(sigmoid)나 기타 초월함수 등이 자주 등장한다. 접근 방식은 본질적으로 동일하며, 선형화 가능성이 있으면 변환 회귀를, 불가능하다면 비선형 최소제곱 반복해법을 적용한다. 각 모델에 내재된 가정, 예컨대 지수함수는 음수가 될 수 없고 로그함수는 입력이 양의 범위에서만 유효하다는 점을 고려해야 한다.
모델 복잡도가 올라가면, 매개변수가 서로 상관을 가지게 되어 추정이 불안정해지거나 여러 근사해 중 하나에 수렴할 수 있다. 이러한 문제를 완화하기 위해 각 매개변수에 대해 사전 정보(prior)를 도입하는 베이지안 접근도 고려할 수 있다.

### 모델 식별가능성(Identifiability)과 매개변수 상관성

지수함수·로그함수·분수함수 모델을 포함한 비선형 회귀에서는 모델 구조상 매개변수가 상호 강하게 결합(Correlation)될 위험이 있다. 예를 들어 두 지수항이 존재하는 $y = \beta\_0 e^{\beta\_1 x} + \beta\_2 e^{\beta\_3 x}$ 형태에서는 $\beta\_0$와 $\beta\_2$가 동시에 크고, 대신 $\beta\_1$와 $\beta\_3$가 특정 방향으로 바뀌어도 실제 곡선 형태가 크게 달라지지 않을 수 있다. 이런 상황에서는 매개변수를 분리해내기가 쉽지 않아, 추정 결과가 매우 불안정해지고, 극단적으로는 수치적 발산 혹은 잘못된 최소점으로 빠지게 된다.
이 문제는 ‘식별가능성(identifiability)’의 관점으로 해석되는데, 모델에서 매개변수들 간에 사실상 동등한(또는 대체 가능한) 표현이 중복되어 있으면, 관측자료만으로는 각 매개변수를 독립적으로 구분할 수 없게 된다. 해결을 위해서는 다음과 같은 방식이 제안된다.

* 추가로 제약조건(예: $\beta\_0 + \beta\_2 = 1$처럼)을 둔다.
* 매개변수를 줄이는 방향으로 모델을 간소화한다.
* 사전정보(prior)나 보조데이터를 통해 특정 매개변수의 범위를 제한한다.
  이러한 장치는 실험적·이론적 배경을 토대로 설정해야 한다. 이를 소홀히 하면, 아무리 반복 알고리즘을 써도 의미 없는 수렴 해를 얻게 될 수 있다.

### 외삽(Extrapolation)의 위험

지수함수·로그함수·분수함수 적합에서는 일반적으로, 관측구간 바깥에서 모델을 외삽(Extrapolation)하는 일이 매우 조심스럽다. 예컨대 지수함수 모형은 관측구간을 넘어가면 기하급수적으로 값이 커지거나 작아질 수 있으며, 분수함수 모형은 분모가 0에 가까워지는 특이점 근방에서 갑작스럽게 발산할 수 있다. 관측구간 밖에서는 실제 물리적·생물학적·경제학적 제약이 작동하기 마련이므로, 단순 지수 또는 분수함수로 예측하는 것은 위험할 수 있다.
이를 완화하기 위해서는, 관측구간 밖으로 크게 벗어나지 않는 수준에서 예측을 수행하거나, 추가적 이론을 바탕으로 모델에 완충(term)을 넣어주기도 한다. 로그함수 적합에서도 $x$의 범위가 기존보다 크게 확대되면 로그 특성이 맞지 않을 수 있으며, $x$가 0 이하로 내려가는 구간에서는 정의 자체가 안 될 수 있음을 유의해야 한다.

### 다항–지수 혼합모델 등 복합적 구조

실제 현상에서는 지수함수나 로그함수, 분수함수만으로 설명이 충분치 않을 때가 많다. 예를 들어, 분수함수와 다항식이 혼합된 다음 형태:
$$

\begin{align} y = \frac{p(x)}{q(x)},\end{align}

$$
여기서 $p(x)$, $q(x)$는 다항식(또는 다른 형태)의 함수일 수 있다. 이 모델은 “유리함수(Rational Function)” 형태라고도 불리며, 선형화하기 까다롭다. 보통은 비선형 최소제곱법을 그대로 적용하거나, 특정 차수(degree) 제한을 두어 매개변수 개수를 관리한다.
비슷하게, 로그함수 모형과 지수함수 모형이 합쳐진:
$$

\begin{align} y = \beta\_0 + \beta\_1\ln(x) + \beta\_2 e^{\beta\_3 x} \end{align}

$$
같은 하이브리드 모델도 가능하다. 이런 복합적 구조를 다룰 때에는 고급 최적화 기법(예: 전역탐색, 메타휴리스틱)이나, 매개변수 감도분석을 통해 식별가능성을 선결한 뒤 반복기법을 적용하는 방안을 고려할 만하다.

### 동적 모델과 지수성분 적합

미분방정식이 들어간 동적 모델에서, 해(솔루션)가 지수함수 형태로 표현되는 경우가 많다. 예컨대 1차 혹은 2차 선형 미분방정식의 해는 지수항 합으로 구성된다. 관측데이터가 시간축에 대해 주어졌을 때, 이를 토대로 동적 모델의 매개변수를 추정하는 과정도 결국 “지수함수(혹은 지수항 합)” 적합 문제로 귀결된다.
이때는 최소제곱 적합과 더불어, 칼만필터(Kalman Filter)나 관측자(Observer) 기법 등 동적시스템 전용 알고리즘을 쓸 수도 있다. 동적 방정식을 직접 풀어 얻은 해가 $y(t) = \beta\_0 e^{\beta\_1 t} + \dots$ 형태라면, 앞서 소개한 비선형 회귀 접근을 동일하게 적용할 수 있다. 다만, 시스템 내부 변수가 여러 개인 경우(다변수 상태방정식)에는 수치해석이 더 복잡해지고, 잔차 최소화 타깃이 단순 $y\_i - \hat{y}\_i$가 아니라 시스템 전체 상태가 될 수도 있다.

### 전역적 vs. 지역적 최소 찾기

분산이 매우 큰 데이터나 모델 구조가 복잡한 경우, 최소제곱법에서 사용하는 국소적(local) 최적화 알고리즘이 여러 개의 국소해 중 하나를 임의로 찾을 수 있다. 예를 들어 레벤버그–마콰르트는 연속적인 기울기 정보를 이용해 국소적으로 탐색하므로, 넓은 파라미터 공간 내에 다수의 골짜기(지역최소)가 있을 때 최적점을 놓칠 가능성이 있다.
이를 대비하여 전역적(global) 탐색 알고리즘(예: 유전알고리즘, 분산진화전략, 심플렉스 탐색)과 결합하는 방법을 고려한다. 즉, 전역 탐색으로 여러 후보 초기값을 찾은 뒤, 각 지점에서 국소적 반복기법(가우스–뉴턴 혹은 레벤버그–마콰르트)을 수행하여 최소점을 비교한다. 이렇게 하면 지수·로그·분수함수 형태의 복잡모델에서도 좀 더 신뢰도 높은 솔루션을 얻을 수 있다.

### 예측 구간 추정 및 불확실성 시각화

최소제곱법으로 매개변수를 얻고 나면, 예측값 $\hat{y}(x)$뿐 아니라 그 신뢰구간 혹은 예측구간(Confidence / Prediction Interval)을 시각화할 필요가 있다. 예측구간은 일반적으로 오차분산과 매개변수 추정치의 분산을 모두 반영하므로, 데이터가 적거나 노이즈가 큰 경우에는 모델의 곡선과 예측구간이 상당히 넓어지게 된다.
지수함수 모델의 경우, $x$가 커짐에 따라 오차도 함께 지수적으로 커지는 경향이 있을 수 있고, 로그함수 모델에서는 $x$가 작아질수록 상대오차가 커지기 쉽다. 그러므로 모델함수 자체가 예측오차 구조에 미치는 영향을 파악하고, (필요하다면) 가중 최소제곱 혹은 분산 안정화 변환을 적용한다.

### 정리

지수함수·로그함수·분수함수는 현장에서 다양한 현상을 표현하기 위해 자주 사용되는 비선형 모델이다. 변환으로 선형화가 가능한 간단한 형태에서는 전통적인 선형회귀 기법을 사용해 빠르게 해를 구할 수 있지만, 형태가 조금만 복잡해져도 비선형 최소제곱법을 적용하는 편이 일반적이다.
가우스–뉴턴, 레벤버그–마콰르트 등 국소적 반복기법은 빠르고 직관적이지만, 초기값과 잔차 구조에 민감하며, 식별가능성 문제가 도사리기도 한다. 로버스트 회귀나 가중 최소제곱, 전역 탐색 알고리즘과의 결합 등 다양한 확장 방법을 활용하면 실제 데이터와의 부합도를 높이고, 이상점·발산 문제를 완화할 수 있다.
$$
