タグ付けされた質問 「glmnet」

投げ縄および弾性ネットの正規化された一般化線形モデル用のRパッケージ。

3
glmnetを使用して投げ縄の結果を表示する方法
30個の独立変数のセットから連続従属変数の予測子を見つけたいです。R のglmnetパッケージに実装されているLasso回帰を使用しています。ダミーコードを次に示します。 # generate a dummy dataset with 30 predictors (10 useful & 20 useless) y=rnorm(100) x1=matrix(rnorm(100*20),100,20) x2=matrix(y+rnorm(100*10),100,10) x=cbind(x1,x2) # use crossvalidation to find the best lambda library(glmnet) cv <- cv.glmnet(x,y,alpha=1,nfolds=10) l <- cv$lambda.min alpha=1 # fit the model fits <- glmnet( x, y, family="gaussian", alpha=alpha, nlambda=100) res <- predict(fits, …

5
変数選択のためにRのlars(またはglmnet)パッケージからLASSOを使用する
この質問が少し基本的なものに遭遇した場合は申し訳ありません。 Rの多重線形回帰モデルにLASSO変数選択を使用したいと考えています。15の予測変数があり、そのうちの1つがカテゴリカルです(問題が発生しますか?)。とyを設定した後、次のコマンドを使用します。xxxyyy model = lars(x, y) coef(model) 私の問題は私が使用するときですcoef(model)。これにより、15行の行列が返され、毎回1つの追加の予測子が追加されます。ただし、どのモデルを選択するかについての提案はありません。私は何かを見逃しましたか?larsパッケージに「最高の」モデルを1つだけ返す方法はありますか? glmnet代わりに使用することを提案する他の投稿がありますが、これはより複雑に思えます。同じとyを使用した試みは次のとおりです。ここで何かを見逃していませんか?: xxxyyy cv = cv.glmnet(x, y) model = glmnet(x, y, type.gaussian="covariance", lambda=cv$lambda.min) predict(model, type="coefficients") 最後のコマンドは、変数のリストを返します。大部分は係数付きですが、一部は= 0です。これはLASSOが選択した「最良の」モデルの正しい選択ですか?次に、係数not=0を持つすべての変数で線形モデルを近似すると、係数推定値は非常に似ていますが、わずかに異なります。この違いの理由はありますか?LASSOによって選択されたこれらの変数で線形モデルを再調整し、それを最終モデルとして使用することは受け入れられますか?そうでない場合、有意性のp値を確認できません。見逃したことがありますか? する type.gaussian="covariance" それglmnetが複数の線形回帰を使用していることを確認しますか? 変数の自動正規化は係数にまったく影響しますか?LASSO手順に相互作用用語を含める方法はありますか? この手順は、重要な推論/予測に何らかの変更が加えられた場合に実際に使用されるモデルよりも、LASSOの使用方法のデモンストレーションとして使用したいと考えています。 これを読んでくれてありがとう。LASSO / lars / glmnetに関する一般的なコメントも歓迎します。

2
glmnetの解釈方法は?
約60の予測変数と30の観測値を持つ多変量線形回帰モデルを近似しようとしています。そのため、p> nであるため、正規化回帰にglmnetパッケージを使用しています。 私はドキュメントや他の質問を行ってきましたが、結果を解釈することはまだできません。サンプルコード(簡単にするために20の予測子と10の観測値を使用)を次に示します。 num rows = numの観測値とnum cols = numの予測子、および応答変数を表すベクトルyを含む行列xを作成します > x=matrix(rnorm(10*20),10,20) > y=rnorm(10) アルファをデフォルトのままにしてglmnetモデルに適合します(投げ縄ペナルティの場合= 1) > fit1=glmnet(x,y) > print(fit1) ラムダの値が減少すると異なる予測が得られることを理解しています(つまり、ペナルティ) Call: glmnet(x = x, y = y) Df %Dev Lambda [1,] 0 0.00000 0.890700 [2,] 1 0.06159 0.850200 [3,] 1 0.11770 0.811500 [4,] 1 0.16880 0.774600 . . . …

