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

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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