LinearRegression
unpenalized OLSãæäŸãã SGDClassifier
ãµããŒãããã loss="log"
ããŸããµããŒãããŠããŸãpenalty="none"
ã ããªãã¯ãæãªããã®unpenalizedããžã¹ãã£ãã¯ååž°ããããå Žåããããããªãã¯èšå®ããããšã§ãåœã®ããã«æã£ãŠããC
ã§LogisticRegression
倧éã«ããŸãã¯äœ¿çšLogit
ããstatsmodels
代ããã¯ã
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"
ãè¿œå ããããšã«å察ããŠããŸããããåé·ãªãã·ã§ã³ãè¿œå ããããšã®å©ç¹ãäœã§ãããã¯ããããŸããã
çºèŠå¯èœæ§ãå¢ããšæãããå Žåã¯ãè¿œå ã§ããŸãã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ã«é¢ããèŠåããŠãŒã¶ãŒã¬ã€ãã«è¿œå ããããšããå§ãããŸãïŒç¹ã«ã¯ã³ããããšã³ã³ãŒããããæ©èœã®å ŽåïŒã
æãåèã«ãªãã³ã¡ã³ã
ãªãæ£ååããã«ããžã¹ãã£ãã¯ååž°ãå®è¡ãããã®ããšè³ªåããŠããŸããïŒ ïŒ1ïŒãµã³ãã«ãç¹åŸŽã®æ°ã«æ¯äŸããŠååã«å€§ãããããæ£ååã§ã¯äœãè³Œå ¥ãããªãå ŽåããããïŒ2ïŒäºæž¬ç²ŸåºŠãæ倧åããã®ã§ã¯ãªããæé©ãªä¿æ°ãéèŠãªå ŽåããããŸãã