1
メチル化データのglmnetを使用した機能の選択とモデル(p >> N)
GLMとElastic Netを使用してそれらの関連機能を選択し、線形回帰モデルを構築します(つまり、予測と理解の両方であるため、比較的少ないパラメーターを残しておく方が良いでしょう)。出力は連続的です。それはだあたりの遺伝子例でした。私はパッケージについて読んでいますが、従うべき手順について100%確信が持てません。200002000020000505050glmnet CVを実行してラムダを選択します: cv <- cv.glmnet(x,y,alpha=0.5) (Q1)入力データが与えられたら、別のアルファ値を選択しますか? (Q2)モデルを構築する前に他に何かする必要がありますか? モデルに適合: model=glmnet(x,y,type.gaussian="covariance",lambda=cv$lambda.min) (Q3)「共分散」よりも優れているものはありますか? (Q4)ラムダがCVによって選択された場合、なぜこのステップが必要なのnlambda=ですか? (Q5)lambda.minまたはを使用する方が良いlambda.1seですか? 係数を取得して、どのパラメーターが抜けているか( "。")を確認します。 predict(model, type="coefficients") ヘルプページでは、多くがあるpredict方法(例えば、predict.fishnet、predict.glmnet、predict.lognet、など)。しかし、例で見たように、「プレーン」は予測します。 (Q6)またはその他を使用する必要がありますpredictかpredict.glmnet? 正則化方法について読んだことにもかかわらず、私はRとこれらの統計パッケージがまったく新しいので、問題をコードに適合させているかどうかを確認することは困難です。どんな提案も歓迎します。 UPDATE に基づいて、クラス列のオブジェクトがという要素が含まれ先に述べたように、」finalModelリサンプリングによって選択されたチューニングパラメータの値を装着したモデルで、このオブジェクトはことを使用して、新しいサンプルの予測を生成するために、伝統的な方法で使用することができますモデルの予測関数。」 caretアルファとラムダの両方を調整するために使用: trc = trainControl(method=cv, number=10) fitM = train(x, y, trControl = trC, method="glmnet") fitM前のステップ2を交換しますか?その場合、glmnetオプション(type.gaussian="naive",lambda=cv$lambda.min/1se)を今指定する方法は? そして、次predictのステップでは、私は置き換えることができますmodelにfitM? 私が行った場合 trc = trainControl(method=cv, number=10) fitM = train(x, y, trControl = trC, method="glmnet") …

2
glmnet ridge回帰が手動計算とは異なる答えを与えるのはなぜですか?
glmnetを使用して、リッジ回帰推定値を計算しています。glmnetが本当に思っていることを実際に行っているという点で、私は疑わしい結果になりました。これを確認するために、簡単なRスクリプトを作成し、solveとglmnetで行われたリッジ回帰の結果を比較しました。違いは重要です。 n <- 1000 p. <- 100 X. <- matrix(rnorm(n*p,0,1),n,p) beta <- rnorm(p,0,1) Y <- X%*%beta+rnorm(n,0,0.5) beta1 <- solve(t(X)%*%X+5*diag(p),t(X)%*%Y) beta2 <- glmnet(X,Y, alpha=0, lambda=10, intercept=FALSE, standardize=FALSE, family="gaussian")$beta@x beta1-beta2 違いの標準は通常20前後であり、これは数値的に異なるアルゴリズムが原因ではないため、何か間違ったことをしているに違いありません。glmnetridgeと同じ結果を得るために設定する必要がある設定は何ですか?

