신경망의 학습 결과는 학습시킨 데이터에 따라서 많이 달라지게 됩니다. 당연히 원하는 결과를 얻으려면 알맞는 데이터를 학습시켜야 합니다. 여기서는 다이아몬드 예제에서 1만 달러가 넘는 다이아몬드의 가격을 더 정확히 예측하는 것이 목표라고 가정하고 1만 달러가 넘는 다이아몬드를 학습 데이터에 많이 포함시켜보겠습니다.
set.seed(1234)
diamonds2<-sample 800="" diamonds1="" nrow="" replace="FALSE)</span">-sample>
diamonds2<-diamonds1 diamonds2="" span="">-diamonds1>
diamonds3<-subset diamonds1="" price="">10000)-subset>
set.seed(1234)
diamonds4<-sample 200="" diamonds3="" nrow="" replace="FALSE)</span">-sample>
diamonds4<-diamonds3 diamonds4="" span="">-diamonds3>
diamonds5<-rbind diamonds2="" diamonds4="" span="">-rbind>
set.seed(1234)
n = nrow(diamonds5)
train <- 900="" n="" sample="" span="">->
test <- diamonds5="" span="" train="">->
train <- diamonds5="" span="" train="">->
f<-price2 carat2="" color2="" cut2="" span="">-price2>
fit<-neuralnet f="" span="">-neuralnet>
data=train,
hidden=c(3,3,3),
algorithm = "rprop+",
err.fct = "sse",
act.fct = "logistic",
threshold = 0.1,
stepmax=1e7,
linear.output = TRUE)
pred<-compute c="" carat2="" color2="" cut2="" fit="" span="" test="">-compute>
result1<-cbind net="" pred="" span="" test="">-cbind>
result1$price3=pred$net*sd(train$price)+mean(train$price)
result1[,c("price","price3")]
result1$price4=result1$price-result1$price3
mean(result1$price4);sd(result1$price4)
result2=subset(result1, price>10000)
result2
mean(result2$price4);sd(result2$price4)
데이터 전처리를 통해 800개의 샘플은 그냥 수집하고 200개는 1만 달러가 넘는 집단에서 뽑아서 하나로 합쳤습니다. 나머지는 코드는 그대로 동일한데, 마지막에 result2를 통해 1만 달러가 넘는 경우를 따로 뽑은 것입니다.
> result1$price4=result1$price-result1$price3
> mean(result1$price4);sd(result1$price4)
[1] -3004.491525
[1] 2672.829038
>
> result2=subset(result1, price>10000)
> result2
price carat cut2 color2 price2 carat2 pred$net price3 price4
4 15428 2.26 3 4 2.881407173 3.0844421296 3.081619450 22478.01842 -7050.0184201
13 15485 2.00 3 3 2.895694894 2.5359319348 2.997435762 22023.97741 -6538.9774121
14 16532 2.47 3 6 3.158137760 3.5274695946 3.096604897 22558.84176 -6026.8417645
23 16733 2.01 4 4 3.208520774 2.5570284807 3.007765902 22079.69257 -5346.6925689
26 15783 2.27 3 4 2.970392099 3.1055386755 3.083801098 22489.78504 -6706.7850420
30 12791 1.71 2 4 2.220412103 1.9241321021 2.078183587 17066.03140 -4275.0314049
34 10076 2.52 0 3 1.539865415 3.6329523244 3.099342356 22573.60613 -12497.6061308
36 15312 2.00 2 4 2.852330409 2.5359319348 2.822225689 21078.98962 -5766.9896243
38 10316 1.15 4 2 1.600024238 0.7427255287 1.003786500 11271.31816 -955.3181609
58 10913 2.24 3 4 1.749669311 3.0422490377 3.077025504 22453.24118 -11540.2411754
62 12150 1.13 4 0 2.059737912 0.7005324368 1.867727109 15930.94368 -3780.9436808
68 15079 1.53 2 2 2.793926218 1.5443942750 2.101720217 17192.97518 -2113.9751800
69 13196 1.54 2 0 2.321930117 1.5654908209 2.436366257 18997.87382 -5801.8738150
72 16100 2.31 3 6 3.049851878 3.1899248593 2.980002382 21929.95125 -5829.9512487
79 14359 2.10 3 6 2.613449748 2.7468973943 2.299409546 18259.20385 -3900.2038460
80 16657 2.21 3 2 3.189470480 2.9789593998 3.050175342 22308.42601 -5651.4260111
81 11737 1.71 2 0 1.956214604 1.9241321021 2.636600061 20077.82600 -8340.8259975
82 13675 2.00 3 6 2.441997102 2.5359319348 2.215612407 17807.24767 -4132.2476722
83 13221 1.73 3 4 2.328196661 1.9663251940 2.292362747 18221.19724 -5000.1972435
84 10833 2.00 3 3 1.729616370 2.5359319348 2.997435762 22023.97741 -11190.9774121
85 15145 2.01 2 5 2.810469894 2.5570284807 2.310738782 18320.30758 -3175.3075801
86 10359 1.31 4 3 1.610802694 1.0802702640 1.230782925 12495.61336 -2136.6133564
87 11846 1.09 4 2 1.983536736 0.6161462530 1.134730477 11977.55872 -131.5587182
88 10177 1.21 4 2 1.565182253 0.8693048045 1.826376913 15707.92323 -5530.9232250
89 11184 1.18 4 1 1.817598649 0.8060151666 1.487940757 13882.58277 -2698.5827653
90 17353 1.93 3 4 3.363931068 2.3882561131 2.811410554 21020.65867 -3667.6586717
91 13034 1.50 4 3 2.281322911 1.4811046371 2.156912621 17490.65297 -4456.6529692
92 13165 1.20 4 0 2.314159602 0.8482082585 2.053136435 16930.94070 -3765.9406959
93 14294 1.51 3 2 2.597156733 1.5022011831 2.460649863 19128.84637 -4834.8463742
94 18215 2.09 2 5 3.580001508 2.7258008484 3.094804962 22549.13389 -4334.1338926
95 15510 2.00 2 5 2.901961438 2.5359319348 2.314235717 18339.16814 -2829.1681446
96 15520 2.01 3 5 2.904468055 2.5570284807 2.997021421 22021.74268 -6501.7426842
97 13609 1.72 3 4 2.425453425 1.9452286481 2.295478682 18238.00290 -4629.0029002
98 12939 2.27 4 5 2.257510044 3.1055386755 3.079126925 22464.57509 -9525.5750925
99 10389 1.27 3 3 1.618322547 0.9958840802 1.512744487 14016.36059 -3627.3605876
100 16813 1.71 3 3 3.228573715 1.9241321021 2.625187272 20016.27162 -3203.2716221
> mean(result2$price4);sd(result2$price4)
[1] -5208.207308
[1] 2757.611139
>
결과는 의외로 다이아몬드의 가격을 과대 평가하는 것으로 나타났습니다. 비교를 위해 샘플을 별도로 뽑지 않았을 때를 보겠습니다.
> result2=subset(result1, price>10000)
> result2
price carat cut2 color2 price2 carat2 pred$net price3 price4
4 15428 2.26 3 4 2.881407173 3.0844421296 3.1022028017 16419.509200 -991.50920004
13 15485 2.00 3 3 2.895694894 2.5359319348 3.0119402536 16055.074975 -570.07497528
14 16532 2.47 3 6 3.158137760 3.5274695946 2.9974045163 15996.387067 535.61293325
23 16733 2.01 4 4 3.208520774 2.5570284807 3.2033568661 16827.917824 -94.91782366
26 15783 2.27 3 4 2.970392099 3.1055386755 3.1106627080 16453.665996 -670.66599567
30 12791 1.71 2 4 2.220412103 1.9241321021 1.8884862416 11519.139522 1271.86047812
34 10076 2.52 0 3 1.539865415 3.6329523244 2.2320297131 12906.193194 -2830.19319361
36 15312 2.00 2 4 2.852330409 2.5359319348 2.3617131319 13429.788829 1882.21117145
38 10316 1.15 4 2 1.600024238 0.7427255287 0.8681213901 7399.425626 2916.57437427
58 10913 2.24 3 4 1.749669311 3.0422490377 3.0850028618 16350.064598 -5437.06459769
62 12150 1.13 4 0 2.059737912 0.7005324368 1.0233657257 8026.223232 4123.77676770
68 15079 1.53 2 2 2.793926218 1.5443942750 1.9785069077 11882.597151 3196.40284937
69 13196 1.54 2 0 2.321930117 1.5654908209 2.5229419644 14080.748787 -884.74878739
72 16100 2.31 3 6 3.049851878 3.1899248593 2.8330181342 15332.678530 767.32146993
87 17153 2.02 3 5 3.313798715 2.5781250267 2.6798192610 14714.139459 2438.86054056
90 12339 1.88 2 4 2.107112986 2.2827733833 2.1827474975 12707.216692 -368.21669201
> mean(result2$price4);sd(result2$price4)
[1] 330.3268325
[1] 2397.554842
> set.seed(1234)
되려 별도 샘플링을 하지 않고 학습시킨 결과가 더 좋았습니다. 아무래도 비싼 다이아몬드를 많이 포함시켜 학습시키면 신경망이 높은 가격을 추정하도록 유도하는 것으로 보입니다. 이렇게 데이터를 따로 샘플링하는 것은 도움이 될 때도 있지만, 반대로 더 결과가 나쁘게 나타날 가능성도 있어 상황에 따라 사용해야 합니다. 아무튼 그 때마다 예상치 못한 결과가 나온다는 점에서 신경망 공부가 재미있는 것 같습니다.
댓글
댓글 쓰기