교차검증


패키지 불러오기
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