1
glmnetがZou&Hastieのオリジナルペーパーの「素朴な」弾性ネットを使用するのはなぜですか?
β *=(1+λ2) β。L=1n∥∥y−Xβ∥∥2+λ1∥β∥1+λ2∥β∥22,L=1n‖y−Xβ‖2+λ1‖β‖1+λ2‖β‖22,\mathcal L = \frac{1}{n}\big\lVert y - X\beta\big\rVert^2 + \lambda_1\lVert \beta\rVert_1 + \lambda_2 \lVert \beta\rVert^2_2,β^∗=(1+λ2)β^.β^∗=(1+λ2)β^.\hat\beta^* = (1+\lambda_2)\hat\beta. しかし、その後のglmnet論文Friedman、Hastie、&Tibshirani(2010)座標降下による一般化線形モデルの正則化パスは、この再スケーリングを使用せず、次のような簡単な脚注しかありませんでした。 Zou and Hastie(2005)は、このペナルティを単純なエラスティックネットと呼び、エラスティックネットと呼ばれる再スケーリングされたバージョンを好みました。ここでこの区別を削除します。 そこ(またはHastie et al。の教科書のいずれか)にはこれ以上の説明はありません。やや不可解です。著者は、それがあまりにもアドホックだと考えたため、再スケーリングを省いたのですか?さらなる実験でパフォーマンスが悪化したためですか?GLMケースに一般化する方法が明確ではなかったからですか?何も思いつきません。しかし、いずれにせよglmnetそれ以降、このパッケージは非常に人気を博したため、最近ではZou&Hastieからのリスケーリングを使用している人はいないようで、ほとんどの人はおそらくこの可能性に気付いていません。 質問:結局のところ、これは良いアイデアですか、悪いアイデアですか? でglmnetパラメータ化、再スケーリングゾウ&Hastieはする必要がありますβ^∗=(1+λ(1−α))β^.β^∗=(1+λ(1−α))β^.\hat\beta^* = \big(1+\lambda(1-\alpha)\big)\hat\beta.

3
相互作用用語を含むLASSO-主効果がゼロに縮小されても大丈夫ですか?
LASSO回帰は係数をゼロに向けて縮小するため、効果的にモデルを選択できます。私のデータには、名義共変量と連続共変量の間に意味のある相互作用があると思います。ただし、必ずしも真のモデルの「主効果」が意味がある(ゼロ以外)わけではありません。もちろん、本当のモデルは不明なので、私はこれを知りません。私の目的は、真のモデルを見つけ、可能な限り密接に結果を予測することです。 モデル構築の古典的なアプローチには、相互作用が含まれる前に主効果が常に含まれることがわかった。したがって、同じモデル内に共変量相互作用がある場合、2つの共変量と主効果のないモデルは存在できません。結果として、この関数は 、この規則に従うモデル用語(例えば、後方または前方AICに基づいて)を慎重に選択します。バツバツXZZZバツ* Zバツ∗ZX*ZstepR LASSOの動作は異なるようです。すべてのパラメーターにペナルティが課されるため、主効果がゼロに縮小されるのに対し、最良の(たとえば、相互検証された)モデルの相互作用はゼロではないことは間違いありません。これは、特にRのglmnetパッケージを使用しているときにデータに見られます。 上記の最初のルールに基づいて批判を受けました。つまり、最終的な交差検証されたLassoモデルには、非ゼロ相互作用の対応する主効果項が含まれていません。しかし、この文脈ではこの規則はやや奇妙に思えます。結局のところ、真のモデルのパラメーターがゼロかどうかという問題です。そうだと仮定しますが、相互作用はゼロではないので、LASSOはおそらくこれを識別し、正しいモデルを見つけます。実際、このモデルには実際にはノイズ変数である真のゼロの主効果が含まれていないため、このモデルからの予測はより正確になるようです。 この根拠に基づいて批判に反論することはできますか、それともLASSOには相互作用期間の前に主な効果が含まれることに何らかの注意を払う必要がありますか?

