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

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

2
ロジスティックモデルのRMSE(二乗平均平方根誤差)
RMSE(二乗平均平方根誤差)を使用してさまざまなロジスティックモデルを比較することの妥当性について質問があります。応答のいずれかである0か1との予測が間確率でありますか0- 1? 以下に適用される方法は、バイナリ応答でも有効ですか? # Using glmnet require(glmnet) load(url("https://github.com/cran/glmnet/raw/master /data/BinomialExample.RData")) cvfit = cv.glmnet(x, y, family = "binomial", type.measure = "mse") A <- predict(cvfit, newx = x, s = "lambda.min", type = "response") RMSE1 <- mean((y - A)^2) # 0.05816881 # glm mydata <- read.csv("https://stats.idre.ucla.edu/stat/data/binary.csv") mydata$rank <- factor(mydata$rank) mylogit <- glm(admit ~ …

1
どちらがより正確なglmまたはglmnetですか?
R glmとglmnetは異なるアルゴリズムを使用します。 両方を使用すると、推定された係数間に重要な違いがあることに気づきました。 どちらがより正確であるか、そして解決/精度のトレードオフの時間に興味があります。 具体的には、glmnet stでlambda = 0を設定した場合について言及しています。これは、glmと同じことを推定しています。

1
cv.glmnet(RでのLASSO回帰)との相互検証を行う方法は?
Rでglmnetを使用してLASSOモデルを適切にトレーニングおよびテストする方法を知りたいのですが? 具体的には、外部テストデータセットがないために交差検証(または他の同様のアプローチ)を使用してLASSOモデルをテストする必要がある場合に、どうすればよいのかと思います。 私のシナリオを分解してみましょう: glmnetモデルに通知してトレーニングするデータセットは1つだけです。その結果、モデルをテストする方法を生成するために、データを分割するために交差検証を使用する必要があります。 私はすでに使用cv.glmnetしていますが、パッケージの詳細によると: glmnetのk分割交差検証を実行し、プロットを生成して、ラムダの値を返します。 交差検証はcv.glmnet、最良のラムダを選択するためだけに実行されますか、それともより一般的な交差検証手順としても機能していますか? 言い換えれば、モデルを「テスト」するために別の相互検証ステップを実行する必要がありますか? 私は「そうです」という前提で作業しています。 その場合、モデルをクロス検証する方法はありcv.glmnetますか? 手動で行う必要がありますか、それともこのcaret関数はglmnetモデルに役立ちますか? ?私は、クロスバリデーションの二つの同心「ループ」を使用しています...ドゥ私は経由CVの「内部ループ」を使用してcv.glmnet最良のラムダ値を決定するために内の各k個のk倍クロスバリデーション処理の「外部ループ」のひだ? すでに相互検証しているcv.glmnetモデルの相互検証を行う場合cv.glmnet、交差検証のその他の「外部ループ」の各フォールド内の各モデルから(「最良の」ラムダ値から)「最良の」モデルを分離するにはどうすればよいですか? 注:「最良の」モデルは、最小値の1 SE以内のMSEを生成するラムダに関連付けられたモデルとして定義しています。これはモデル$lambda.1se内のcv.glmnetです。 環境: 木の直径( "D")、D ^ 2、および種( "factor(SPEC)")に基づいて樹齢( "age")を予測しようとしています。[結果の方程式:Age ~ D + factor(SPEC) + D^2]。私は約5万行のデータを持っていますが、データは縦方向であり(時間を通じて個人を追跡します)、約65種で構成されています。

