R의 신경망 패키지 「neuralnet」을 사용해 본다
최근에는 Python에서 TensorFlow나 Chainer를 사용해 보는 것이 유행하고 있습니다만, 이번은 굳이 R의 신경망 패키지인 neuralnet 를 사용해 보았습니다.
공식 레퍼런스의 neuralnet.pdf 에 있는 샘플 코드를 참고로 합니다.
가정 독자
준비
패키지를 설치합니다.
> install.packages("neuralnet")
> library("neuralnet")
XOR 문제
단순 퍼셉트론에서는 학습할 수 없는 XOR 학습을 합니다.
첫째, 데이터 준비.
> XOR <- c(0,1,1,0)
> xor.data <- data.frame(expand.grid(c(0,1), c(0,1)), XOR)
xor.data는 다음과 같습니다.
> xor.data
Var1 Var2 XOR
1 0 0 0
2 1 0 1
3 0 1 1
4 1 1 0
그리고 신경망을 구축합니다.
net.xor <- neuralnet(XOR~Var1+Var2, xor.data, hidden=4, rep=5)
첫 번째 인수는 모델이고 두 번째 인수는 훈련 데이터입니다. 또한 hidden
는 숨겨진 뉴런 수를 지정하고 rep
는 훈련 횟수를 지정합니다.
(레퍼런스에서는 숨겨진 뉴런을 2로 하고 있었지만, 학습의 정밀도가 낮았기 때문에 4로 하고 있습니다.)
네트워크로서는 이렇게 됩니다.
> plot(net.xor, rep="best")
rep="best"
에 의해 오차가 가장 작은 것을 플롯하고 있습니다.
net.xor가 올바르게 XOR을 나타내는지 확인합니다.
> xor.data[-3]
Var1 Var2
1 0 0
2 1 0
3 0 1
4 1 1
> compute(net.xor, xor.data[-3])$net.result
[,1]
[1,] -0.005591322981
[2,] 0.991365312571
[3,] 1.003765769383
[4,] 0.006757999021
네 개의 입력에 대해 각각 대체로 정확한 대답을 얻었습니다.
불임 데이터의 로지스틱 회귀
다음은 불임에 대한 데이터를 다룹니다.
(센시티브한 데이터입니다만, 레퍼런스로 사용하고 있었으므로..)
> data(infert, package="datasets")
> infert
education age parity induced case spontaneous stratum pooled.stratum
1 0-5yrs 26 6 1 1 2 1 3
2 0-5yrs 42 1 1 1 0 2 1
3 0-5yrs 39 6 2 1 0 3 4
4 0-5yrs 34 4 2 1 0 4 2
5 6-11yrs 35 3 1 1 1 5 32
6 6-11yrs 36 4 2 1 1 6 36
7 6-11yrs 23 1 0 1 0 7 6
8 6-11yrs 32 2 0 1 0 8 22
9 6-11yrs 21 1 0 1 1 9 5
10 6-11yrs 28 2 0 1 0 10 19
11 6-11yrs 29 2 1 1 0 11 20
12 6-11yrs 37 4 2 1 1 12 37
13 6-11yrs 31 1 1 1 0 13 9
14 6-11yrs 29 3 2 1 0 14 29
15 6-11yrs 31 2 1 1 1 15 21
16 6-11yrs 27 2 2 1 0 16 18
17 6-11yrs 30 5 2 1 1 17 38
18 6-11yrs 26 1 0 1 1 18 7
19 6-11yrs 25 3 2 1 1 19 28
20 6-11yrs 44 1 0 1 1 20 17
...(省略)
[ reached getOption("max.print") -- omitted 123 rows ]
데이터 설명은 여기을 참조하십시오.
자연·인공유산 후의 불임증에 대한 데이터입니다.
네트워크를 구축합니다.
net.infert <- neuralnet(case~parity+induced+spontaneous, infert, err.fct="ce", linear.output=FALSE, likelihood=TRUE)
피험자인지 대조군인지를 나타내는 case
를 목적변수로 하고, parity
(실험횟수?), induced
(인공유산), spontaneous
.err.fct
는 오차 함수를 지정합니다. ce
의 경우는 크로스 엔트로피, sse
의 경우는 제곱 오차가 됩니다. 기본적으로 제곱 오차입니다.linear.output
는 act.fct
를 출력 레이어의 뉴런에 적용하지 않으려면 TRUE
로, 적용하려면 FALSE
로 설정합니다.act.fct
는 활성화 함수를 지정합니다. 기본적으로 로지스틱 함수입니다.likelihood
가 TRUE
이면 오차 함수가 음의 로그 우도와 동등하면 정보량 표준의 AIC와 BIC가 계산됩니다.
그런 다음 gwplot
에서 각 공변량의 목적 변수에 대한 Generalized Weight를 플롯합니다.
> par(mfrow = c(1,3))
> gwplot(net.infert, selected.covariate="parity", max=3.5, min=-2)
> gwplot(net.infert, selected.covariate="parity", max=3.5, min=-2)
> gwplot(net.infert, selected.covariate="induced", max=3.5, min=-2)
> gwplot(net.infert, selected.covariate="spontaneous", max=3.5, min=-2)
Generalized Weight는 공변량이 목표 변수에 미치는 영향도를 나타냅니다. 0 부근에 모이는 경우는 너무 영향을 주지 않는 것을 나타냅니다.spontaneous
는 다른 것에 비해 영향도가 큰 것일지도 모릅니다.
마지막으로 confidence.interval
에서 Generalized Weight의 신뢰 구간과 NIC를 계산합니다.
confidence.interval(net.infert)
$lower.ci
$lower.ci[[1]]
$lower.ci[[1]][[1]]
[,1]
[1,] 0.2378732931
[2,] -0.7767930421
[3,] -5.6821658449
[4,] -8.7671639096
$lower.ci[[1]][[2]]
[,1]
[1,] -0.7548627922
[2,] -6.4897821363
$upper.ci
$upper.ci[[1]]
$upper.ci[[1]][[1]]
[,1]
[1,] 2.8480852032
[2,] 4.5389670051
[3,] 0.7944060804
[4,] 1.0157270261
$upper.ci[[1]][[2]]
[,1]
[1,] 4.3246718745
[2,] -0.7591746629
$nic
[1] 135.6941297
다음에 하고 싶은 일
R의 신경망 패키지는 그 밖에도 「 nnet 」라고 하는 것이 있기 때문에, 다음은 그것을 만져 보자고 생각합니다.
참고
Reference
이 문제에 관하여(R의 신경망 패키지 「neuralnet」을 사용해 본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shskwmt/items/65a7f1bca2e8e31b378d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
> install.packages("neuralnet")
> library("neuralnet")
단순 퍼셉트론에서는 학습할 수 없는 XOR 학습을 합니다.
첫째, 데이터 준비.
> XOR <- c(0,1,1,0)
> xor.data <- data.frame(expand.grid(c(0,1), c(0,1)), XOR)
xor.data는 다음과 같습니다.
> xor.data
Var1 Var2 XOR
1 0 0 0
2 1 0 1
3 0 1 1
4 1 1 0
그리고 신경망을 구축합니다.
net.xor <- neuralnet(XOR~Var1+Var2, xor.data, hidden=4, rep=5)
첫 번째 인수는 모델이고 두 번째 인수는 훈련 데이터입니다. 또한
hidden
는 숨겨진 뉴런 수를 지정하고 rep
는 훈련 횟수를 지정합니다.(레퍼런스에서는 숨겨진 뉴런을 2로 하고 있었지만, 학습의 정밀도가 낮았기 때문에 4로 하고 있습니다.)
네트워크로서는 이렇게 됩니다.
> plot(net.xor, rep="best")
rep="best"
에 의해 오차가 가장 작은 것을 플롯하고 있습니다.net.xor가 올바르게 XOR을 나타내는지 확인합니다.
> xor.data[-3]
Var1 Var2
1 0 0
2 1 0
3 0 1
4 1 1
> compute(net.xor, xor.data[-3])$net.result
[,1]
[1,] -0.005591322981
[2,] 0.991365312571
[3,] 1.003765769383
[4,] 0.006757999021
네 개의 입력에 대해 각각 대체로 정확한 대답을 얻었습니다.
불임 데이터의 로지스틱 회귀
다음은 불임에 대한 데이터를 다룹니다.
(센시티브한 데이터입니다만, 레퍼런스로 사용하고 있었으므로..)
> data(infert, package="datasets")
> infert
education age parity induced case spontaneous stratum pooled.stratum
1 0-5yrs 26 6 1 1 2 1 3
2 0-5yrs 42 1 1 1 0 2 1
3 0-5yrs 39 6 2 1 0 3 4
4 0-5yrs 34 4 2 1 0 4 2
5 6-11yrs 35 3 1 1 1 5 32
6 6-11yrs 36 4 2 1 1 6 36
7 6-11yrs 23 1 0 1 0 7 6
8 6-11yrs 32 2 0 1 0 8 22
9 6-11yrs 21 1 0 1 1 9 5
10 6-11yrs 28 2 0 1 0 10 19
11 6-11yrs 29 2 1 1 0 11 20
12 6-11yrs 37 4 2 1 1 12 37
13 6-11yrs 31 1 1 1 0 13 9
14 6-11yrs 29 3 2 1 0 14 29
15 6-11yrs 31 2 1 1 1 15 21
16 6-11yrs 27 2 2 1 0 16 18
17 6-11yrs 30 5 2 1 1 17 38
18 6-11yrs 26 1 0 1 1 18 7
19 6-11yrs 25 3 2 1 1 19 28
20 6-11yrs 44 1 0 1 1 20 17
...(省略)
[ reached getOption("max.print") -- omitted 123 rows ]
데이터 설명은 여기을 참조하십시오.
자연·인공유산 후의 불임증에 대한 데이터입니다.
네트워크를 구축합니다.
net.infert <- neuralnet(case~parity+induced+spontaneous, infert, err.fct="ce", linear.output=FALSE, likelihood=TRUE)
피험자인지 대조군인지를 나타내는 case
를 목적변수로 하고, parity
(실험횟수?), induced
(인공유산), spontaneous
.err.fct
는 오차 함수를 지정합니다. ce
의 경우는 크로스 엔트로피, sse
의 경우는 제곱 오차가 됩니다. 기본적으로 제곱 오차입니다.linear.output
는 act.fct
를 출력 레이어의 뉴런에 적용하지 않으려면 TRUE
로, 적용하려면 FALSE
로 설정합니다.act.fct
는 활성화 함수를 지정합니다. 기본적으로 로지스틱 함수입니다.likelihood
가 TRUE
이면 오차 함수가 음의 로그 우도와 동등하면 정보량 표준의 AIC와 BIC가 계산됩니다.
그런 다음 gwplot
에서 각 공변량의 목적 변수에 대한 Generalized Weight를 플롯합니다.
> par(mfrow = c(1,3))
> gwplot(net.infert, selected.covariate="parity", max=3.5, min=-2)
> gwplot(net.infert, selected.covariate="parity", max=3.5, min=-2)
> gwplot(net.infert, selected.covariate="induced", max=3.5, min=-2)
> gwplot(net.infert, selected.covariate="spontaneous", max=3.5, min=-2)
Generalized Weight는 공변량이 목표 변수에 미치는 영향도를 나타냅니다. 0 부근에 모이는 경우는 너무 영향을 주지 않는 것을 나타냅니다.spontaneous
는 다른 것에 비해 영향도가 큰 것일지도 모릅니다.
마지막으로 confidence.interval
에서 Generalized Weight의 신뢰 구간과 NIC를 계산합니다.
confidence.interval(net.infert)
$lower.ci
$lower.ci[[1]]
$lower.ci[[1]][[1]]
[,1]
[1,] 0.2378732931
[2,] -0.7767930421
[3,] -5.6821658449
[4,] -8.7671639096
$lower.ci[[1]][[2]]
[,1]
[1,] -0.7548627922
[2,] -6.4897821363
$upper.ci
$upper.ci[[1]]
$upper.ci[[1]][[1]]
[,1]
[1,] 2.8480852032
[2,] 4.5389670051
[3,] 0.7944060804
[4,] 1.0157270261
$upper.ci[[1]][[2]]
[,1]
[1,] 4.3246718745
[2,] -0.7591746629
$nic
[1] 135.6941297
다음에 하고 싶은 일
R의 신경망 패키지는 그 밖에도 「 nnet 」라고 하는 것이 있기 때문에, 다음은 그것을 만져 보자고 생각합니다.
참고
Reference
이 문제에 관하여(R의 신경망 패키지 「neuralnet」을 사용해 본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shskwmt/items/65a7f1bca2e8e31b378d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
> data(infert, package="datasets")
> infert
education age parity induced case spontaneous stratum pooled.stratum
1 0-5yrs 26 6 1 1 2 1 3
2 0-5yrs 42 1 1 1 0 2 1
3 0-5yrs 39 6 2 1 0 3 4
4 0-5yrs 34 4 2 1 0 4 2
5 6-11yrs 35 3 1 1 1 5 32
6 6-11yrs 36 4 2 1 1 6 36
7 6-11yrs 23 1 0 1 0 7 6
8 6-11yrs 32 2 0 1 0 8 22
9 6-11yrs 21 1 0 1 1 9 5
10 6-11yrs 28 2 0 1 0 10 19
11 6-11yrs 29 2 1 1 0 11 20
12 6-11yrs 37 4 2 1 1 12 37
13 6-11yrs 31 1 1 1 0 13 9
14 6-11yrs 29 3 2 1 0 14 29
15 6-11yrs 31 2 1 1 1 15 21
16 6-11yrs 27 2 2 1 0 16 18
17 6-11yrs 30 5 2 1 1 17 38
18 6-11yrs 26 1 0 1 1 18 7
19 6-11yrs 25 3 2 1 1 19 28
20 6-11yrs 44 1 0 1 1 20 17
...(省略)
[ reached getOption("max.print") -- omitted 123 rows ]
net.infert <- neuralnet(case~parity+induced+spontaneous, infert, err.fct="ce", linear.output=FALSE, likelihood=TRUE)
> par(mfrow = c(1,3))
> gwplot(net.infert, selected.covariate="parity", max=3.5, min=-2)
> gwplot(net.infert, selected.covariate="parity", max=3.5, min=-2)
> gwplot(net.infert, selected.covariate="induced", max=3.5, min=-2)
> gwplot(net.infert, selected.covariate="spontaneous", max=3.5, min=-2)
confidence.interval(net.infert)
$lower.ci
$lower.ci[[1]]
$lower.ci[[1]][[1]]
[,1]
[1,] 0.2378732931
[2,] -0.7767930421
[3,] -5.6821658449
[4,] -8.7671639096
$lower.ci[[1]][[2]]
[,1]
[1,] -0.7548627922
[2,] -6.4897821363
$upper.ci
$upper.ci[[1]]
$upper.ci[[1]][[1]]
[,1]
[1,] 2.8480852032
[2,] 4.5389670051
[3,] 0.7944060804
[4,] 1.0157270261
$upper.ci[[1]][[2]]
[,1]
[1,] 4.3246718745
[2,] -0.7591746629
$nic
[1] 135.6941297
R의 신경망 패키지는 그 밖에도 「 nnet 」라고 하는 것이 있기 때문에, 다음은 그것을 만져 보자고 생각합니다.
참고
Reference
이 문제에 관하여(R의 신경망 패키지 「neuralnet」을 사용해 본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shskwmt/items/65a7f1bca2e8e31b378d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(R의 신경망 패키지 「neuralnet」을 사용해 본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shskwmt/items/65a7f1bca2e8e31b378d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)