2
ラムダが、エラスティックネット回帰のラムダの推奨値である「最小値から1つの標準誤差以内」であるのはなぜですか?
エラスティックネット回帰でラムダが果たす役割を理解しています。そして、なぜ相互検証エラーを最小化するラムダ値であるlambda.minを選択するのかを理解できます。 私の質問は、統計文献のどこでlambda.1seを使用することを推奨していますか、それはCVエラーと1つの標準エラーを最小にするラムダの値ですか?正式な引用を見つけることも、これがしばしば良い値である理由を見つけることもできないようです。私はそれがより制限された正則化であり、パラメータをゼロに向かってより小さくすることを理解していますが、lambda.1seがlambda.minよりも良い選択である条件が常にあるとは限りません。誰かが説明を助けることができますか?

2
Elastic Net Logistic Regressionでの最適なアルファの選択
glmnetR のパッケージを使用して、0から1のグリッドでラムダ値を選択することにより、ヘルスケアデータセットに対してElastic-Netロジスティック回帰を実行しています。短縮コードは次のとおりです。αα\alpha alphalist <- seq(0,1,by=0.1) elasticnet <- lapply(alphalist, function(a){ cv.glmnet(x, y, alpha=a, family="binomial", lambda.min.ratio=.001) }) for (i in 1:11) {print(min(elasticnet[[i]]$cvm))} これは、からの増分でのアルファの各値の平均交差検証誤差を出力します。1.0 0.10.00.00.01.01.01.00.10.10.1 [1] 0.2080167 [1] 0.1947478 [1] 0.1949832 [1] 0.1946211 [1] 0.1947906 [1] 0.1953286 [1] 0.194827 [1] 0.1944735 [1] 0.1942612 [1] 0.1944079 [1] 0.1948874 私が文献で読んだものに基づいて、最適な選択は、cvエラーが最小化される場所です。しかし、アルファの範囲にわたってエラーには多くの変動があります。私はいくつかの局所的な最小値を見ていますが、グローバルな最小誤差はfor です。αα\alpha0.1942612alpha=0.8 一緒に行くのは安全alpha=0.8ですか?又は、変形所与、Iは、再実行する必要がありcv.glmnet、よりクロスバリデーションひだ(例えば、との代わりに)、または、おそらくより多くのの間のインクリメント及びCVエラーパスの鮮明な画像を取得しますか?10 α202020101010αα\alphaalpha=0.01.0

2
glmnetのキャレットトレーニング関数は、アルファとラムダの両方を相互検証しますか?
Rのいcaretの両方の上にパッケージクロス検証をalphaしてlambdaためglmnetのモデル?このコードを実行すると、 eGrid <- expand.grid(.alpha = (1:10) * 0.1, .lambda = (1:10) * 0.1) Control <- trainControl(method = "repeatedcv",repeats = 3,verboseIter =TRUE) netFit <- train(x =train_features, y = y_train, method = "glmnet", tuneGrid = eGrid, trControl = Control) トレーニングログは次のようになります。 Fold10.Rep3: alpha=1.0, lambda=NA どういうlambda=NA意味ですか?

1
このなげなわプロット(glmnet)の結論
以下は、mtcarsRのデータセットをmpgDVとして、その他を予測子変数として使用して、デフォルトのalpha(1、したがってlasso)を使用したglmnetのプロットです。 glmnet(as.matrix(mtcars[-1]), mtcars[,1]) さまざまな変数、特にam、cylおよびwt(赤、黒、水色の線)に関するこのプロットから何を結論付けることができますか?公開するレポートの出力をどのように表現しますか? 私は次のことを考えました: wtはの最も重要な予測因子ですmpg。に悪影響を及ぼしていmpgます。 cylは弱い負の予測因子ですmpg。 amはの正の予測因子である可能性がありmpgます。 他の変数は、のロバストな予測子ではありませんmpg。 これについてのあなたの考えをありがとう。 (注:cyl非常に近いまで0に到達しない黒い線です。) 編集:以下はplot(mod、xvar = 'lambda')であり、x軸を上記のプロットの逆順に表示します。 (PS:この質問がおもしろい/重要だと思う場合は、賛成してください。)

