LinearRegression
λ λ²μ μλ 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 ν¨ν€μ§μ΄λ©° μ체μ μΌλ‘ _λ무_ μ ννμ§ μλ κ²μ΄ λμμ΄ λ κ²μ΄λΌκ³ μκ°ν©λλ€. (λλ λν Larry Wassermanκ³Ό Andrew Gelmanμ λ°λΌ ν΅κ³μ κΈ°κ³ νμ΅μ΄ λ λ§μ΄ μμ΄λ©΄ μνΈ μ΄μ΅μ΄ λ κ²μ΄λΌκ³ μκ°νμ§λ§, κ·Έκ²μ μ체μ μΈ λ²λ μΊμ΄λΌκ³ μκ°ν©λλ€.) λͺ¨λ κ³μλ μ κ·νμ ν¨κ» λ³κ²½λ©λλ€. κ·Έκ²μ΄ λ°λ‘ μ κ·νκ° νλ μΌμ λλ€.
μ λ μ κ·ν μμ΄ μλ²λ₯Ό μΆκ°νλ κ²μ λ°λνμ§ μμ΅λλ€. 무μμ΄ μ’μμ§ νμΈν μ μμ΅λκΉ? μλλ©΄ κ·Έλ₯ 보μκΈμ λ΄κ³ 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"
κ²½μ° μλμΌλ‘ μ΄λ€ μ€ νλλ‘ μ νν μ μμ΅λλ€.
#10001 fwiwμμ κΈ°λ³Έ μλ²λ₯Ό lbfgsλ‘ λ³κ²½ν©λλ€.
μ μ²λΌ λΉμ κ· λ‘μ§μ€ν± νκ·λ₯Ό μνλ μ¬λλ€μ μν΄. λλ statsmodelsλ₯Ό μ¬μ©νκ³ SKLearn APIλ₯Ό λͺ¨λ°©νλ λνΌ ν΄λμ€λ₯Ό λ§λλ κ²μΌλ‘ μ μ°©ν΄μΌ νμ΅λλ€.
μ΄μ λν μ λ°μ΄νΈκ° μμ΅λκΉ? μ΄κ²μ μ¬λλ€μκ² 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 λ° μ¬μ©μ κ°μ΄λμ μΆκ°νλ κ²μ΄ μ’μ΅λλ€.
"LogisticRegression λͺ¨λΈμ κΈ°λ³Έμ μΌλ‘ ν¨λν°κ° μ μ©λ©λλ€. C=np.inf λ° solver='lbfgs'λ₯Ό μ€μ νμ¬ ν¨λν° μλ λͺ¨λΈμ μ»μ μ μμ΅λλ€."
statsmodelλ³΄λ€ λ μ λ§μκ³ statsmodelμ λλΆλΆμ λ€λ₯Έ μμ μλμ μλ ΄νμ§ λͺ»νμ΅λλ€.
Rμ glm
λ λ μ±μνκ³ λ λμ λΉκ΅λ₯Ό μν΄ λ§λ€ μ μμ΅λλ€.
docstring λ° μ¬μ©μ κ°μ΄λμ μΆκ°νλ κ²μ΄ μ’μ΅λλ€.
"LogisticRegression λͺ¨λΈμ κΈ°λ³Έμ μΌλ‘ ν¨λν°κ° μ μ©λ©λλ€. 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 λ° μ¬μ©μ κ°μ΄λμ μΆκ°νλ κ²μ΄ μ’μ΅λλ€.
"LogisticRegression λͺ¨λΈμ κΈ°λ³Έμ μΌλ‘ ν¨λν°κ° μ μ©λ©λλ€. 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λ₯Ό μ¬μ©νλ©΄ λ¬Έμ κ° λμ§ μλ κ² κ°μ΅λλ€. κ·Έλ¬λ κ΄λ²μν λ²€μΉλ§ν¬λ₯Ό μ€ννμ§ μμμΌλ©° μκ°μ΄ μμ κ²μ λλ€. λ²€μΉλ§ν¬λ₯Ό μ€ννλ €λ μ¬λμ΄ μλ€λ©΄ ν° λμμ΄ λ κ²μ λλ€.
Penalty='none'μ΄ ν¬ν¨λμ΄μΌ νλ€λ©΄ OLS(νΉν μ-ν« μΈμ½λ© κΈ°λ₯μ κ²½μ°)μμμ λμΌν λμΌ μ ν Xμ λν κ²½κ³ λ₯Ό μ¬μ©μ κ°μ΄λμ μΆκ°νλ κ²μ΄ μ’μ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
μ κ·ν μμ΄ λ‘μ§μ€ν± νκ·λ₯Ό μννλ €λ μ΄μ λ₯Ό λ¬»κ³ μμ΅λκΉ? (1) λλλ‘ νλ³Έμ μ κ·νλ‘ μ무κ²λ μ΄ μ μλ κΈ°λ₯μ μμ λΉλ‘νμ¬ μΆ©λΆν ν¬κ³ (2) μμΈ‘ μ νλλ₯Ό μ΅λννλ κ²κ³Όλ λμ‘°μ μΌλ‘ κ°μ₯ μ ν©ν κ³μκ° κ΄μ¬μ΄ μλ κ²½μ°κ° μκΈ° λλ¬Έμ λλ€.