R和scikit-learn在逻辑回归分类任务中的比较

我正在进行《An Introduction to Statistical Learning with Applications in R》一书中描述的逻辑回归研究,该书由James、Witten、Hastie、Tibshirani于2013年撰写。

更具体地说,我正在使用R包‘ISLR’中的‘Wage’数据集拟合二元分类模型,如书中§7.8.1节所述。

将预测变量‘age’(转换为4次多项式)拟合到工资大于250的二元分类。然后绘制年龄与预测的‘True’值概率的关系图。

在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’值的概率与年龄范围的关系图。但结果/图表看起来相当不同。(这里不讨论置信区间带或地毯图,仅讨论概率图。)我在这里遗漏了什么吗?


回答:

经过进一步阅读,我了解到scikit-learn实现的是正则化的逻辑回归模型,而R中的glm不是正则化的。Statsmodels的GLM实现(Python)是非正则化的,并且与R中的结果相同。

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

R包LiblineaR与scikit-learn的逻辑回归(使用‘liblinear’求解器时)相似。

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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注