私は中ロジスティック回帰を訓練することができますR
使用して
glm(y ~ x, family=binomial(logit)))
しかし、IIUCでは、これにより対数尤度が最適化されます。
線形()損失関数(この場合、総変動距離と同じ)を使用してモデルをトレーニングする方法はありますか?
数値ベクトル与えられ、すなわち、およびビット(論理)ベクトル、私は単調な(実際には、増加)機能構築したいよう最小化されます。
こちらもご覧ください
私は中ロジスティック回帰を訓練することができますR
使用して
glm(y ~ x, family=binomial(logit)))
しかし、IIUCでは、これにより対数尤度が最適化されます。
線形()損失関数(この場合、総変動距離と同じ)を使用してモデルをトレーニングする方法はありますか?
数値ベクトル与えられ、すなわち、およびビット(論理)ベクトル、私は単調な(実際には、増加)機能構築したいよう最小化されます。
こちらもご覧ください
回答:
あなたがしたいことは存在しません。それは、より良い言葉がないために、数学的に欠陥があるためです。
しかし、最初に、なぜあなたの質問の前提が健全であると思うのかを強調します。それから、あなたがそれらから引き出す結論がロジスティックモデルの誤解に基づいていると私が考える理由を説明しようと試み、最後に、別のアプローチを提案します。
私は意味しますあなたのn個の観測値を(大胆な文字はベクトルを表す)にあるどのP次元空間(の最初のエントリ X
TVDを適合モデルを評価するための基準として使用する場合は、データのすべての可能な候補間で同じ基準を最適化することを期待するのが妥当です。したがって
問題はエラー項です: そして、を強制するとモデルを漸近的に不偏にしたいだけです)、次に、は不等分散でなければなりません。これは、は0と1の2つの値しか取ることができないためです。したがって、 、も2つの値しか取ることができません when、これは確率で発生し、場合 、確率ます。
これらを考慮すると、次のことがわかります。
したがって、は一定ではなく、凹状の放物線の形をしており、がときに最大になります。
残差のこの固有の異分散性は結果をもたらします。これは、損失関数を最小化すると、サンプルの一部に漸近的にオーバーウェイトになることを意味します。つまり、フィットされたはデータにまったくフィットしませんが、があるような場所の周りにクラスター化されているデータの一部のみ。つまり、これらはサンプル内で最も情報量の少ないデータポイントです。これらは、ノイズ成分が最大の観測値に対応しています。したがって、フィットはれます。たとえば、無関係になります。
上記の説明から明らかなように、1つの解決策は、公平性の要件を削除することです。推定量にバイアスをかける一般的な方法(いくつかのベイズの解釈を添付)は、収縮項を含めることです。応答を再スケーリングする場合:
そして、計算の便宜のために、を別の単調関数 -続編がパラメータのベクトルの最初の成分をとして示し、残りのはを示し、収縮項(たとえば、形式の1つ)を)、結果の最適化問題は次のようになります:
この新しい(凸型の)最適化問題では、正しく分類された観測値のペナルティは0であり、ように、分類されていない観測値に対してはで線形に損失。この2番目の最適化問題のソリューションは、有名な線形svm(完全分離)係数です。とは対照的に、これらのをデータからTVDタイプのペナルティ(バイアス項による「タイプ」)で学習することは理にかなっています。したがって、このソリューションは広く実装されています。たとえば、RパッケージLiblineaRを参照してください。
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)
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
ログの損失については、モデルを評価するだけです。モデルフィッティングの損失関数ではありません。