【发布时间】:2021-06-24 02:29:44
【问题描述】:
我正在对布尔值 0/1 数据集进行逻辑回归(预测某个年龄给你的薪水超过一定数额的概率),我使用 sklearn 和 StatsModels 得到了非常不同的结果,其中 sklearn 非常 错误。
我已将 sklearn 惩罚设置为 None 并将截距项设置为 false 以使函数更类似于 StatsModels,但我看不出如何让 sklearn 给出合理的答案。
灰线是 0 或 1 处的原始数据点,我只是在绘图上将 1 缩小到 0.1 以使其可见。
变量:
# X and Y
X = df.age.values.reshape(-1,1)
X_poly = PolynomialFeatures(degree=4).fit_transform(X)
y_bool = np.array(df.wage.values > 250, dtype = "int")
# Generate a sequence of ages
age_grid = np.arange(X.min(), X.max()).reshape(-1,1)
age_grid_poly = PolynomialFeatures(degree=4).fit_transform(age_grid)
代码如下:
# sklearn Model
clf = LogisticRegression(penalty = None, fit_intercept = False,max_iter = 300).fit(X=X_poly, y=y_bool)
preds = clf.predict_proba(age_grid_poly)
# Plot
fig, ax = plt.subplots(figsize=(8,6))
ax.scatter(X ,y_bool/10, s=30, c='grey', marker='|', alpha=0.7)
plt.plot(age_grid, preds[:,1], color = 'r', alpha = 1)
plt.xlabel('Age')
plt.ylabel('Wage')
plt.show()
# StatsModels
log_reg = sm.Logit(y_bool, X_poly).fit()
preds = log_reg.predict(age_grid_poly)
# Plot
fig, ax = plt.subplots(figsize=(8,6))
ax.scatter(X ,y_bool/10, s=30, c='grey', marker='|', alpha=0.7)
plt.plot(age_grid, preds, color = 'r', alpha = 1)
plt.xlabel('Age')
plt.ylabel('Wage')
plt.show()
【问题讨论】:
标签: python scikit-learn logistic-regression statsmodels