データの読み込み
library(haven) library(tidyr) # データの読み込みと前処理 auto <- haven::read_dta("http://www.stata-press.com/data/r9/auto.dta") auto <- auto %>% drop_na() # 全カラムに対してNAがない行を抽出 # foreign列を整数に変換 auto$foreign <- as.integer(auto$foreign)
Repeated Cross-Validation
今回は反復する回数は5回とする。CVは10-folds CVである。
library(caret) library(glmnet) # Repeated Cross-Validationの設定 train_control <- trainControl(method = "repeatedcv", number = 10, # 10-fold CV repeats = 5, # 5回繰り返す savePredictions = "final") # モデルのトレーニング # ここではLasso回帰を使用します set.seed(1234) # 再現性のためにシードを設定 model <- train(price ~ ., data = data, method = "glmnet", # Lasso回帰 trControl = train_control, tuneLength = 10) # チューニングするλの数 # 結果の表示 print(model)
結果。
alpha lambda RMSE Rsquared MAE 0.1 0.7319366 2172.731 0.5345322 1724.796 0.1 1.6908685 2172.612 0.5345867 1724.689 0.1 3.9061255 2167.976 0.5358454 1722.416 0.1 9.0236566 2158.419 0.5381330 1717.774 0.1 20.8458171 2141.015 0.5422838 1709.301 0.1 48.1565412 2116.551 0.5477001 1695.475 0.1 111.2478560 2091.649 0.5514065 1673.781 0.1 256.9969762 2076.358 0.5530661 1657.743 0.1 593.6963476 2092.925 0.5468544 1667.867 0.1 1371.5155653 2212.723 0.4975051 1748.373 0.2 0.7319366 2172.998 0.5344045 1724.968 0.2 1.6908685 2172.624 0.5345481 1724.719 0.2 3.9061255 2167.953 0.5357744 1722.321 0.2 9.0236566 2158.282 0.5379781 1717.522 0.2 20.8458171 2140.590 0.5419675 1708.791 0.2 48.1565412 2116.157 0.5470411 1694.713 0.2 111.2478560 2093.224 0.5502683 1672.889 0.2 256.9969762 2075.162 0.5588031 1653.243 0.2 593.6963476 2106.534 0.5494364 1674.988 0.2 1371.5155653 2288.420 0.4609894 1796.900 0.3 0.7319366 2173.041 0.5343446 1724.890 0.3 1.6908685 2172.606 0.5344999 1724.601 0.3 3.9061255 2167.933 0.5356630 1722.262 0.3 9.0236566 2158.055 0.5377639 1717.272 0.3 20.8458171 2140.105 0.5415694 1708.210 0.3 48.1565412 2115.786 0.5462188 1693.860 0.3 111.2478560 2092.528 0.5507689 1671.027 0.3 256.9969762 2074.072 0.5642413 1648.889 0.3 593.6963476 2137.586 0.5398603 1695.951 0.3 1371.5155653 2371.668 0.4231520 1855.134 0.4 0.7319366 2172.697 0.5344509 1724.602 0.4 1.6908685 2172.479 0.5345117 1724.463 0.4 3.9061255 2167.907 0.5355449 1722.127 0.4 9.0236566 2157.854 0.5375603 1716.983 0.4 20.8458171 2139.793 0.5411379 1707.610 0.4 48.1565412 2115.751 0.5452555 1692.932 0.4 111.2478560 2090.338 0.5526852 1667.736 0.4 256.9969762 2072.588 0.5693255 1644.587 0.4 593.6963476 2173.900 0.5233768 1722.213 0.4 1371.5155653 2464.452 0.3775686 1940.869 0.5 0.7319366 2172.642 0.5344182 1724.502 0.5 1.6908685 2172.407 0.5344885 1724.323 0.5 3.9061255 2167.686 0.5354816 1721.861 0.5 9.0236566 2157.583 0.5373831 1716.566 0.5 20.8458171 2139.537 0.5406928 1706.981 0.5 48.1565412 2115.681 0.5442536 1691.907 0.5 111.2478560 2085.874 0.5564143 1662.697 0.5 256.9969762 2071.608 0.5734574 1640.467 0.5 593.6963476 2203.360 0.5082108 1739.720 0.5 1371.5155653 2498.658 0.3719754 1967.258 0.6 0.7319366 2172.497 0.5344172 1724.329 0.6 1.6908685 2172.286 0.5344803 1724.181 0.6 3.9061255 2167.728 0.5353476 1721.811 0.6 9.0236566 2157.452 0.5371615 1716.226 0.6 20.8458171 2139.352 0.5402056 1706.346 0.6 48.1565412 2115.680 0.5433202 1690.660 0.6 111.2478560 2080.725 0.5612795 1656.830 0.6 256.9969762 2073.144 0.5750081 1638.312 0.6 593.6963476 2237.021 0.4915271 1756.991 0.6 1371.5155653 2531.469 0.3699134 1987.697 0.7 0.7319366 2172.461 0.5343807 1724.199 0.7 1.6908685 2172.253 0.5344407 1724.064 0.7 3.9061255 2167.693 0.5352218 1721.716 0.7 9.0236566 2157.399 0.5369035 1715.927 0.7 20.8458171 2139.373 0.5396455 1705.814 0.7 48.1565412 2115.100 0.5430456 1688.703 0.7 111.2478560 2076.074 0.5663182 1651.203 0.7 256.9969762 2079.140 0.5736223 1642.348 0.7 593.6963476 2283.728 0.4664951 1788.860 0.7 1371.5155653 2571.380 0.3640320 2012.981 0.8 0.7319366 2172.528 0.5343206 1724.221 0.8 1.6908685 2172.306 0.5344116 1724.067 0.8 3.9061255 2167.608 0.5351161 1721.511 0.8 9.0236566 2157.325 0.5366400 1715.622 0.8 20.8458171 2139.414 0.5390641 1705.349 0.8 48.1565412 2114.068 0.5431456 1686.997 0.8 111.2478560 2072.864 0.5697503 1646.708 0.8 256.9969762 2091.357 0.5686686 1652.525 0.8 593.6963476 2342.409 0.4357670 1830.901 0.8 1371.5155653 2616.034 0.3587737 2040.894 0.9 0.7319366 2172.437 0.5343131 1724.120 0.9 1.6908685 2172.293 0.5343682 1724.007 0.9 3.9061255 2167.553 0.5350031 1721.353 0.9 9.0236566 2157.358 0.5363452 1715.356 0.9 20.8458171 2139.651 0.5384207 1704.966 0.9 48.1565412 2112.804 0.5434166 1685.214 0.9 111.2478560 2070.925 0.5724896 1643.506 0.9 256.9969762 2108.613 0.5610137 1667.080 0.9 593.6963476 2410.748 0.3985741 1885.829 0.9 1371.5155653 2666.638 0.3531022 2072.156 1.0 0.7319366 2172.475 0.5342543 1724.113 1.0 1.6908685 2172.237 0.5343390 1723.928 1.0 3.9061255 2167.528 0.5348901 1721.213 1.0 9.0236566 2157.375 0.5360697 1715.047 1.0 20.8458171 2140.068 0.5377146 1704.638 1.0 48.1565412 2111.733 0.5437407 1683.385 1.0 111.2478560 2069.836 0.5744960 1640.555 1.0 256.9969762 2127.980 0.5515914 1683.542 1.0 593.6963476 2472.551 0.3667350 1940.606 1.0 1371.5155653 2717.911 0.3392152 2104.782 RMSE was used to select the optimal model using the smallest value. The final values used for the model were alpha = 1 and lambda = 111.2479.
各チューニングパラメータであるalphaとlambdaに対するモデルの性能指標が表示されている。
- RMSE (Root Mean Squared Error): モデルの予測値と実測値の誤差の平方根平均。値が小さいほど、モデルの予測精度が高いことを意味する。
- R-squared (決定係数): モデルがデータの分散をどれだけ説明しているかを示す指標。値が1に近いほど、モデルの説明力が高いことを意味する。
- MAE (Mean Absolute Error): モデルの予測値と実測値の誤差の絶対値の平均。値が小さいほど、モデルの予測精度が高いことを意味する。
RMSEが最も小さい値を使用して最適モデルが選択されており、alpha = 1およびlambda = 111.2479となった。 これをベストラムダとして推定を行う。
# 最適なλを表示 best_lambda <- model$bestTune$lambda print(paste("最適なλ: ", best_lambda)) # 変数の重要度を表示 importance <- varImp(model, scale = FALSE) print(importance)
結果。
Overall foreign 2881.029 headroom 429.862 rep78 125.392 turn 24.730 displacement 13.589 weight 1.876 length 0.000 trunk 0.000 gear_ratio 0.000 mpg 0.000