Seaborn Regplot和Scikit-Learn物流模型的计算方式不同?

时间:2018-08-28 00:45:28

标签: python scikit-learn seaborn logistic-regression

我同时使用了Scikit-Learn和Seaborn逻辑回归函数-前者用于提取模型信息(即对数奇数,参数等),而后者用于绘制所得的S形曲线以拟合概率估计

也许我的直觉对于解释这种情节是不正确的,但是我似乎并没有得到我期望的结果:

#Build and visualize a simple logistic regression
ap_X = ap[['TOEFL Score']].values 
ap_y = ap['Chance of Admit'].values

ap_lr = LogisticRegression()
ap_lr.fit(ap_X, ap_y)

def ap_log_regplot(ap_X, ap_y):
    plt.figure(figsize=(15,10))
    sns.regplot(ap_X, ap_y, logistic=True, color='green')
    return None

ap_log_regplot(ap_X, ap_y)
plt.xlabel('TOEFL Score')
plt.ylabel('Probability')
plt.title('Logistic Regression: Probability of High Chance by TOEFL Score')
plt.show

enter image description here

看起来不错,但随后我尝试使用Scikit-Learn中的predict_proba函数,以给定Chance to Admit的任意值来查找TOEFL Score的概率(在本例中为108、104和112):

eight = ap_lr.predict_proba(108)[:, 1]
four = ap_lr.predict_proba(104)[:, 1]
twelve = ap_lr.predict_proba(112)[:, 1]
print(eight, four, twelve)

我在哪里:

[0.49939019] [0.44665597] [0.55213799]

对我来说,这似乎表明TOEFL得分为112,根据该数据集,个人被录取的机会为55%。如果我将一条垂直线从x轴上的112延伸到S形曲线,我希望交点在.90附近。

我正确解释/建模吗?我意识到我正在使用两个不同的程序包来计算模型系数,但是对于另一个使用不同数据集的模型,我似乎可以得到符合逻辑曲线的正确预测。

任何想法还是我会完全不正确地建模/解释这个问题?

2 个答案:

答案 0 :(得分:0)

from sklearn.linear_model import LogisticRegression
from sklearn import metrics

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.4, random_state=4)
print(x_train.shape)
print(x_test.shape)
print(y_train.shape)
print(y_test.shape)

logreg = LogisticRegression()
logreg.fit(x_train, y_train)

y_pred = logreg.predict(x_test)
print('log: ', metrics.accuracy_score(y_test, y_pred))

您可以轻松地找到这样的模型精度,并确定可以用于应用程序数据的模型。

答案 1 :(得分:0)

经过一番搜索,“交叉验证”为我的问题提供了正确的答案。尽管它已经存在于Cross-Validated中,但我也想在Stack Overflow上提供此答案。

简单地说,Scikit-Learn自动向逻辑模型添加正则化罚分,以缩小系数。 Statsmodels不会添加此罚款。显然无法关闭此功能,因此必须将C=实例化中的LogisticRegression参数设置为某个任意高的值,例如C=1e9

尝试此方法并将Scikit-Learn predict_proba()regplot(使用statsmodels进行计算)生成的S形图进行比较之后,概率估计会对齐。

链接到完整的帖子:https://stats.stackexchange.com/questions/203740/logistic-regression-scikit-learn-vs-statsmodels