교차검증
현재 가지고 있는 데이터를 훈련데이터와 검증데이터로 나누어 모델은 훈련데이터로만 만들고 나머지는 검증데이터로 미래에 만나게 될 데이터로 간주한다. 그리고 훈련데이터와 검증데이터를 서로 맞바꾸어 다시 테스트한다. 이러한 방식으로 검증하는 것을 교차검증이라 한다.
자주 사용되는 방법으로는 K-fold 교차검증 방법이 많이 사용된다.
K-fold 교차검증은 데이터를 K개의 집합으로 나누어 한 개의 집합을 제외하고 나머지를 이용해서 모형을 적합한다. 그리고 제외했던 한 개의 집합으로 검정오차를 계산한다. 이 과정을 k개 집합 모두에 반복해 적용한다.
k의 숫자로는 보통 5 또는 10을 사용한다. k=10이면 10개의 검정오차가 생성되며 이를 다시 평균을 내어 사용한다.
패키지 불러오기
library(tidyverse)
library(ggplot2)
파일 불러오기
autoparts <- read.csv("C:/Users/user/Desktop/JBTP/autoparts.csv", header=T)
dim(autoparts)
## [1] 34139 17
autoparts1 <- autoparts[autoparts$prod_no=="90784-76001", -c(1:7)]
dim(autoparts1)
## [1] 21779 10
autoparts2 <- autoparts1[autoparts1$c_thickness < 1000, ]
dim(autoparts2)
## [1] 21767 10
k-fold CV 데이터 나누기
t_index <- sample(1:nrow(autoparts2), size=nrow(autoparts2))
split_index <- split(t_index, 1:10)
## Warning in split.default(t_index, 1:10): data length is not a multiple of
## split variable
class(split_index)
## [1] "list"
split_index[[1]]
## [1] 12495 468 18215 15585 16314 9728 16938 21171 6019 4400 1300
## [12] 14917 4705 10082 9310 2063 4076 10133 14420 3223 16454 16468
## [23] 10649 2158 4118 2220 4832 19329 16988 20336 8072 14877 19312
## [34] 16814 11979 14831 1722 4568 634 8449 10687 16496 2669 13807
## [45] 15093 18483 8387 17073 10715 979 1096 2334 12392 18677 14883
## [56] 11597 6028 5885 8697 1868 16875 20030 18452 529 13859 13341
## [67] 1317 12036 14440 1595 6660 777 6530 914 16088 18498 21183
## [78] 9866 8768 13212 7247 2495 18604 19477 9529 10976 9616 2628
## [89] 13595 4968 7066 20304 18109 680 344 18861 11112 5998 1183
## [100] 12694 20860 2573 7636 21735 18449 15666 19600 7339 15851 11654
## [111] 17841 6398 11632 5517 15162 7581 19215 3798 12688 1831 2747
## [122] 17588 17268 6433 13258 2630 1591 20963 11617 15041 7037 17669
## [133] 10093 7876 747 18195 11550 17478 4426 7225 951 15024 11919
## [144] 10057 18333 13839 16976 18406 13114 6898 814 7179 12575 3292
## [155] 5614 15191 4935 12251 18588 14878 14087 14315 13185 3664 19084
## [166] 13798 20712 20634 13113 12187 11341 8978 5940 11474 3363 9953
## [177] 7356 7368 21200 15075 14036 16536 8682 20877 18162 14601 21513
## [188] 17370 7157 21597 16366 15483 20648 19507 10812 672 6653 5713
## [199] 9414 19186 5680 4268 18920 619 11240 16957 1442 1121 17417
## [210] 20805 17273 2972 20383 15476 12014 5002 10558 2733 6950 20528
## [221] 9458 13127 19635 19025 1939 7348 9033 1325 15530 13776 2592
## [232] 20724 13067 4934 6585 6403 3991 4117 10048 1162 3181 9400
## [243] 4821 8689 11433 17736 6613 2451 7189 5934 5023 2166 1208
## [254] 12714 14689 989 1751 17859 10604 15519 14936 10746 1489 4044
## [265] 6533 9637 563 7896 12745 11920 1 10230 8732 21046 8022
## [276] 21298 4680 17616 16510 18619 7757 10916 2995 1038 14640 20404
## [287] 21054 15614 16507 21311 2001 18623 482 17788 935 20848 5224
## [298] 17537 6337 21360 13703 20275 18536 3155 5962 11479 8267 7738
## [309] 1977 2553 18322 12354 9358 12840 11584 10701 15329 18390 17905
## [320] 10962 5619 192 5343 11299 13298 15176 21088 4625 14522 2455
## [331] 1664 18977 3537 19933 12551 21107 15609 20239 15909 7390 15098
## [342] 7830 16099 17032 14209 10233 4888 3378 14049 19042 10451 9713
## [353] 4133 20944 20800 7048 21181 20238 6617 6425 16432 17972 4415
## [364] 11719 13273 18439 3540 12185 2687 1573 3166 17275 8277 19674
## [375] 9023 3544 14914 10331 20623 2390 751 8987 18330 15376 6636
## [386] 17668 14357 8248 5892 12043 10389 9325 17302 9918 6793 16052
## [397] 11742 5187 13592 7226 15622 5524 6320 12231 17461 14227 16347
## [408] 3800 12781 15591 1681 9619 21405 5120 9968 6854 12175 18926
## [419] 17966 15066 5564 16002 20047 20309 5642 2968 9982 4860 12045
## [430] 9957 324 3983 3924 20615 10523 6815 10559 13380 6073 1072
## [441] 21033 2223 6795 3460 1174 14306 15789 11160 20414 12930 132
## [452] 20499 21764 2588 14765 21135 21652 6349 4740 821 11148 723
## [463] 6552 19709 10121 15000 12827 2604 16379 15606 15760 1197 12183
## [474] 17879 3692 19716 20181 10966 5951 10710 14624 20130 14898 12756
## [485] 5657 6405 17890 8763 16246 15601 11605 787 19080 8824 5447
## [496] 7656 2647 13742 7670 2149 1746 18825 19261 18373 6003 8257
## [507] 21481 20736 15048 739 14779 10765 6696 1646 6744 11501 14216
## [518] 12454 11294 5226 20847 17369 17527 13938 7818 19040 14443 11445
## [529] 9105 18033 14119 18966 4216 3246 18344 13102 17964 3556 21115
## [540] 13230 3918 19607 16556 5253 20241 2251 14204 9563 19046 15473
## [551] 5052 18230 52 14433 5212 1882 8361 7334 6193 7387 5777
## [562] 9403 2075 6168 8125 18113 1967 10205 4551 9104 20011 3787
## [573] 2338 9140 17164 8275 17250 1661 11777 21395 13463 10618 17549
## [584] 6881 6034 18336 7180 4487 21295 20355 18615 3623 10309 771
## [595] 16179 11559 8294 17427 18274 3111 11994 17245 13951 3469 3988
## [606] 2167 11766 14172 11410 12639 20370 15497 3110 10081 15698 10921
## [617] 12807 581 21085 19253 19725 14073 562 1963 7534 10981 19914
## [628] 8821 11656 17700 14301 14709 14060 7167 2195 6159 286 20347
## [639] 1559 14704 21539 2141 12071 5506 7843 6656 19476 17845 11467
## [650] 19627 17851 7405 9701 15226 21227 9718 3752 10099 16954 3294
## [661] 17925 11570 3707 6513 7873 15225 13699 4684 16170 6645 10049
## [672] 7374 4892 9061 21480 724 5148 17001 20149 14181 20770 3590
## [683] 11081 3464 16792 5514 13268 6245 12934 9038 14578 6247 21062
## [694] 372 1425 4020 8181 4209 13679 5281 7627 13149 9946 1744
## [705] 20159 18269 6863 11880 11454 12587 2942 15518 18342 5552 9121
## [716] 7911 19680 4648 14113 1687 4411 18936 5624 5617 19941 14280
## [727] 2340 10946 5930 14048 13314 4628 8065 7657 8203 12762 5722
## [738] 12270 17079 4480 21199 4630 12025 13501 8949 3434 19280 20808
## [749] 5105 14128 12529 1657 7609 9201 6516 5875 21057 16443 3263
## [760] 772 21244 5172 2789 3805 2877 16850 12163 5779 139 10501
## [771] 19178 6262 10783 9002 20900 8690 17981 21350 15750 19946 3385
## [782] 19957 9252 17708 6098 6126 17276 5523 15030 18715 15364 21002
## [793] 9058 10355 3006 18826 20685 17090 1609 18437 894 11566 12786
## [804] 6917 375 469 17508 8530 12939 10490 19177 5755 2811 19911
## [815] 18340 7249 8969 736 4094 3296 1569 16001 6263 9420 2354
## [826] 18560 19217 19076 3767 8589 12566 2993 14604 18499 2091 11577
## [837] 19589 19366 6328 19881 15299 17345 20012 8115 16864 14732 3178
## [848] 12955 15875 9535 11703 1495 19563 10845 19303 16765 17356 10155
## [859] 13941 2970 159 9389 18120 4685 8840 20713 20282 18119 16140
## [870] 8345 19265 16292 1302 19307 12133 6621 6526 19481 15975 16273
## [881] 1042 9016 6981 5813 7574 2191 416 12301 21324 15986 18294
## [892] 14270 16287 19343 5776 6286 21732 19856 14653 19885 415 9288
## [903] 767 17057 21457 20103 19390 11565 7855 1689 8140 2773 2537
## [914] 20998 20316 2062 5180 18386 11079 10060 1757 4012 9677 11320
## [925] 10837 16939 20783 13647 3975 4536 13231 20869 11932 19195 6546
## [936] 1209 8130 11162 13339 13709 8171 1773 5113 1260 7772 21393
## [947] 15360 21760 14496 11808 18309 5034 13150 19952 17259 3754 2496
## [958] 3525 2766 15902 14429 13652 20081 18672 12441 4388 20132 11412
## [969] 10105 11009 1363 2221 16831 20696 21432 5804 21636 741 21235
## [980] 6944 16973 8211 18249 20950 9008 10932 5701 10960 17089 15290
## [991] 12355 7759 11930 4891 6334 10679 870 11922 3523 6887 18000
## [1002] 675 21081 14463 15300 10225 7263 19059 15076 17239 12589 21079
## [1013] 10478 14533 11323 2668 8725 6521 16389 12665 5334 15366 17017
## [1024] 16232 21385 2674 128 19750 13994 19119 9446 6850 14814 9120
## [1035] 8803 3912 18476 850 16963 17460 6429 12223 6130 3346 9408
## [1046] 18960 10256 17060 6484 2546 15156 13967 9741 13943 13179 6717
## [1057] 15321 11765 16182 21157 14023 9598 17117 6158 20263 6090 5553
## [1068] 18702 13844 12669 8772 21701 10875 13768 4378 19063 2174 20818
## [1079] 18303 20631 18822 5857 1769 5971 8079 4456 18130 3781 4874
## [1090] 21745 12602 19371 3903 11745 1365 19173 6105 12177 17416 9920
## [1101] 8129 6787 14874 13207 11282 12090 1062 19923 17204 14282 7213
## [1112] 6038 592 10842 18530 19274 19870 6788 5572 18313 338 18893
## [1123] 10406 2578 8844 14171 4342 16245 10387 3287 1519 15817 2836
## [1134] 14774 12410 18242 12888 14030 20546 14190 1361 13472 9393 153
## [1145] 6532 16497 5966 13441 19373 5328 11028 2106 15427 17170 18014
## [1156] 10222 3002 7012 9178 1712 6539 12226 17670 5679 19023 19058
## [1167] 1088 2073 5992 11980 16110 4570 9199 21128 7444 21511 15713
## [1178] 13894 13992 13398 9026 13118 19439 472 1518 15745 11277 21266
## [1189] 20163 5832 9504 16235 9209 12662 3059 14328 18742 19966 11046
## [1200] 580 18343 10713 11732 15883 1430 5164 4293 1445 10320 848
## [1211] 13550 3715 19269 3665 3625 18872 4980 16469 19888 14419 10678
## [1222] 17579 19414 17124 2940 1190 15881 7754 8875 10201 19902 10091
## [1233] 13603 24 7269 8526 13058 17105 9049 5475 19141 19278 10170
## [1244] 6661 2523 10174 8948 21222 18837 5558 665 17201 11002 1267
## [1255] 15604 3555 1243 8414 8863 3799 12865 15568 13841 3774 14641
## [1266] 3877 3987 2034 5101 21552 11753 13278 17311 6480 3099 14355
## [1277] 12128 639 9775 20611 112 9134 13248 6376 13767 17087 6201
## [1288] 6848 7140 17834 11531 21500 10059 8368 8073 13633 21309 15668
## [1299] 13377 19330 892 5195 10168 8818 14852 15365 9509 10130 12685
## [1310] 2502 11059 86 19456 1511 21289 8998 18761 18295 4356 21585
## [1321] 9574 5897 6416 12341 13232 13551 19363 10359 8020 9301 9029
## [1332] 1450 6749 18147 15003 17274 13413 20867 6482 10896 9068 20073
## [1343] 5508 7647 6144 8565 8427 17715 17347 1733 5811 8165 3628
## [1354] 3167 20991 21073 983 3496 11690 9299 2017 6252 18308 6420
## [1365] 18244 20331 19183 16016 11489 9185 21607 19843 6916 6447 6355
## [1376] 1370 227 16400 2311 1220 8904 12581 16869 12740 21630 12451
## [1387] 10705 17515 19842 7202 14081 19006 763 20842 8315 13947 8350
## [1398] 17437 4255 968 7620 19794 21646 9074 15977 18823 2734 21102
## [1409] 15050 70 17865 18321 4675 2838 21690 19197 7685 11936 1052
## [1420] 14647 13431 731 18280 20205 6225 15641 14925 10115 11752 13653
## [1431] 11403 11934 19848 14454 8639 13188 2831 12725 5445 3565 18144
## [1442] 14910 6537 20269 3732 13986 16721 5230 13683 1301 8871 12056
## [1453] 10299 3187 494 2644 2779 928 20189 8214 1299 12269 19038
## [1464] 9113 7948 10474 18223 3392 12144 2246 5094 8039 18821 10103
## [1475] 10067 4636 16097 503 14706 14617 20739 2077 21096 10321 13297
## [1486] 20678 2412 21308 11187 13950 7624 13518 7401 12719 20060 17876
## [1497] 918 1273 4337 16320 5191 8120 2848 3142 11444 623 8648
## [1508] 15069 4817 10619 17585 7221 12752 500 4105 334 18257 6386
## [1519] 15762 184 21450 12657 13014 18179 1465 12661 14365 20918 12509
## [1530] 6700 1520 13840 15302 19542 1848 6590 11120 15161 421 19504
## [1541] 4424 10504 2168 43 1343 11510 9695 4867 6415 20437 6684
## [1552] 2530 21759 20913 1286 6362 17543 19273 7787 9395 20459 13829
## [1563] 2511 2994 4932 12040 18289 11023 11588 16534 11721 412 18323
## [1574] 5032 7908 14556 9923 2404 20272 7765 19354 9118 19175 5284
## [1585] 9204 17007 5513 17796 19349 1482 659 18537 11773 14499 16624
## [1596] 5041 4716 20111 9790 9459 10248 2248 205 1949 1161 6136
## [1607] 7109 1463 12359 1512 14350 5732 19112 8536 721 6345 12910
## [1618] 1948 77 6021 18874 20052 16930 6356 14404 14452 21452 9001
## [1629] 12722 11194 19529 12487 7473 8454 13706 12452 18561 856 15655
## [1640] 14367 6919 6911 6032 5327 14340 591 36 5838 2411 11908
## [1651] 5663 16936 11464 4174 14397 14304 18703 4945 9948 8237 4658
## [1662] 4087 4158 3779 16909 17169 11085 8810 13611 12240 16947 6374
## [1673] 8416 1296 2843 12798 13649 8216 9944 16905 11513 10044 9429
## [1684] 6747 15525 602 9806 20124 20781 20054 11007 9602 21586 8628
## [1695] 2160 8751 11169 12638 10953 12472 20198 13610 1091 8995 187
## [1706] 19174 17765 12248 11574 21683 16790 3617 12216 3240 10670 21304
## [1717] 4203 16686 16720 15665 12253 18744 8740 13753 15536 14991 16290
## [1728] 19625 1122 21665 11679 15351 18432 3203 14911 21436 16447 1785
## [1739] 4621 9922 11268 20537 10145 12937 12206 5587 4319 13223 14818
## [1750] 7729 2392 21300 749 17538 17887 19162 10695 1458 10000 13553
## [1761] 20823 18701 17701 1290 9275 13280 17945 19785 13026 11242 1581
## [1772] 19021 4650 3618 9977 17586 19133 15696 2098 13110 1895 11319
## [1783] 645 10176 11848 20578 4725 16780 14557 260 11334 4098 1419
## [1794] 10116 7586 7630 2018 3327 11771 17695 2906 2115 13395 12265
## [1805] 3458 8409 20010 20626 3428 16974 9279 3487 4417 4682 2946
## [1816] 20846 7141 15104 20367 2010 5588 5096 16637 21375 11483 8738
## [1827] 21565 14800 1414 10156 14106 11343 1476 5985 923 6466 5533
## [1838] 17867 8610 5222 16363 14964 2335 1107 19703 5964 7285 10272
## [1849] 12465 11163 3035 4910 11418 21575 15469 5486 7607 442 21343
## [1860] 16542 3893 16396 584 19535 2646 7110 6861 3519 16562 7099
## [1871] 9665 21533 12590 9280 19970 7239 16 11000 9867 1528 6099
## [1882] 14143 11303 5192 17775 11291 20747 5130 6203 14583 14582 8928
## [1893] 14223 8557 18402 11907 9508 6599 6868 19407 272 422 14888
## [1904] 10973 13581 1375 7638 7665 12896 8622 8489 14208 20933 14016
## [1915] 12890 9926 3031 1457 15096 13599 19109 12052 15502 19333 16492
## [1926] 17144 5953 4399 7393 7043 6142 19908 9712 9475 13173 17753
## [1937] 6194 18603 9895 4412 19921 9755 466 4422 12311 15645 5264
## [1948] 20338 8264 19020 7042 11942 1564 7813 14971 3852 1031 17583
## [1959] 16133 6618 2347 282 6288 4334 21716 21374 21416 13303 2786
## [1970] 16042 7135 19193 9993 15051 6604 18686 5820 21382 8741 6563
## [1981] 9792 17455 12821 1372 2066 14037 12750 6994 17612 13896 9848
## [1992] 9859 8404 14646 2067 21121 20262 9219 12370 14785 19775 10408
## [2003] 611 11821 6648 13752 3860 10457 8594 2330 3295 7363 9233
## [2014] 6283 18929 6364 7867 1241 6216 5123 4915 1345 11095 21610
## [2025] 21721 9158 3589 19485 12573 21070 9515 17235 6100 2464 3569
## [2036] 17830 6955 3302 6297 9954 18076 4635 13073 12683 10500 10132
## [2047] 3407 14745 11075 7422 4826 1233 6460 18709 11812 9789 4336
## [2058] 11206 11795 7714 9615 14448 19360 8036 9094 21681 17172 19284
## [2069] 2265 5107 1523 8774 13624 12880 1987 13416 21570 3997 10124
## [2080] 8391 10399 21126 1130 19829 13358 6988 428 19617 2090 16508
## [2091] 2850 21519 13424 3613 5515 12421 9880 19585 10268 126 13594
## [2102] 10640 4512 3236 16014 20015 18584 7300 16610 6051 8466 18493
## [2113] 18204 16180 13708 18072 8133 18562 4544 17931 18881 2561 21571
## [2124] 5346 18292 13056 10189 15315 6930 7530 16518 6669 6550 19545
## [2135] 21331 19331 11387 21613 5256 19070 11915 6895 15182 406 21172
## [2146] 5427 21504 7592 575 2465 17112 14687 8789 21624 12233 12362
## [2157] 16767 4760 2772 3812 3016 7905 17926 9550 16630 2376 7210
## [2168] 14751 19530 10520 21077 1872 18197 3219 6242 9441 1814
k-fold CV 수행
mse <- c() # 데이터를 받을 빈 벡터
for(i in 1:10){
test <- autoparts2[split_index[[i]],] # autoparts2 데이터에서 1번 인텍스 그룹의 인덱스드를 행 번호로 가져온다
train <- autoparts2[-split_index[[i]],] # 위의 인덱스들을 제외한 다른 인덱스드를 행 번호로 가져온다
m <- lm(c_thickness ~ ., data=train) # train 데이터로 선형회귀 모델을 만든다
m_pred <- predict(m, test) # test 데이터를 예측한다
mse[i] <- mean((test$c_thickness - m_pred)^2) # 실제값고 예측값의 차이로 오차를 구하고 평균낸다
}
mse
## [1] 3.507259 3.077891 3.624700 3.414246 3.223821 2.895874 3.067102
## [8] 3.114147 3.294302 3.318973
mean(mse)
## [1] 3.253831
# k-fold CV 가 아닌 한번만 성능평가하는 경우
t_index <- sample(1:nrow(autoparts2), size=nrow(autoparts2)*0.7)
train <- autoparts2[t_index, ]
test <- autoparts2[-t_index, ]
nrow(train); nrow(test)
## [1] 15236
## [1] 6531
m <- lm(c_thickness ~ ., data=train)
m_pred <- predict(m, test)
mean((test$c_thickness - m_pred)^2)
## [1] 3.052115