L1損失関数を使用してRの(ロジスティック?)回帰をどのようにトレーニングしますか?


11

私は中ロジスティック回帰を訓練することができますR使用して

glm(y ~ x, family=binomial(logit)))

しかし、IIUCでは、これにより対数尤度が最適化されます。

線形(L1)損失関数(この場合、総変動距離と同じ)を使用してモデルをトレーニングする方法はありますか?

数値ベクトル与えられ、すなわち、xおよびビット(論理)ベクトルy、私は単調な(実際には、増加)機能構築したいfよう|f(x)y|最小化されます。

こちらもご覧ください


あなたが望むものは存在せず、率直に言って、それはあまり意味がありません。代替案について話し合うことはできますが、何をしようとしているのかをより完全に述べる必要があります。なぜロジスティックモデルをL1損失に適合させたいのですか?
user603、2014年

@ user603:TVD
sds 2014年

あなたは、二項分布データをフィッティングするのではなく、ロジスティック曲線をデータにフィッティングすることについて話しているようです-つまり、非線形回帰の形式ですが、L 2ノルムではなくを使用しています。確かに、損失関数| f x y | 最大値が1ではないことを示唆しています(その場合、2項式のGLMが誤解を招く可能性があります)。それは本当に一方、されて 0-1に拘束、損失関数は意味がありません。実際の状況について教えてください。L1L2|f(x)y|1
Glen_b-モニカを復活させる'22

ヘルプでは、同じ質問を複数のサイトにクロス投稿するのではなく、1つのサイトを選択するように求められていることに注意してください。後でどのサイトが最適かについて気が変わった場合は、モデレーターの注意を喚起するためにフラグを立て、移動するよう依頼してください。
Glen_b-モニカを

@Glen_b:「ビット(論理)ベクトルy」は0/1応答を意味すると思います。
sds 2014年

回答:


21

あなたがしたいことは存在しません。それは、より良い言葉がないために、数学的に欠陥があるためです。

しかし、最初に、なぜあなたの質問の前提が健全であると思うのかを強調します。それから、あなたがそれらから引き出す結論がロジスティックモデルの誤解に基づいていると私が考える理由を説明しようと試み、最後に、別のアプローチを提案します。

私は意味しますあなたのn個の観測値を(大胆な文字はベクトルを表す)にあるどのP次元空間(の最初のエントリ X{(xxi,yi)}i=1nnpxxip<nyi[0,1]f(xxi)=f(xxiββ)xxiββnp

TVDを適合モデルを評価するための基準として使用する場合は、データのすべての可能な候補間で同じ基準を最適化することを期待するのが妥当です。したがって

ββ=argminββRp||yyf(xxiββ)||1

問題はエラー項です: そして、を強制するとモデルを漸近的に不偏にしたいだけです)、次に、不等分散でなければなりません。これは、は0と1の2つの値しか取ることができないためです。したがって、 、も2つの値しか取ることができません when、これは確率で発生し、場合ϵi=yif(xxiββ)E(ϵϵ)=0ϵi yixxiϵi1f(xxiββ)yi=1f(xxiββ)f(xxiββ)yi=1、確率ます。1f(xxiββ)

これらを考慮すると、次のことがわかります。

var(ϵϵ)=E(ϵϵ2)=(1f(xxββ))2f(xxββ)+(f(xxββ))2(1f(xxββ))=(1f(xxββ))f(xxββ)=E(yy|xx)E(1yy|xx)

したがって、は一定ではなく、凹状の放物線の形をしており、がときに最大になります。var(ϵϵ)xxE(y|xx).5

残差のこの固有の異分散性は結果をもたらします。これは、損失関数を最小化すると、サンプルの一部に漸近的にオーバーウェイトになることを意味します。つまり、フィットされたはデータにまったくフィットしませんが、があるような場所の周りにクラスター化されているデータの一部のみ。つまり、これらはサンプル内で最も情報量の少ないデータポイントです。これらは、ノイズ成分が最大の観測値に対応しています。したがって、フィットはれます。たとえば、無関係になります。l1ββxxE(yy|xx).5ββ=ββ:f(xxββ).5

上記の説明から明らかなように、1つの解決策は、公平性の要件を削除することです。推定量にバイアスをかける一般的な方法(いくつかのベイズの解釈を添付)は、収縮項を含めることです。応答を再スケーリングする場合:

yi+=2(yi.5),1in

そして、計算の便宜のために、を別の単調関数 -続編がパラメータのベクトルの最初の成分をとして示し、残りのはを示し、収縮項(たとえば、形式の1つ)を)、結果の最適化問題は次のようになります:f(xxββ)g(xx,[c,γγ])=xx[c,γγ]cp1γγ||γγ||2

[c,γγ]=argmin[[c,γγ]Rpi=1nmax(0,1yi+xxi[[c,γγ])+12||γγ||2

この新しい(凸型の)最適化問題では、正しく分類された観測値のペナルティは0であり、ように、分類されていない観測値に対してはで線形に損失。この2番目の最適化問題のソリューションは、有名な線形svm(完全分離)係数です。とは対照的に、これらのをデータからTVDタイプのペナルティ(バイアス項による「タイプ」)で学習することは理にかなっています。したがって、このソリューションは広く実装されています。たとえば、RパッケージLiblineaRを参照してください。xx[[c,γ]l1[c,γγ]ββ[c,γγ]


私はあなたに25以上のポイントを与えることができればいいのに:-)
sds 2014年

@sds; ありがとう:それは素晴らしい質問でした:)私は日中に戻ってきて詳細を記入し、タイプミスを修正します。
user603、2014年

8

L1損失を0と1の間の制約があるものに使用する理由がわかりません。目標によっては、代わりにヒンジ損失のようなものを検討することができます。これは、一方向のL1損失と同様であり、フラットです他の。

いずれにせよ、以下のコードはあなたが要求したことを実行するはずです。最適な応答は基本的にステップ関数であることに注意してください。

set.seed(1)

# Fake data
x = seq(-1, 1, length = 100)
y = rbinom(100, plogis(x), size = 1) # plogis is the logistic function

# L1 loss
loss = function(y, yhat){
  sum(abs(y - yhat))
}

# Function to estimate loss associated with a given slope & intercept
fn = function(par){
  a = par[1]
  b = par[2]
  loss(y = y, yhat = plogis(a + b * x))
}

# Find the optimal parameters
par = optim(
  par = c(a = 0, b = 0),
  fn = fn
)$par

# Plot the results
plot(y ~ x)
curve(plogis(par[1] + par[2] * x), add = TRUE, n = 1000)

0

L1、L2モデルのフィッティングにはglmnetパッケージを使用できます。ロジスティック回帰に限定されず、含まれます。

これがビネットです:http : //web.stanford.edu/~hastie/glmnet/glmnet_alpha.html

ウェブセミナーもあります:https : //www.youtube.com/watch?v= BU2gjoLPfDc

Liblinearは良いですが、glmnetを使い始めるのが簡単だと思いました。Glmnetには、交差検証を行い、AUCなどのさまざまなメトリックに基づいて正則化パラメーターを選択する関数が含まれています。

理論に関しては、投げ縄(L1正則化)に関するティブシアリーニの論文と統計学習の要素の章を読みました。 http://statweb.stanford.edu/~tibs/lasso/lasso.pdf

ログの損失については、モデルを評価するだけです。モデルフィッティングの損失関数ではありません。

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