접힌 계열 되감기

15014 단어 선형 대수

접힌 계열 되감기



이런 느낌으로 직선(적인 것)이 되풀이되어 있을 때, 되감기를 되감고 싶다.



최종적으로 완전한 직선을 타는 것은 아니므로, 최소 제곱법으로 직선 근사를 한다. 기본적인 생각으로는, 수의 계열 $x_{k}$ 와, 되돌아가 몇 주목인지를 나타내는 계열 $y_{k}$ 를 사용해, 되돌림을 되돌릴 때에 가능한 한 직선에 가까워지도록(듯이) 한다. 도면에서는 연속적으로 점이 있지만, 도중의 점이 빠져도 좋다고 고려한다.

계열 $x_{1},x_{2},\ldots,x_{N}$에 대한 비감소 계열 $y_{1},y_{1},\ldots,y_{N}(y_{k}\leq y_{k + 1},\y_{k}\in Z)$가 있을 때 가중치 $w_{1},\ldots,w_{N}\in\left\{ 0,1\right\}$ 알려진 것으로

$$w_{n}(x_{n} +\alpha y_{n})$$

가능한 한 등차수 열에 가까워지도록 $\alpha$를 결정하고 싶다.

최종 목표가되는 등차 수열

$$a + bn$$

그렇다. 이때의 제곱오차는

$$e^{2} =\sum_{i = 1}^{n}{w_{n}\left( x_{n} +\alpha y_{n} - a - bn\right)}^{2}\quad(1)$$

$$\frac{\partial e^{2}}{\partial\alpha} =\sum_{n = 1}^{N}{2w_{n}y_{n}(x_{n} +\alpha y_{ n} - a - bn)} = 0\quad(2)$$

$$\frac{\partial e^{2}}{\partial a} = -\sum_{n = 1}^{N}{2w_{n}(x_{n} +\alpha y_{n} - a - bn)} = 0\quad(3)$$

$$\frac{\partial e^{2}}{\partial b} = -\sum_{n = 1}^{N}{2nw_{n}(x_{n} +\alpha y_{n} - a - bn)} = 0\quad(4)$$

여기서 다음과 같은 수를 생각한다.

$$\sum_{n=1}^{N}{w_{n}x_{n}} = S_{X}$$

$$\sum_{n=1}^{N}{w_{n}y_{n}} = S_{Y}$$

$$\sum_{n = 1}^{N}{w_{n}x_{n}y_{n}} = S_{\text{XY}}$$

$$\sum_{n = 1}^{N}{w_{n}y_{n}^{2}} = S_{YY}$$

$$\sum_{n = 1}^{N}{w_{n}nx_{n}} = M_{X}$$

$$\sum_{n=1}^{N}{w_{n}ny_{n}} = M_{Y}$$

$$\sum_{n = 1}^{N}w_{n} = W$$

$$\sum_{n = 1}^{N}{w_{n}n} =\Sigma$$

$$\sum_{n = 1}^{N}{w_{n}n^{2}} =\Sigma_{2}$$

(3)에서,

$$S_{X} +\alpha S_{Y} - a W - b\Sigma = 0\quad(5)$$

(2)보다

$$S_{XY} +\alpha S_{YY} - a S_{Y} - b M_{Y} = 0\quad(6)$$

(4)보다

$$M_{X} +\alpha M_{Y} - a\Sigma - b\Sigma_{2} = 0\quad(7)$$

이상보다

$$
\begin{pmatrix}S_{XY}\\S_{X}\\M_{X}\end{pmatrix}+
\begin{pmatrix}
S_{YY} & - S_{Y} & - M_{Y}\\
S_{Y}&-W&-\Sigma\\
M_{Y}&-\Sigma&-\Sigma_{2}
\end{pmatrix}\begin{pmatrix}
\alpha\\
a\\
b
\end{pmatrix} = 0$$

이것을 풀어 $\alpha$를 요구하면 좋다. 프로그램으로 쓰면 이런 느낌.
findlinear <- function(pos,x,y) {
  if (max(y) == 0) {
    # only one segment
    model <- lm(x~pos,data=data.frame(x=x,pos=pos))
    return(c(0,model$coefficients))
  }
  sx <- sum(x)
  sy <- sum(y)
  sxy <- sum(x*y)
  syy <- sum(y^2)
  mx <- sum(pos*x)
  my <- sum(pos*y)
  v <- -c(sxy,sx,mx)
  n <- length(pos)  
  sn <- sum(pos)
  sn2 <- sum(pos^2)
  m <- matrix(c(syy,-sy,-my,sy,-n,-sn,my,-sn,-sn2),
              nrow=3,ncol=3,byrow=TRUE)
  solve(m,v)
}

해보면 이런 느낌
> x
 [1]   0   3   6   9  12 -14 -11  -8  -5  -2   1   4   7  10  13 -13 -10  -7  -4
[20]  -1   2   5   8  11  14 -12  -9  -6  -3   0   3   6   9  12
> y
 [1] 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3
> n
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
[26] 26 27 28 29 30 31 32 33 34
> findlinear(n,x,y)
[1] 29 -3  3
> plot(x+29*y)




그 2 다음.

좋은 웹페이지 즐겨찾기