绘制叠加在概率图上的逻辑回归

时间:2021-04-16 15:33:42

标签: python matplotlib plot data-science logistic-regression

我想构建一个与此类似的图表logistic regression superimposed over a bar chart

我已经创建了一个条形图,并且我已经完成了逻辑回归。

#imports
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression

plt.bar(prob_df['diff'], prob_df['full_win_prob'])
plt.show()

my current barplot

#logistic regression
X = dfx['home_diff'].values
y = dfx['away_win'].values
X = X.reshape(-1, 1)
logreg = LogisticRegression()
logreg.fit(X, y)

print(logreg.intercept_, logreg.coef_)
[-0.67032214] [[0.04948131]] #results   

我有图表和模型,我不知道如何在图表顶部绘制模型,这有点令人沮丧,我相信答案很简单。我更喜欢 matplotlib 中的答案,但 seaborn 也可以。

2 个答案:

答案 0 :(得分:0)

您可以使用 yy = logreg.predict_proba(XX)[:,1] 绘制一组 x 值的逻辑曲线。 logreg.predict_proba(XX)[:,0] 给出了倒置曲线,为 0 的概率。 logreg.predict(XX) 给出预测,即四舍五入为 0 或 1 的逻辑曲线。

这是一个从一些生成的测试数据开始的例子。

import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
import numpy as np

np.random.seed(123)
# logistic regression
X = np.random.uniform(1, 9, 20)  # dfx['home_diff'].values
y = np.random.choice([0, 1], 20, p=[0.8, 0.2])
y = np.where(X < 5, y, 1 - y)  # dfx['away_win'].values
X = X.reshape(-1, 1)
plt.scatter(X[:, 0], y, color='black', label='Given values')
logreg = LogisticRegression()
logreg.fit(X, y)
XX = np.linspace(0, 10, 1000).reshape(-1, 1)
prediction = logreg.predict(XX)
probability_0, probability_1 = logreg.predict_proba(XX).T

plt.plot(XX[:, 0], prediction, color='limegreen', lw=2, alpha=0.7, label='Predicted values')
plt.plot(XX[:, 0], probability_0, color='crimson', lw=2, alpha=0.7, ls='--', label='Probability of being 0')
plt.plot(XX[:, 0], probability_1, color='deepskyblue', lw=2, alpha=0.7, label='Probability of being 1')
plt.legend()

logistic curve

答案 1 :(得分:0)

多亏了 JohanCs 的帮助,我才能够得到它。显然,我的回答很大程度上受到了他的帖子的启发。我稍微调整了代码,以便它在条形图而不是散点图上显示模型。我试图给你点赞,但我的业力不够。

这是我使用的结果:

# logistic regression
X = dfx['home_diff'].values
y = dfx['away_win'].values
X = X.reshape(-1, 1)
logreg = LogisticRegression()
logreg.fit(X, y)
prediction = logreg.predict(X)
probability_0, probability_1 = logreg.predict_proba(X).T



plt.plot(X[:, 0], probability_1, color='blue', lw=2, alpha=0.6, label='Probability of being 1')
plt.bar(prob_df['diff'], prob_df['full_win_prob'], color='orange')

plt.legend()

resolution