1
ジェネリックオプティマイザーを使用したglmnet線形回帰の結果の複製
タイトルが示すように、ライブラリのLBFGSオプティマイザーを使用して、glmnet linearの結果を複製しようとしていますlbfgs。このオプティマイザーを使用すると、目的関数(L1レギュラライザー項なし)が凸型である限り、微分可能性について心配する必要なくL1レギュラライザー項を追加できます。 弾性正味線形回帰問題glmnet紙はによって与えられる ここで、X∈RN×pは計画行列であり、Y∈RのPは、観測値のベクトルであり、αは∈[0、1]弾性ネットパラメータであり、λ>0は正則化パラメーターです。オペレータ‖X‖pは、通常のLPノルムを表します。minβ∈Rp12n∥β0+Xβ−y∥22+αλ∥β∥1+12(1−α)λ∥β∥22minβ∈Rp12n‖β0+Xβ−y‖22+αλ‖β‖1+12(1−α)λ‖β‖22\min_{\beta \in \mathbb{R}^p} \frac{1}{2n}\Vert \beta_0 + X\beta - y \Vert_2^2 + \alpha \lambda \Vert \beta\Vert_1 + \frac{1}{2}(1-\alpha)\lambda\Vert\beta\Vert^2_2X∈Rn×pX∈Rn×pX \in \mathbb{R}^{n \times p}y∈Rpy∈Rpy \in \mathbb{R}^pα∈[0,1]α∈[0,1]\alpha \in [0,1]λ>0λ>0\lambda > 0∥x∥p‖x‖p\Vert x \Vert_p 以下のコードは関数を定義し、結果を比較するためのテストを含みます。ご覧のとおり、結果はで許容可能alpha = 1ですが、次のプロットが示すように、alpha < 1.からalpha = 1に行くにつれてエラーが悪化しalpha = 0ます(「比較メトリック」はglmnetのパラメーター推定値間の平均ユークリッド距離です)および特定の正則化パスのlbfgs)。 さて、これがコードです。可能な限りコメントを追加しました。私の質問は:なぜ私の結果はglmnetの値の結果と異なるのalpha < 1ですか?それは明らかにL2正則化用語と関係がありますが、私が知る限り、この用語を論文のとおり正確に実装しました。どんな助けでも大歓迎です! library(lbfgs) linreg_lbfgs <- function(X, y, alpha …

1
Rでの投げ縄回帰の交差検証
R関数cv.glm(ライブラリ:ブート)は、一般化線形モデルの推定K分割交差検定予測誤差を計算し、デルタを返します。なげなわ回帰(ライブラリ:glmnet)にこの関数を使用することには意味がありますか?その場合、どのように実行できますか?glmnetライブラリは、交差検証を使用して最適な回転パラメーターを取得しますが、最終的なglmnet方程式を交差検証する例は見つかりませんでした。

1
glmnetは過剰分散をどのように処理しますか?
カウントデータに対してテキストをモデル化する方法、特にこの機能を使用してlasso機能を削減する方法について質問があります。 オンライン記事がN個あり、各記事のページビュー数があるとします。記事ごとに1グラムと2グラムを抽出しましたが、1,2グラムに対して回帰を実行したいと思いました。特徴(1,2グラム)は観測数よりもはるかに多いため、なげなわは特徴の数を減らすための良い方法です。また、glmnetなげなわ分析を実行するのに本当に便利であることがわかりました。 しかし、ページビューのカウント数は、(分散>平均)overdispersedされていますが、glmnet提供していませんquasipoisson(明示的)またはnegative binomialが、poissonカウントデータについて。私が考えた解決策はlog transform、カウントデータ(社会科学者の間で一般的に使用される方法)であり、応答変数をほぼ正規分布に従うようにすることです。そのため、を使用して、ガウスファミリーでデータをモデル化できglmnetます。 だから私の質問は、そうすることは適切ですか?または、glmnetケースglmnetハンドルにpoissonを使用しますquasipoissonか?または、他のRパッケージがこの状況を処理しますか? どうもありがとうございました!

3
ロジスティック回帰:真陽性の最大化-偽陽性
ロジスティック回帰モデル(エラスティックネット正則化を備えたRのglmnetを介してフィット)があり、真陽性と偽陽性の差を最大化したいと思います。これを行うために、次の手順が思い浮かびました: 標準ロジスティック回帰モデルに適合 予測しきい値を0.5として使用して、すべての正の予測を特定する 正に予測された観測値に重み1を割り当て、その他すべてに0を割り当てます 重み付きロジスティック回帰モデルのあてはめ このアプローチの欠点は何でしょうか?この問題を解決する正しい方法は何でしょうか? 真陽性と偽陰性の数の差を最大化したい理由は、アプリケーションの設計によるものです。クラスプロジェクトの一環として、私はオンラインマーケットプレイスで自律的な参加者を構築しています。私のモデルが何かを購入して後でより高い価格で販売できると予測した場合、入札を行います。ロジスティック回帰に固執し、固定費と単価の増分に基づいてバイナリの結果(勝ち、負け)を出力したいと思います(すべてのトランザクションで同じ金額を増減します)。誤検知は、私が何かを購入し、それをより高い価格で販売することができないことを意味するため、私を傷つけます。しかし、偽陰性は私に害を及ぼすことはありません(機会費用の点でのみ)。それは、私が購入しなかったというだけのことですが、もし持っていたなら、私はお金を稼いだでしょう。同様に、 0.5のカットオフは完全に任意であり、真/偽陽性の差が最も大きくなる予測しきい値でステップ1のモデルを最適化すると、0.4に近づくことがわかります。これは私のデータの歪んだ性質によるものだと思います-ネガティブとポジティブの比率は約1:3です。 現在、私は次の手順に従っています: データをトレーニング/テストに分割 トレーニングにモデルを適合させ、テストセットで予測を行い、真陽性と偽陽性の差を計算します モデルを完全にフィットさせ、テストセットで予測を行い、真陽性と偽陽性の差を計算します トレーニングセットがフルセットのサブセットであるにもかかわらず、ステップ#3の真/偽陽性の差は、ステップ#2よりも小さくなります。#3のモデルの真のネガティブが多く、偽ネガティブが少ないかどうかは気にしないので、尤度関数自体を変更せずにできることはありますか?

2
多項式でglmnetを実行するとエラーが発生する[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新することがありますので、上のトピッククロス検証済みのため。 8か月前に閉鎖。 この質問で言及されている問題は、Rパッケージglmnetのバージョン1.7.3で修正されています。 私はfamily = multinomialでglmnetを実行する際にいくつかの問題を抱えており、同様の何かに遭遇したり、私が間違っていることを教えたりできるのではないかと思っていました。 自分のダミーデータを入力すると、実行時に「apply(nz、1、median)のエラー:dim(X)は正の長さでなければなりません」というエラーが表示されますcv.glmnet。私にとってあまり有益ではありませんでした。 y=rep(1:3,20) #=> 60 element vector set.seed(1011) x=matrix(y+rnorm(20*3*10,sd=0.4),nrow=60) # 60*10 element matrix glm = glmnet(x,y,family="multinomial") #=> returns without error crossval = cv.glmnet(x,y,family="multinomial") #=> Error in apply(nz, 1, median) : dim(X) must have a positive length crossval = cv.glmnet(x,y,family="multinomial",type.measure="class") #=> Error in apply(nz, …
9 r  multinomial  glmnet 

3
glmnetを使用する場合、予測子の有意性を主張するためにp値の有意性を報告する方法は?
2つの値(0または1)を取ることができる従属変数を予測するための予測子の大規模なセット(43,000以上)があります。観測数は45,000以上です。ほとんどの予測子は、単語のユニグラム、バイグラム、およびトライグラムであるため、それらの間には高い共線性があります。私のデータセットにも多くのスパース性があります。私が持っている種類のデータセットで機能するglmnetパッケージからのロジスティック回帰を使用しています。私の問題は、予測変数のp値の有意性をどのように報告できるかです。ベータ係数を取得しましたが、ベータ係数が統計的に有意であると主張する方法はありますか? これが私のコードです: library('glmnet') data <- read.csv('datafile.csv', header=T) mat = as.matrix(data) X = mat[,1:ncol(mat)-1] y = mat[,ncol(mat)] fit <- cv.glmnet(X,y, family="binomial") もう1つの質問は、デフォルトのalpha = 1、投げ縄ペナルティを使用しているため、2つの予測子が同一線上にある場合、投げ縄がそれらの1つをランダムに選択し、他に0のベータ重みを割り当てるという追加の問題を引き起こします。また、類似性の高い係数を、相関係数の1つを選択するのではなく、それらに割り当てるリッジペナルティ(alpha = 0)を試しました。ただし、なげなわペナルティモデルでは、リッジペナルティモデルよりもはるかに低い逸脱度が得られます。共線性が非常に高い両方の予測子を報告できる他の方法はありますか?

4
すべての係数を0に縮小する投げ縄を解釈する方法は?
Lassoを使用して特徴選択を実行している338個の予測子と570個のインスタンス(残念ながらアップロードできません)のデータセットがあります。特に、次のcv.glmnetfrom関数を使用しglmnetています。ここmydata_matrixで、は570 x 339のバイナリマトリックスで、出力もバイナリです。 library(glmnet) x_dat <- mydata_matrix[, -ncol(mydata_matrix)] y <- mydata_matrix[, ncol(mydata_matrix)] cvfit <- cv.glmnet(x_dat, y, family='binomial') このプロットは、すべての変数がモデルから削除されたときに最小の逸脱が発生することを示しています。これは本当に、インターセプトを使用するだけで、単一の予測子を使用するよりも結果を予測しやすいのか、それともおそらくデータまたは関数呼び出しで誤りを犯したのか? これは前の質問と似ていますが、何も返答がありませんでした。 plot(cvfit)

1
変数係数は上昇し、ラムダが減少するにつれて減少します(LASSO)
LASSO(glmnet)を使用して、60以上の変数(連続およびカテゴリーの両方)で連続予測子を回帰しています。 変数トレースプロットを調べると、対数ラムダが増加すると、主要な変数の1つに実際に増加する係数があることがわかります。その後、ある時点を過ぎると、予想したように減少し始めます。 これがまぐれでないことを確認するために、私はブートストラップを使用して10モデルを実行し、非常に類似した結果を得ました。 これは可能ですか、それともデータに問題がありますか?正当な場合、変数の係数のこの傾向は、変数と応答との関係について何を教えてくれますか?

2
誰かがglmnetのfoldid引数が何をするか説明できますか?
関数で使用するアルファを決定しようとしglmnetていますが、ヘルプファイルに次のように記載されています。 cv.glmnetはアルファの値を検索しないことに注意してください。特定の値を指定する必要があります。指定しない場合、デフォルトでalpha = 1と見なされます。ユーザーがアルファも交差検証したい場合は、事前に計算されたベクトルfoldidを使用してcv.glmnetを呼び出し、次にこの同じフォールドベクトルを異なるアルファ値のcv.glmnetへの呼び出しで使用する必要があります。 しかし、私は理解していません: foldid vector / argumentとは何ですか。 foldidベクトルの作成方法 foldid引数の使用方法。 これでどんな援助でも大歓迎です!

2
glmnetは
最適値を選択するための一つの基準弾性ネットまたは類似献上回帰では、範囲に対するずれのプロットを調べることである選択し逸脱が最小化される場合(またはの1つの標準誤差以内最小)。λ λ λλλ\lambdaλλ\lambdaλλ\lambdaλλ\lambda ただし、表示されるプロットはに対する逸脱をプロットした結果にまったく似ていないため、正確に何がglmnet表示されるかを理解するのは困難です。plot.cv.glmnetλλ\lambda set.seed(4567) N <- 500 P <- 100 coefs <- NULL for(p in 1:P){ coefs[p] <- (-1)^p*100*2^(-p) } inv.logit <- function(x) exp(x)/(1+exp(x)) X <- matrix(rnorm(N*P), ncol=P, nrow=N) Y <- rbinom(N, size=1, p=inv.logit(cbind(1, X)%*%c(-4, coefs))) plot(test <- cv.glmnet(x=X, y=Y, family="binomial", nfolds=10, alpha=0.8)) plot(log(test$lambda), deviance(test$glmnet.fit)) 2番目のプロットにはエラスティックネットペナルティが組み込まれておらず、垂直方向に誤ってスケーリングされているようです。値が大きい場合の曲線の形状は出力の形状に似ているという根拠に基づいて、私は主張を基にしています。しかし、自分でペナルティを計算しようとした場合、私の試みも同様に非常に不正確に見えます。λλ\lambdaglmnet penalized.dev.fn <- function(lambda, …
8 r  glmnet 

2
glmnetでカテゴリ変数をグループ化する
次の適合を検討してください。 fit3a=glmnet(x,g4,family="multinomial",type.multinomial="grouped") どの列xがカテゴリー/多項式であるかを示すにはどうすればよいですか?グループ化された変数のインデックスを指定するオプションはありますか? ドキュメントでは、オプションtype.multinomialについて次のように説明しています。 「グループ化」されている場合、グループ化されたなげなわペナルティが変数の多項係数に使用されます。これにより、すべてが一緒に私たちの外にあります。デフォルトは「グループ化されていない」です。

2
切片はGLMnetでどのように計算されますか?
R以外のソフトウェアを使用して線形回帰用のGLMNETバージョンのエラスティックネットを実装してきました。糖尿病データの lassoモードでR関数glmnetと結果を比較しました。 変数の選択は、パラメーター(ラムダ)の値を変更する場合は問題ありませんが、係数の値が少し異なります。これと他の理由で、アルゴリズム全体で切片(ターゲット変数の平均と見なします)を変更しないので、現在の近似を計算するときの更新ループの切片に由来すると思います。 Trevor Hastieの記事(座標降下による一般化線形モデルの正則化パス、 7ページ、セクション2.6)で説明されています: 切片は正則化されていません。[...]ラムダのすべての値について[...] [L1制約パラメーター] しかし、この記事にもかかわらず、R関数glmnetは、正則化パスに沿った切片に異なる値を提供します(ラムダの異なる値)。傍受の値がどのように計算されるかについて誰かが手掛かりを持っていますか?

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