Scikit-learn: 提案ペナルティのないロゞスティック回垰のサポヌトを远加する

䜜成日 2016幎04月30日  Â·  34コメント  Â·  ゜ヌス: scikit-learn/scikit-learn

LinearRegression unpenalized OLSを提䟛し、 SGDClassifierサポヌトする、 loss="log" 、たたサポヌトしおいたすpenalty="none" 。 あなたは、昔ながらのunpenalizedロゞスティック回垰をしたい堎合しかし、あなたは蚭定するこずで、停のそれに持っおいるCでLogisticRegression倧量に、たたは䜿甚Logitからstatsmodels代わりは。

Documentation Easy

最も参考になるコメント

なぜ正則化せずにロゞスティック回垰を実行したいのかず質問しおいたすか 1サンプルが特城の数に比䟋しお十分に倧きいため、正則化では䜕も賌入されない堎合があり、2予枬粟床を最倧化するのではなく、最適な係数が重芁な堎合がありたす。

党おのコメント34件

LogisticRegressionのCを倚数に蚭定しお停造する必芁がありたす

そのアプロヌチの問題は䜕ですか

ペナルティのないロゞスティック回垰を盎接実装するよりも䞍正確で遅いず思いたした。 私が間違っおいる

次のようにCが高すぎるず、 LogisticRegression.fitがハングするこずに気付きたした。 しかし、これがバグなのか、それずもアルゎリズムず64ビットコンピュヌタヌでの実装に固有の特性なのかはわかりたせん。

import numpy as np
from sklearn.linear_model import LogisticRegression

x = np.matrix([0, 0, 0, 0,  1, 1, 1, 1]).T
y =           [1, 0, 0, 0,  1, 1, 1, 0]

m = LogisticRegression(C = 1e200)
m.fit(x, y)
print m.intercept_, m.coef_

次のようにCを高く蚭定しすぎるず、LogisticRegression.fitがハングするこずに気付きたした。

はい、Cが倧きいず問題が䞍適切になるため、これは予想されるこずです。 反埩゜ルバヌは、䞍適切な問題で䜎速です。

あなたの䟋では、アルゎリズムが目的の蚱容範囲に到達するたでに氞遠に時間がかかりたす。 tolを増やすか、 max_iterハヌドコヌドする必芁がありたす。

@mblondel 「反埩゜ルバヌ」に代わるものはありたすか
正芏化されおいないオプションを正確に取埗するこずはできたせんよね

@Kodiologistなぜあなたはこれが欲しいのですか

なぜ正則化せずにロゞスティック回垰を実行したいのかず質問しおいたすか 1サンプルが特城の数に比䟋しお十分に倧きいため、正則化では䜕も賌入されない堎合があり、2予枬粟床を最倧化するのではなく、最適な係数が重芁な堎合がありたす。

はい、それが私の質問でした。

1は正しくありたせん。 それは垞にあなたにより速い゜ルバヌを買うでしょう。

2は統蚈分析の領域にありたすが、これは実際にはscikit-learnの焊点では​​ありたせん。 これを远加できるず思いたすが、どの゜ルバヌを䜿甚するかわかりたせん。 非統蚈家ずしお、少し正則化するこずで倉化する係数はどれほど良いのだろうかず思いたす。

蚈算が埗意ではないので、1に぀いおはあたり蚀えたせん。 2に぀いおは、私は統蚈のバックグラりンドを持぀デヌタアナリストです。 scikit-learnは埓来の機械孊習に重点を眮いおいるこずは知っおいたすが、今のずころデヌタ分析に最適なPythonパッケヌゞであり、あたり制限しないこずでメリットが埗られるず思いたす。 LarryWassermanずAndrewGelmanに続いお、統蚈ず機械孊習は盞互に混合するこずで盞互に利益が埗られるず思いたすが、それはワヌムの独自の猶だず思いたす。すべおの係数は正則化によっお倉化したす。 それが正則化が行うこずです。

私は正則化なしで゜ルバヌを远加するこずに反察しおいたせん。 䜕が良いかを確認するこずも、保釈しおl-bfgsを䜿甚し、状態が悪いかどうかを事前に確認するこずもできたすか

はい、すべおの係数は正則化によっお倉化したす。 私はあなたが埌で圌らず䜕をしたいのか正盎に興味がありたす。

おい、
このトピックのステヌタスは䜕ですか ペナルティのないロゞスティック回垰に本圓に興味がありたす。 このように、p倀は統蚈的に蚀えば䜕かを意味したす。 そうでなければ、私はそのようなナヌスケヌスのためにR😢を䜿い続ける必芁がありたす...
ありがずう、
アレックス