1
キャレットと係数(glmnet)
キャレットを使用して、特定のデータセットの推論を行うことに興味があります。以下を行うことは可能ですか? キャレットでトレーニングしたglmnetモデルの係数を生成します。glmにあるとは思わないので、固有の機能選択のためにglmnetを使用したいと思いますか? ROCメトリック以外に、モデルの適合を評価するために利用できる別のメトリックはありますか?調整済み?R2R2R^2 この分析の目的は、予測ではなく、特定の変数の影響に関する推論を導き出すことです。キャレットパッケージは、これまでマトリックスを使用して簡単に操作できたため、気に入っています。
19 caret  glmnet 

2
GLMNETからの変数の重要性
機能を選択し、予測モデルをバイナリターゲットに適合させる方法として投げ縄を使用することを検討しています。以下は、正規化されたロジスティック回帰でメソッドを試すために遊んでいたコードです。 私の質問は、「重要な」変数のグループを取得することですが、それぞれの相対的な重要性を推定するためにこれらを順序付けすることはできますか?この目的のために係数を絶対値でランク付けすることはできますか(coef関数を介して元の変数スケールで表示されることを理解しています)?その場合、その方法(xとyの標準偏差を使用)回帰係数を標準化します。 サンプルコード: library(glmnet) #data comes from #http://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Diagnostic) datasetTest <- read.csv('C:/Documents and Settings/E997608/Desktop/wdbc.data.txt',head=FALSE) #appears to use the first level as the target success datasetTest$V2<-as.factor(ifelse(as.character(datasetTest$V2)=="M","0","1")) #cross validation to find optimal lambda #using the lasso because alpha=1 cv.result<-cv.glmnet( x=as.matrix(dataset[,3:ncol(datasetTest)]), y=datasetTest[,2], family="binomial", nfolds=10, type.measure="deviance", alpha=1 ) #values of lambda used histogram(cv.result$lambda) #plot of …

5
cv.glmnetの結果のばらつき
cv.glmnet予測子を見つけるために使用しています。私が使用するセットアップは次のとおりです。 lassoResults&lt;-cv.glmnet(x=countDiffs,y=responseDiffs,alpha=1,nfolds=cvfold) bestlambda&lt;-lassoResults$lambda.min results&lt;-predict(lassoResults,s=bestlambda,type="coefficients") choicePred&lt;-rownames(results)[which(results !=0)] 作るために必ず結果が再現可能Iですset.seed(1)。結果は大きく変わります。まったく同じコード100を実行して、結果がどの程度変動するかを確認しました。98/100の実行では、1つの特定の予測子が常に選択されていました(時にはそれだけで); 通常は50/100回、他の予測変数が選択されました(係数はゼロ以外)。 だから、クロス検証が実行されるたびに、おそらくフォールドの最初のランダム化が重要であるため、異なる最良のラムダを選択するだろうと私に言います。他の人はこの問題を見ました(CV.glmnet結果)が、提案された解決策はありません。 私はおそらく、98/100を示すものはおそらく他のすべてと非常に高い相関関係があると考えていますか?LOOCV()を実行するだけで結果は安定しますが、\ text {nfold} &lt;nの場合になぜこれらの変数が変動するのか興味があります。fold-size=nfold-size=n\text{fold-size} = nnfold&lt;nnfold&lt;n\text{nfold} < n

