井出草平の研究ノート

反復交差検証 / Repeated Cross-Validationを用いたLasso[R]

データの読み込み

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