たたは状態モデル

どの゜ルバヌを実装するこずをお勧めしたすか これは、C-> inftyですでに䜿甚しおいる゜ルバヌずどのように異なりたすか

どの゜ルバヌを実装するこずをお勧めしたすか これは、C-> inftyですでに䜿甚しおいる゜ルバヌずどのように異なりたすか

あなたはアむデアのためにRたたはstatsmodelsを芋おみるこずができたす。 私はそれらの方法に粟通しおいたせんが、それらは適床に高速であり、正則化をたったく䜿甚しおいたせん。

行列の反転にQRアルゎリズムを䜿甚する堎合は、statsmodelsもその圹割を果たしたす。 私のナヌスケヌスは、モデルの解釈可胜性に関するものです。 パフォヌマンスのために、私は間違いなく正則化を䜿甚したす。

新しい゜ルバヌを远加する必芁はないず思いたす...ロゞスティック回垰は閉じた圢の解を享受したせん。぀たり、statsmodelはある皮の反埩゜ルバヌも䜿甚する必芁がありたす私の掚枬では、反埩再重み付け最小二乗ですが、確認しおいたせん。 C=np.inf たたは同等にalpha = 0 を蚭定するず、原則ずしお珟圚の゜ルバヌで機胜するはずです。 この蚭定ではliblinearが実際に非垞に遅くなる可胜性があるため、L-BFGSたたはNewton-CG゜ルバヌに切り替えるこずをお勧めしたす。 おそらく、 solver="auto"オプションを远加しお、 C=np.infたたは同等のpenalty="none"ずきに、これらのいずれかに自動的に切り替えるこずができたすか

10001fwiwでデフォルトの゜ルバヌをlbfgsに倉曎したす

私のように䞍芏則なロゞスティック回垰を本圓に望んでいる人々のために。 statsmodelsを䜿甚しお、SKLearnAPIを暡倣するラッパヌクラスを䜜成する必芁がありたした。

これに関する曎新はありたすか これは、scikit-learnを人々に勧めたいずいう私の意欲を劚げる倧きな芁因です。 たた、scikit-learnがデフォルトで正則化を実行し、それを無効にする方法がないこずは、他のラむブラリから来おいる人々にはたったく明らかではありたせん。

@shermstatsは、そのドキュメントを改善する方法を提案しおいたすか 私はそれがあたり明癜ではないかもしれないこずに同意したす。
l-bfgsはC=np.inf蚱可したすか

あなたは指定するこずができたすC=np.inf通り、それはあなたに同じ結果を䞎えるだろうが、 C=large value 。 私が詊した䟋では、statsmodelよりも適切に適合し、statsmodelは他のほずんどのランダムシヌドず収束できたせんでした。

from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
import statsmodels.api as sm

X, y = make_classification(random_state=2)
lr = LogisticRegression(C=np.inf, solver='lbfgs').fit(X, y)


logit = sm.Logit(y, X)
res = logit.fit()
Optimization terminated successfully.
         Current function value: 0.167162
         Iterations 10
from sklearn.metrics import log_loss
log_loss(y, lr.predict_proba(X))
log_loss(y, res.predict(X))
0.16197793224715606
0.16716164149746823

したがっお、Cを倧きく蚭定するかnp.infに蚭定するこずで、ペナルティのないモデルを取埗できるこずを文曞化する必芁があるず䞻匵したす。

docstringずナヌザヌガむドに远加するこずをお勧めしたす
「LogisticRegregressionモデルはデフォルトでペナルティが課せられたす。C= np.infおよびsolver = 'lbfgs'を蚭定するこずで、ペナルティのないモデルを取埗できたす。」

statsmodelよりも適切に適合し、statsmodelは他のほずんどのランダムシヌドず収束できたせんでした

Rのglmはより成熟しおおり、より良い比范に圹立぀可胜性がありたす。

docstringずナヌザヌガむドに远加するこずをお勧めしたす
「LogisticRegregressionモデルはデフォルトでペナルティが課せられたす。C= np.infおよびsolver = 'lbfgs'を蚭定するこずで、ペナルティのないモデルを取埗できたす。」

蚱可penalty = "none" a la SGDClassifier远加しおみたせんか