1
ネストされた交差検証後に最終モデルを構築し、確率しきい値を調整する方法は?
まず、ここで、ここで、ここで、ここで、ここで、ここで詳細に議論されている質問を投稿することに対する謝罪、および古いトピックの再加熱用。@DikranMarsupialがこのトピックについて長々と投稿やジャーナルペーパーで書いていることは知っていますが、私はまだ混乱しており、ここにある同様の投稿の数から判断すると、他の人がまだ把握するのに苦労しています。また、このトピックに関して矛盾が生じたため、混乱を招いたことも述べておく必要があります。また、私はもともと物理学者であり統計学者ではないことも知っておく必要があります。そのため、ここでの私の専門知識はやや限られています。ネストされたCVを使用して、最終モデルに期待できるパフォーマンスを推定するジャーナルペーパーを書いています。私のドメインでは、これが最初です。(ほとんど使用しません私の分野では堅牢なCVの形ですが、ニューラルネットとブーストされた決定木を使用した研究の結果を含む論文を喜んで送り出します!)したがって、私が非常に徹底的かつ明確な理解を持っていることが重要です。私のコミュニティへの誤った手順は、何年も学ぶことができませんでした!ありがとう!質問を続けて... ネストされた交差検証後に最終モデルを作成するにはどうすればよいですか? L1とL2の正規化を使用した単純なglmnetモデルをトレーニングしています。それは高速で、シンプルで、解釈可能です。特徴の中心化、スケーリング、およびBox-Cox変換を実行して、特徴の分布が平均中心で標準化されており、ガウスに似ていることを確認します。情報漏えいを防ぐため、この手順は相互検証内で実行します。純粋に私のハードウェアが非常に遅いため、CPUの負荷を増やすことができないため、機能の前処理後にCV内で高速のフィルターベースの機能選択を実行します。ランダムグリッド検索を使用して、アルファおよびラムダハイパーパラメーターを選択しています。私はすべきではないことを理解していますこの推定値を取得するCVループ。内部CVループはモデル選択(この場合、最適なハイパーパラメーター)に使用され、外部ループはモデル評価に使用されること、つまり、内部CV ループと外部CVはしばしば誤って混同される2つの異なる目的を果たすことを理解しています。(私はこれまでどのようにやっていますか?) さて、私が投稿したリンクは、「相互検証を考える方法は、モデルのパフォーマンスを推定するのではなく、モデルを構築する方法を使用して得られたパフォーマンスを推定することだ」と示唆しています。それを考えると、ネストされたCV手順の結果をどのように解釈する必要がありますか? 私が読んだアドバイスは次のことを示しているようです-これが間違っている場合は修正してください:内側のCVは、glmnetモデルの最適なアルファおよびラムダハイパーパラメーターを選択できるメカニズムの一部です。外側のCVは、ハイパーパラメーターの調整やデータセット全体を使用して最終モデルを構築するなど、内側CVで使用されている手順とまったく同じ手順を適用すると、最終モデルから得られると予想される推定値を示します。つまり、ハイパーパラメーターの調整は「モデルの構築方法」の一部です。これは正しいですか?これは私を混乱させるものだからです。他の場所では、展開する最終モデルを構築する手順には、固定値を使用したデータセット全体のトレーニングが含まれることがわかりましたCVを使用して選択されたハイパーパラメーターの。ここで、「モデルの構築方法」にはチューニングは含まれていません。それで、どちらですか?ある時点で、最適なハイパーパラメーターが選択され、最終モデルを構築するために修正されます!どこ?どうやって?内側のループが5倍のCVで、外側のループが5倍のCVで、内側のCVでのランダムグリッド検索の一部としてテスト用に100ポイントを選択した場合、実際にglmnetを何回トレーニングしますかモデル?(100 * 5 * 5)+ 1(最終ビルド用)、または私が知らないステップが他にありますか? 基本的に、ネストされたCVからパフォーマンスの見積もりを解釈する方法と、最終モデルを構築する方法について、非常に明確な説明が必要です。 また、最終的なglmnetモデルからの確率スコアを(バイナリ)クラスラベルに変換するための確率しきい値を選択するための適切な手順を知りたい--- CVの別のループが必要ですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.