estimated_standard_deviation
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
estimated_standard_deviation [2020/12/05 18:47] – [수학적 증명] hkimscil | estimated_standard_deviation [2025/08/12 20:00] (current) – [R 에서 SS값이 최소인 v값을 찾기] hkimscil | ||
---|---|---|---|
Line 11: | Line 11: | ||
\begin{eqnarray*} | \begin{eqnarray*} | ||
- | \hat{\sigma}^{2} | + | \hat{\sigma}^{2} |
\end{eqnarray*} | \end{eqnarray*} | ||
Line 22: | Line 22: | ||
====== 직관적 이해 ====== | ====== 직관적 이해 ====== | ||
- | 위에서 n-1 을 사용하기 | + | 분산은 $SS/df$ 라고 배웠는데, |
- | \begin{eqnarray*} | + | |
- | \sum_{i=1}^{n} {(X_{i}-\mu)} > \sum_{i=1}^{n} {(X_{i}-\overline{X})} | + | 이를 그림으로도 설명할 수 있다. 아래에서 녹색의 세로선은 모집단의 평균값이고, |
- | \end{eqnarray*} | + | |
- | + | ||
- | 라는 점이다. 따라서 n 대신 n-1로 나눠주어서 " | + | |
- | + | ||
- | 아래는 20개의 원소를 갖는 k 집합을 예이다. | + | |
- | '' | + | |
- | + | ||
- | 우리는 이 집합의 평균과 분산값이 각각 8.95 와 27.2475 임을 알고 있다. 이 때 분산값은 24.2475는 SS값을 구한 후, 이를 N으로 나눈 값이다. | + | |
- | + | ||
- | 위의 모집단에서 3개의 샘플을 취하여 S1 = {4, 11, 18}을 얻었고, 그 평균값은 11이다. 위의 샘플에서 모집단의 분산값을 예측한다고 할 때, 모집단의 (N=20인) 평균값을 안다고 하면 우리는 | + | |
- | | s1 | mu | deviation score | ds< | + | |
- | | 4 | 8.95 | -4.95 | 24.5025 | + | |
- | | 11 | 8.95 | 2.05 | 4.2025 | + | |
- | | 18 | 8.95 | 9.05 | 81.9025 | + | |
- | | | | SS< | + | |
- | + | ||
- | SS< | + | |
- | + | ||
- | | s1 | $\overline{X}$ | deviation score | ds< | + | |
- | | 4 | 11 | -7 | 49 | | + | |
- | | 11 | 11 | 0 | 0 | | + | |
- | | 18 | 11 | 7 | 49 | | + | |
- | | | | SS< | + | |
- | + | ||
- | 이렇게 얻은 SS< | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | < | + | |
- | ############ | + | |
- | set.seed(1010) | + | |
- | n.pop <- 20 | + | |
- | k <- sample(1: | + | |
- | k | + | |
- | k.mean <- mean(k) | + | |
- | k.pvar <- var(k)*((n.pop-1)/ | + | |
- | k.mean | + | |
- | k.pvar | + | |
- | + | ||
- | ############ | + | |
- | n.samp <- 3 | + | |
- | ks <- sample(k, n.samp) | + | |
- | ks | + | |
- | ks.mean <- mean(ks) | + | |
- | ks.var <- var(ks) | + | |
- | ks.pvar <- var(ks)*((n.samp-1)/ | + | |
- | ############ | + | |
- | ks-k.mean | + | |
- | ks-ks.mean | + | |
- | sum((ks-k.mean)^2) | + | |
- | sum((ks-ks.mean)^2) | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | ############ | + | |
- | set.seed(3) # another sample | + | |
- | n.samp <- 3 | + | |
- | ks <- sample(k, n.samp) | + | |
- | ks | + | |
- | ks.mean <- mean(ks) | + | |
- | ks.var <- var(ks) | + | |
- | ks.pvar <- var(ks)*((n.samp-1)/ | + | |
- | ############ | + | |
- | ks-k.mean | + | |
- | ks-ks.mean | + | |
- | sum((ks-k.mean)^2) | + | |
- | sum((ks-ks.mean)^2) | + | |
- | + | ||
- | ############ | + | |
- | set.seed(5) # another sample | + | |
- | n.samp <- 3 | + | |
- | ks <- sample(k, n.samp) | + | |
- | ks | + | |
- | ks.mean <- mean(ks) | + | |
- | ks.var <- var(ks) | + | |
- | ks.pvar <- var(ks)*((n.samp-1)/ | + | |
- | ############ | + | |
- | ks-k.mean | + | |
- | ks-ks.mean | + | |
- | sum((ks-k.mean)^2) | + | |
- | sum((ks-ks.mean)^2) | + | |
- | + | ||
- | ############ | + | |
- | set.seed(7) # another sample | + | |
- | n.samp <- 3 | + | |
- | ks <- sample(k, n.samp) | + | |
- | ks | + | |
- | ks.mean <- mean(ks) | + | |
- | ks.var <- var(ks) | + | |
- | ks.pvar <- var(ks)*((n.samp-1)/ | + | |
- | ############ | + | |
- | ks-k.mean | + | |
- | ks-ks.mean | + | |
- | sum((ks-k.mean)^2) | + | |
- | sum((ks-ks.mean)^2) | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | > ############ | + | |
- | > set.seed(1010) | + | |
- | > n.pop <- 20 | + | |
- | > k <- sample(1: | + | |
- | > k | + | |
- | | + | |
- | > k.mean <- mean(k) | + | |
- | > k.pvar <- var(k)*((n.pop-1)/ | + | |
- | > k.mean | + | |
- | [1] 8.95 | + | |
- | > k.pvar | + | |
- | [1] 27.2475 | + | |
- | > ############ | + | |
- | > n.samp <- 3 | + | |
- | > ks <- sample(k, n.samp) | + | |
- | > ks | + | |
- | [1] 11 13 18 | + | |
- | > ks.mean <- mean(ks) | + | |
- | > ks.var <- var(ks) | + | |
- | > ks.pvar <- var(ks)*((n.samp-1)/ | + | |
- | > ############ | + | |
- | > ks-k.mean | + | |
- | [1] 2.05 4.05 9.05 | + | |
- | > ks-ks.mean | + | |
- | [1] -3 -1 4 | + | |
- | > sum((ks-k.mean)^2) | + | |
- | [1] 102.5075 | + | |
- | > sum((ks-ks.mean)^2) | + | |
- | [1] 26 | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | > ############ | + | |
- | > set.seed(3) # another sample | + | |
- | > n.samp <- 3 | + | |
- | > ks <- sample(k, n.samp) | + | |
- | > ks | + | |
- | [1] 4 11 18 | + | |
- | > ks.mean <- mean(ks) | + | |
- | > ks.var <- var(ks) | + | |
- | > ks.pvar <- var(ks)*((n.samp-1)/ | + | |
- | > ############ | + | |
- | > ks-k.mean | + | |
- | [1] -4.95 2.05 9.05 | + | |
- | > ks-ks.mean | + | |
- | [1] -7 0 7 | + | |
- | > sum((ks-k.mean)^2) | + | |
- | [1] 110.6075 | + | |
- | > sum((ks-ks.mean)^2) | + | |
- | [1] 98 | + | |
- | > | + | |
- | + | ||
- | > ############ | + | |
- | > set.seed(5) # another sample | + | |
- | > n.samp <- 3 | + | |
- | > ks <- sample(k, n.samp) | + | |
- | > ks | + | |
- | [1] 4 5 18 | + | |
- | > ks.mean <- mean(ks) | + | |
- | > ks.var <- var(ks) | + | |
- | > ks.pvar <- var(ks)*((n.samp-1)/ | + | |
- | > ############ | + | |
- | > ks-k.mean | + | |
- | [1] -4.95 -3.95 9.05 | + | |
- | > ks-ks.mean | + | |
- | [1] -5 -4 9 | + | |
- | > sum((ks-k.mean)^2) | + | |
- | [1] 122.0075 | + | |
- | > sum((ks-ks.mean)^2) | + | |
- | [1] 122 | + | |
- | + | ||
- | + | ||
- | > ############ | + | |
- | > set.seed(7) # another sample | + | |
- | > n.samp <- 3 | + | |
- | > ks <- sample(k, n.samp) | + | |
- | > ks | + | |
- | [1] 11 5 18 | + | |
- | > ks.mean <- mean(ks) | + | |
- | > ks.var <- var(ks) | + | |
- | > ks.pvar <- var(ks)*((n.samp-1)/ | + | |
- | > ############ | + | |
- | > ks-k.mean | + | |
- | [1] 2.05 -3.95 9.05 | + | |
- | > ks-ks.mean | + | |
- | [1] -0.3333333 -6.3333333 | + | |
- | > sum((ks-k.mean)^2) | + | |
- | [1] 101.7075 | + | |
- | > sum((ks-ks.mean)^2) | + | |
- | [1] 84.66667 | + | |
- | > | + | |
- | </ | + | |
- | 위의 코드에서 | + | |
- | '' | + | |
- | '' | + | |
- | 인데, 위의 케이스를 보면 | + | |
- | + | ||
- | '' | + | |
- | $\sum({X_{i}-\mu})^{2} > \sum({X_{i}-\overline{X}})^{2}$ 의 경향이 있다. | + | |
- | + | ||
- | 이를 그림으로 설명하면 다음과 같다. 아래에서 녹색의 세로선은 모집단의 평균값이고, | + | |
{{: | {{: | ||
Line 391: | Line 191: | ||
이므로 | 이므로 | ||
- | \begin{align*} | + | \begin{align} |
E\left[X^2\right] & = Var\left[X\right] + \mu^2 \nonumber \\ | E\left[X^2\right] & = Var\left[X\right] + \mu^2 \nonumber \\ | ||
& = \sigma^{2} + \mu^2 \\ | & = \sigma^{2} + \mu^2 \\ | ||
- | \end{align*} | + | \end{align} |
마찬가지로 | 마찬가지로 | ||
\begin{align} | \begin{align} | ||
Var \left[ \overline{X}\right] & = E \left[\overline{X}^2 \right] - \left[E(\overline{X})\right]^2 \nonumber \\ | Var \left[ \overline{X}\right] & = E \left[\overline{X}^2 \right] - \left[E(\overline{X})\right]^2 \nonumber \\ | ||
- | & = E\left[\overline{X}^{2}\right] - \mu^{2} | + | & = E\left[\overline{X}^{2}\right] - \mu^{2} |
\end{align} | \end{align} | ||
Line 425: | Line 225: | ||
---- | ---- | ||
우리가 알고자 하는 것은 아래의 식이 population의 parameter인 $\sigma^{2}$ 의 값과 같은가이다. | 우리가 알고자 하는 것은 아래의 식이 population의 parameter인 $\sigma^{2}$ 의 값과 같은가이다. | ||
- | \begin{eqnarray*} | + | \begin{align*} |
- | E[s^{2}] & = & E \left[\frac{\displaystyle\sum_{i=1}^{n}(X_{i}-\overline{X})^{2}}{n-1} \right] \dots\dots\dots (a) \\ | + | E[s^{2}] & = E \left[\frac{\displaystyle\sum_{i=1}^{n}(X_{i}-\overline{X})^{2}}{n-1} \right] \qquad |
- | & = & \sigma^{2} | + | \cdot\cdot\cdot\cdot\cdot\cdot\cdot\cdot\cdot\cdot\cdot\cdot |
- | \end{eqnarray*} | + | & = \sigma^{2} |
+ | \end{align*} | ||
위의 식에서 일부만을 추출해서 먼저 보자. | 위의 식에서 일부만을 추출해서 먼저 보자. | ||
- | \begin{eqnarray*} | ||
- | E \left[\sum{(X_{i}-\overline{X})^{2}} \right] & = & E \left[\sum(X_{i}^{2}- 2 X_{i} \overline{X} + \overline{X}^{2})\right] \\ | ||
- | & = & E \left[ \sum{X_{i}^2} - \sum{2X_{i} \overline{X}} + \sum {\overline{X^2}} | ||
- | & = & E \left[ \sum{X_{i}^2} - 2 \overline{X} \sum{X_{i}} + \sum{\overline{X^2}} | ||
- | & = & E \left[ \sum{X_{i}^2} - 2 \overline{X} \sum{X_{i}} + n \overline{X^2} \right] | ||
- | & = & E \left[ \sum{X_{i}^2} - 2 \overline{X} \cdot (n \overline{X}) + n \overline {X^2} \right] \\ | ||
- | & = & E \left[ \sum{X_{i}^2} - n \overline{X}^2 \right] \\ | ||
- | & = & \sum {E(X_{i}^2)} - E(n\overline{X}^2) | ||
- | & = & \sum {E(X_{i}^2)} - n E(\overline{X}^2) | ||
- | \end{eqnarray*} | ||
- | 한 편, 위의 | + | \begin{align*} |
+ | E \left[\sum{(X_{i}-\overline{X})^{2}} \right] & = E \left[\sum(X_{i}^{2}- 2 X_{i} \overline{X} + \overline{X}^{2})\right] \\ | ||
+ | & = E \left[ \sum{X_{i}^2} - \sum{2X_{i} \overline{X}} + \sum {\overline{X^2}} | ||
+ | & = E \left[ \sum{X_{i}^2} - 2 \overline{X} \sum{X_{i}} + \sum{\overline{X^2}} | ||
+ | & = E \left[ \sum{X_{i}^2} - 2 \overline{X} \sum{X_{i}} + n \overline{X^2} \right] | ||
+ | & = E \left[ \sum{X_{i}^2} - 2 \overline{X} \cdot (n \overline{X}) + n \overline {X^2} \right] \\ | ||
+ | & = E \left[ \sum{X_{i}^2} - n \overline{X}^2 \right] \\ | ||
+ | & = \sum {E\left(X_{i}^2\right)} - E\left(n\overline{X}^2\right) | ||
+ | & = \sum {E\left(X_{i}^2\right)} - n E\left(\overline{X}^2\right) | ||
+ | \end{align*} | ||
+ | 한 편, 위의 $(1), (2)$에서 | ||
<WRAP box> | <WRAP box> | ||
- | \begin{eqnarray*} | + | \begin{align*} |
- | E[X_{i}^{2}] & = & \sigma^{2} + \mu^2 \;\;\; \dots\dots\dots\dots\dots (1) \\ | + | E\left[X_{i}^{2}\right] & = \sigma^{2} + \mu^2 \;\;\; \dots\dots\dots\dots\dots (1) \\ |
- | E[\overline{X}^{2}] & = & \dfrac {\sigma^{2}} {n} + \mu^{2} \;\;\; \dots\dots\dots\dots\dots (2) | + | E\left[\overline{X}^{2}\right] & = \dfrac {\sigma^{2}} {n} + \mu^{2} \;\;\; \dots\dots\dots\dots\dots (2) |
- | \end{eqnarray*} | + | \end{align*} |
</ | </ | ||
- | 위의 (1), (2)를 (3)에 대입해보면 | + | 위의 |
- | \begin{eqnarray*} | + | \begin{align*} |
- | E \left[\sum{(X_{i}-\overline{X})^{2}} \right] & = & \sum{E(X_{i}^{2})} - n E(\overline{X}^{2}) | + | E \left[\sum{(X_{i}-\overline{X})^{2}} \right] & = \sum{E\left(X_{i}^{2}\right)} - n E\left(\overline{X}^{2}\right) \\ |
- | & = & \sum{(\sigma^{2} + \mu^{2})} - n (\dfrac{\sigma^2}{n} + \mu^2) \\ | + | & = \sum{\left(\sigma^{2} + \mu^{2}\right)} - n \left(\dfrac{\sigma^2}{n} + \mu^2\right) \\ |
- | & = & n\sigma^{2} + n\mu^{2} - \sigma^{2} - n\mu^{2} \\ | + | & = n\sigma^{2} + n\mu^{2} - \sigma^{2} - n\mu^{2} \\ |
- | & = & (n-1) \sigma^{2} | + | & = \left(n-1\right) \sigma^{2} |
- | \end{eqnarray*} | + | \end{align*} |
위는 식 (a)의 일부이므로 이를 온전한 식에 대입해보면, | 위는 식 (a)의 일부이므로 이를 온전한 식에 대입해보면, | ||
Line 478: | Line 279: | ||
\end{eqnarray*} | \end{eqnarray*} | ||
+ | |||
+ | ---- | ||
만약에 우리가 population의 variance를 구하듯이 n을 이용한다고 하면, | 만약에 우리가 population의 variance를 구하듯이 n을 이용한다고 하면, | ||
Line 484: | Line 287: | ||
& = & \dfrac{1}{n} E \left[\sum{(X_{i}-\overline{X})^{2}} \right] \\ | & = & \dfrac{1}{n} E \left[\sum{(X_{i}-\overline{X})^{2}} \right] \\ | ||
& = & \dfrac{1}{n} (n-1) \sigma^{2} \\ | & = & \dfrac{1}{n} (n-1) \sigma^{2} \\ | ||
- | & = & (\dfrac{n-1}{n}) \sigma^{2} \\ | + | & = & \left(\dfrac{n-1}{n}\right) \sigma^{2} \\ |
\end{eqnarray*} | \end{eqnarray*} | ||
즉, 원래 $\sigma^2$ 값보다 조금 작은 값을 갖게 될 것이다 (이를 biased result라고 한다). | 즉, 원래 $\sigma^2$ 값보다 조금 작은 값을 갖게 될 것이다 (이를 biased result라고 한다). | ||
- | {{tag>" | ||
+ | ====== R 에서 SS값이 최소인 v값을 찾기 ====== | ||
+ | < | ||
+ | # | ||
+ | # | ||
+ | |||
+ | rm(list=ls()) | ||
+ | rnorm2 <- function(n, | ||
+ | mean+sd*scale(rnorm(n)) | ||
+ | } | ||
+ | |||
+ | # set.seed(191) | ||
+ | nx <- 20 | ||
+ | mx <- 50 | ||
+ | sdx <- mx * 0.15 | ||
+ | x <- rnorm2(nx, mx, sdx) | ||
+ | |||
+ | mean(x) | ||
+ | sd(x) | ||
+ | length(x) | ||
+ | hist(x) | ||
+ | |||
+ | x.span <- seq(from = mean(x)-6*sd(x), | ||
+ | to = mean(x)+6*sd(x), | ||
+ | by = 0.1) | ||
+ | |||
+ | residuals <- function(x, v) { | ||
+ | return(x - v) | ||
+ | } | ||
+ | |||
+ | ssr <- function(x, v) { | ||
+ | residuals <- (x - v) | ||
+ | return(sum(residuals^2)) | ||
+ | } | ||
+ | |||
+ | msr <- function(x, v) { | ||
+ | residuals <- (x - v) | ||
+ | # return((sum(residuals^2))/ | ||
+ | return((mean(residuals^2))) | ||
+ | } | ||
+ | |||
+ | srs <- c() # sum of residuals | ||
+ | ssrs <- c() # sum of square residuals | ||
+ | msrs <- c() # mean square residuals = variance | ||
+ | vs <- c() # the value of v in (x - v) | ||
+ | |||
+ | for (i in x.span) { | ||
+ | res.x <- residuals(x, | ||
+ | srs.x <- sum(res.x) | ||
+ | ssr.x <- ssr(x,i) | ||
+ | msr.x <- msr(x,i) | ||
+ | srs <- append(srs, srs.x) | ||
+ | ssrs <- append(ssrs, | ||
+ | msrs <- append(msrs, | ||
+ | vs <- append(vs, i) | ||
+ | } | ||
+ | plot(srs) | ||
+ | plot(msrs) | ||
+ | plot(srs) | ||
+ | |||
+ | min(msrs) | ||
+ | min.pos.msrs <- which(msrs == min(msrs)) | ||
+ | min.pos.msrs | ||
+ | print(vs[min.pos.msrs]) | ||
+ | |||
+ | plot(vs, msrs) | ||
+ | plot(vs, srs) | ||
+ | |||
+ | |||
+ | |||
+ | # the above no gradient | ||
+ | # mse 값으로 계산 rather than sse | ||
+ | # 후자는 값이 너무 커짐 | ||
+ | |||
+ | gradient <- function(x, v){ | ||
+ | residuals = x - v | ||
+ | dx = -2 * mean(residuals) | ||
+ | return(list(" | ||
+ | } # function returns ds value | ||
+ | |||
+ | residuals <- function(x, v) { | ||
+ | return(x - v) | ||
+ | } | ||
+ | |||
+ | ssr <- function(x, v) { | ||
+ | residuals <- (x - v) | ||
+ | return(sum(residuals^2)) | ||
+ | } | ||
+ | |||
+ | msr <- function(x, v) { | ||
+ | residuals <- (x - v) | ||
+ | return((sum(residuals^2))/ | ||
+ | # return(mean(residuals^2)) | ||
+ | } | ||
+ | |||
+ | # pick one random v in (x-v) | ||
+ | v <- rnorm(1) | ||
+ | # Train the model with scaled features | ||
+ | learning.rate = 1e-1 | ||
+ | |||
+ | ssrs <- c() | ||
+ | msrs <- c() | ||
+ | mres <- c() | ||
+ | vs <- c() | ||
+ | # Record Loss for each epoch: | ||
+ | zx <- (x-mean(x))/ | ||
+ | |||
+ | nlen <- 100 | ||
+ | for (epoch in 1:nlen) { | ||
+ | residual <- residuals(zx, | ||
+ | ssr.x <- ssr(zx, v) | ||
+ | msr.x <- msr(zx, v) | ||
+ | ssrs <- append(ssrs, | ||
+ | msrs <- append(msrs, | ||
+ | | ||
+ | grad <- gradient(zx, | ||
+ | | ||
+ | step.v <- grad$ds * learning.rate | ||
+ | v <- v - step.v | ||
+ | vs <- append(vs, v) | ||
+ | } | ||
+ | |||
+ | tail(srs) | ||
+ | tail(msrs) | ||
+ | tail(ssrs) | ||
+ | tail(vs) | ||
+ | |||
+ | plot(srs) | ||
+ | plot(msrs) | ||
+ | plot(ssrs) | ||
+ | plot(vs) | ||
+ | # scaled | ||
+ | v | ||
+ | v.orig <- (v*sd(x))+mean(x) | ||
+ | v.orig | ||
+ | |||
+ | </ | ||
+ | ====== output ====== | ||
+ | < | ||
+ | > # | ||
+ | > # | ||
+ | > | ||
+ | > rm(list=ls()) | ||
+ | > rnorm2 <- function(n, | ||
+ | + | ||
+ | + } | ||
+ | > | ||
+ | > # set.seed(191) | ||
+ | > nx <- 20 | ||
+ | > mx <- 50 | ||
+ | > sdx <- mx * 0.15 | ||
+ | > x <- rnorm2(nx, mx, sdx) | ||
+ | > | ||
+ | > mean(x) | ||
+ | [1] 50 | ||
+ | > sd(x) | ||
+ | [1] 7.5 | ||
+ | > length(x) | ||
+ | [1] 20 | ||
+ | > hist(x) | ||
+ | > | ||
+ | > x.span <- seq(from = mean(x)-6*sd(x), | ||
+ | + to = mean(x)+6*sd(x), | ||
+ | + by = 0.1) | ||
+ | > | ||
+ | > residuals <- function(x, v) { | ||
+ | + | ||
+ | + } | ||
+ | > | ||
+ | > ssr <- function(x, v) { | ||
+ | + | ||
+ | + | ||
+ | + } | ||
+ | > | ||
+ | > msr <- function(x, v) { | ||
+ | + | ||
+ | + # return((sum(residuals^2))/ | ||
+ | + | ||
+ | + } | ||
+ | > | ||
+ | > srs <- c() # sum of residuals | ||
+ | > ssrs <- c() # sum of square residuals | ||
+ | > msrs <- c() # mean square residuals = variance | ||
+ | > vs <- c() # the value of v in (x - v) | ||
+ | > | ||
+ | > for (i in x.span) { | ||
+ | + res.x <- residuals(x, | ||
+ | + srs.x <- sum(res.x) | ||
+ | + ssr.x <- ssr(x,i) | ||
+ | + msr.x <- msr(x,i) | ||
+ | + srs <- append(srs, srs.x) | ||
+ | + ssrs <- append(ssrs, | ||
+ | + msrs <- append(msrs, | ||
+ | + vs <- append(vs, i) | ||
+ | + } | ||
+ | > plot(srs) | ||
+ | > plot(msrs) | ||
+ | > plot(srs) | ||
+ | > | ||
+ | > min(msrs) | ||
+ | [1] 53.4375 | ||
+ | > min.pos.msrs <- which(msrs == min(msrs)) | ||
+ | > min.pos.msrs | ||
+ | [1] 451 | ||
+ | > print(vs[min.pos.msrs]) | ||
+ | [1] 50 | ||
+ | > | ||
+ | > plot(vs, msrs) | ||
+ | > plot(vs, srs) | ||
+ | > | ||
+ | > | ||
+ | > | ||
+ | > # the above no gradient | ||
+ | > # mse 값으로 계산 rather than sse | ||
+ | > # 후자는 값이 너무 커짐 | ||
+ | > | ||
+ | > gradient <- function(x, v){ | ||
+ | + | ||
+ | + dx = -2 * mean(residuals) | ||
+ | + | ||
+ | + } # function returns ds value | ||
+ | > | ||
+ | > residuals <- function(x, v) { | ||
+ | + | ||
+ | + } | ||
+ | > | ||
+ | > ssr <- function(x, v) { | ||
+ | + | ||
+ | + | ||
+ | + } | ||
+ | > | ||
+ | > msr <- function(x, v) { | ||
+ | + | ||
+ | + | ||
+ | + # return(mean(residuals^2)) | ||
+ | + } | ||
+ | > | ||
+ | > # pick one random v in (x-v) | ||
+ | > v <- rnorm(1) | ||
+ | > # Train the model with scaled features | ||
+ | > learning.rate = 1e-1 | ||
+ | > | ||
+ | > ssrs <- c() | ||
+ | > msrs <- c() | ||
+ | > mres <- c() | ||
+ | > vs <- c() | ||
+ | > # Record Loss for each epoch: | ||
+ | > zx <- (x-mean(x))/ | ||
+ | > | ||
+ | > nlen <- 100 | ||
+ | > for (epoch in 1:nlen) { | ||
+ | + | ||
+ | + ssr.x <- ssr(zx, v) | ||
+ | + msr.x <- msr(zx, v) | ||
+ | + ssrs <- append(ssrs, | ||
+ | + msrs <- append(msrs, | ||
+ | + | ||
+ | + grad <- gradient(zx, | ||
+ | + | ||
+ | + | ||
+ | + v <- v - step.v | ||
+ | + vs <- append(vs, v) | ||
+ | + } | ||
+ | > | ||
+ | > tail(srs) | ||
+ | [1] -890 -892 -894 -896 -898 -900 | ||
+ | > tail(msrs) | ||
+ | [1] 1 1 1 1 1 1 | ||
+ | > tail(ssrs) | ||
+ | [1] 19 19 19 19 19 19 | ||
+ | > tail(vs) | ||
+ | [1] 2.936258e-11 2.349006e-11 1.879204e-11 1.503363e-11 1.202690e-11 9.621523e-12 | ||
+ | > | ||
+ | > plot(srs) | ||
+ | > plot(msrs) | ||
+ | > plot(ssrs) | ||
+ | > plot(vs) | ||
+ | > # scaled | ||
+ | > v | ||
+ | [1] 9.621523e-12 | ||
+ | > v.orig <- (v*sd(x))+mean(x) | ||
+ | > v.orig | ||
+ | [1] 50 | ||
+ | > | ||
+ | > | ||
+ | </ | ||
+ | ====== tags ====== | ||
+ | {{tag>" | ||
estimated_standard_deviation.1607161636.txt.gz · Last modified: 2020/12/05 18:47 by hkimscil