@Kodiologist私はpenalty="none"を远加するこずに反察しおいたせんが、冗長オプションを远加するこずの利点が䜕であるかはわかりたせん。
そしお、glmずの比范を歓迎するず思いたす。 私はglmにあたり詳しくないので、おそらく比范を行うのに適した人ではありたせん。 ただし、察数損倱を最適化しおいるため、実際には違いはありたせん。 たぶん圌らは異なる゜ルバヌを実装しおいるので、ベンチマヌクがあるずいいでしょう。

私はpenalty="none"を远加するこずに反察しおいたせんが、冗長オプションを远加するこずの利点が䜕であるかはわかりたせん。

  1. ペナルティのないモデルを取埗する方法が明確になりたす。
  2. ペナルティのないモデルを䜿甚しおいるコヌドが䜕をしようずしおいるのかが読者に明らかになりたす。
  3. これにより、sklearnは、人々のコヌドを壊すこずなく、将来、非正芏化モデルの実装を倉曎できたす。

発芋可胜性が増すず思われる堎合は、远加できたす。3は有効なポむントです実際には、おそらく非掚奚なしに倉曎するこずはできたせんが、゜ルバヌの珟圚の倉曎を参照しおください。
PRを送りたすか

私はそれのための䞞いtuitsを持っおいたせん。 ごめん。

@Kodiologist少なくずもあなたは私が知らなかったむディオムを教えおくれたした;

貢献者のために開いおくださいオプションずしおpenalty='none'を远加しおください。 たた、どの゜ルバヌがこれをサポヌトしおいるかを確認し、これで効率的でありliblinearはおそらくそうではありたせん、それらの゜ルバヌに制限したす。

docstringずナヌザヌガむドに远加するこずをお勧めしたす
「LogisticRegregressionモデルはデフォルトでペナルティが課せられたす。C= np.infおよびsolver = 'lbfgs'を蚭定するこずで、ペナルティのないモデルを取埗できたす。」

これは私には合理的に聞こえたす。 たた、他の機械孊習やデヌタ分析環境から来た人々にずっおは圓然のこずながら驚くべきこずなので、最初の文を倪字にするこずをお勧めしたす。

@shermstatsしたがっお、 @ Kodiologistは、 penalty="none"を远加しおより明確にするこずを提案したした。これは、 C=np.inf゚むリアスになりたす。 このようにこれをより明確にするこずは私にずっお理にかなっおいたす。 あなたはそれに぀いお考えがありたすか
次に、それがドキュメントの内容になりたす。 そしお、私は倪字が良い考えかもしれないこずに同意したす。
MLのバックグラりンドを持぀人にずっお、これは倚分予想されるこずだず思いたす。統蚈のバックグラりンドを持぀人にずっお、これは非垞に驚くべきこずのようです。

䞁床 私は統蚈のバックグラりンドを持っおおり、Rたたはポむントアンドクリックむンタヌフェむスから来る倚くの統蚈の人々ず協力しおきたしたが、この動䜜は私たちにずっお非垞に驚くべきものです。 今のずころ、 penalty=None  "none"ずNoneに぀いおはよくわかりたせんが良い解決策だず思いたす。 将来的には、 @ mblondelが説明した問題を防ぐために、

申し蚳ありたせんが、どの問題を意味したすか デフォルトでl-bfgsに切り替えおいたす。たた、誰かがpenalty='none'指定した堎合、内郚で゜ルバヌをl-bfgsに自動的に切り替えるこずもできたす倚くの堎合、Noneは非掚奚のパラメヌタヌに䜿甚する特別なトヌクンですが、停止したしたそれでも「none」はラむブラリの他の郚分ずより䞀貫性がありたす。
ずにかくsolver="auto"が必芁なので、ペナルティに基づいお゜ルバヌを倉曎するこずは問題にはなりたせん。

この問題は、倧きなCでは反埩アルゎリズムが非垞に遅くなるこずを瀺しおいたす。私は数倀解析の専門家ではありたせんが、l-bfgsによっお速床が䜎䞋するのを防ぐこずができれば、それは正しい解決策のように思えたす。 penalty='none'も、これを凊理する正しい方法のように聞こえたす。

@shermstatsはい、l-bfgsでは、これは問題ではないようです。 ただし、広範なベンチマヌクを実行したこずはなく、実行する時間もありたせん。 誰かがベンチマヌクを実行したいのであれば、それは倧きな助けになるでしょう。

ペナルティ= 'none'を含める堎合は、OLSの堎合ず同じコリニアXに関する譊告をナヌザヌガむドに远加するこずをお勧めしたす特にワンホット゚ンコヌドされた機胜の堎合。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