R でのなげなわ回帰
LASSO 回帰は、単純なモデルでスパースと縮小を使用する分類アルゴリズムです。 このチュートリアルでは、R で投げ縄回帰を実行する方法を示します。
R でのなげなわ回帰
LASSO
は、Least Absolute Shrinkage and Selection Operator と略されます。 モデル選択の特定の部分を自動化したい場合、高レベルの多重共線性を示す投げ縄回帰が適しています。
なげなわ回帰は二次計画問題であり、R や Matlab などの言語が解決策を提供します。 R でなげなわ回帰を解決するための段階的なプロセスを見てみましょう。
方程式を理解する
Lasso 回帰は、次の関数を最小化します。
RSS + λΣ|βj|
ここで、j
は 1 から予測変数までの範囲であり、λ ≥ 0
、第 2 項 λΣ|βj|
収縮ペナルティとして知られています。
RSS = Σ(Yi – ŷi)2
。ここで、Σ
は合計、yi
は ith
オブザベーションの実際の応答値、ŷi
は予測される応答値です。
ラムダは、なげなわ回帰で何を行うかがわかれば、なげなわ回帰で可能な最小の検定平均分隊誤差 (MSE) として選択されます。
次のステップでデータをロードしましょう。
データをロードする
この例では、mtcars
データセットを使用してみましょう。 hp
は応答変数として使用され、mpg, drat, wt, qsec
は予測変数として使用されます。
glmnet
パッケージを使用して、なげなわ回帰を実行できます。 データを読み込んでみましょう。
# glmnet package requires to define response variable
x <- mtcars$hp
# glmnet package requires to define matrix of predictor variables
y <- data.matrix(mtcars[, c('mpg', 'wt', 'drat', 'qsec')])
データが読み込まれたら、次は LASSO 回帰モデルを当てはめます。
LASSO 回帰モデルの当てはめ
このステップでは、glmnet()
関数を使用して LASSO 回帰モデルを当てはめます。 LASSO 回帰モデルのアルファは 1 に設定されます。 ラムダの値を決定するために k 分割交差検証が実行され、glmnet
を使用すると、k= 10
分割で自動的に交差検証が実行されます。
glmnet
パッケージがまだインストールされていない場合は、インストールする必要があるかもしれません。 例を参照してください:
# k-fold cross-validation to find lambda value
cv_model <- cv.glmnet(x, y, alpha = 1)
#lambda value that minimizes test MSE
best_lambda <- cv_model$lambda.min
best_lambda
# plot the model
plot(cv_model)
上記のコードは、LASSO 回帰モデルに適合し、最適なラムダ値とモデル プロットを示しています。
テスト MSE を最小化するラムダ値は次のとおりです。
[1] 2.01841
LASSO 回帰モデル プロット:
LASSO 回帰モデルの分析
モデルを分析するということは、モデルの係数を示すことができるということです。 モデルの係数は次のとおりです。
# Coefficients of the model
coef(cv_model)
コードの出力は次のようになります。
5 x 1 sparse Matrix of class "dgCMatrix"
s1
(Intercept) 418.277928
mpg -4.379633
wt .
drat .
qsec -10.286483
最適なラムダ値はわかっています。 モデルをフィッティングする際に、glmnet
関数への引数として最適なラムダ値をバイパスして、最適なモデルを作成することもできます。
ご覧のとおり、予測変数 wt
と drat
の係数は表示されていません。これは、なげなわ回帰によってそれらが 0 に縮小されたためです。これが、それらがモデルから削除された理由です。
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook