2015-07-28 64 views
4

我做的書「介紹統計學習與R應用」由詹姆斯,威騰,黑斯蒂,Tibshirani(2013)的邏輯迴歸。比較scikit學習的分類任務與迴歸

更具體而言,我擬合二元分類模型來從在§7.8.1中描述將R包「ISLR」的「工資」數據集。

預測變量'年齡'(轉換爲多項式,4級)適用於二元分類工資> 250。然後將年齡與「真」值的預測概率作圖。

R中的模型擬合如下:

fit=glm(I(wage>250)~poly(age,4),data=Wage, family=binomial) 

agelims=range(age) 
age.grid=seq(from=agelims[1],to=agelims[2]) 
preds=predict(fit,newdata=list(age=age.grid),se=T) 
pfit=exp(preds$fit)/(1+exp(preds$fit)) 

完整代碼(作者的網站):http://www-bcf.usc.edu/~gareth/ISL/Chapter%207%20Lab.txt
從書中相應的曲線:http://www-bcf.usc.edu/~gareth/ISL/Chapter7/7.1.pdf(右)

我試圖適應模型轉換爲scikit-learn中的相同數據:

poly = PolynomialFeatures(4) 
X = poly.fit_transform(df.age.reshape(-1,1)) 
y = (df.wage > 250).map({False:0, True:1}).as_matrix() 
clf = LogisticRegression() 
clf.fit(X,y) 

X_test = poly.fit_transform(np.arange(df.age.min(), df.age.max()).reshape(-1,1)) 
prob = clf.predict_proba(X_test) 

然後我繪製了'True'val反對年齡範圍。但結果/情節看起來完全不同。 (不是在談論CI樂隊或rugplot,只是概率情節。)我在這裏錯過了什麼嗎?

回答

1

經過一番閱讀後,我明白scikit-learn實現了一個正規化的邏輯迴歸模型,而R中的glm沒有正規化。 Statsmodels' GLM實現(蟒)是非正規和(當使用給出相同的結果,如R.

http://statsmodels.sourceforge.net/stable/generated/statsmodels.genmod.generalized_linear_model.GLM.html#statsmodels.genmod.generalized_linear_model.GLM

將R包LiblineaR類似於scikit學習的logistic迴歸‘liblinear’解算器)。

https://cran.r-project.org/web/packages/LiblineaR/