绘制叠加在概率图上的逻辑回归
Plotting a logisitc regression superimposed over a probability 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()
#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 也可以。
您可以使用 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()
多亏了 JohanC 的帮助,我才能够得到它。显然,我的回答很大程度上受到了他的帖子的启发。我稍微调整了代码,使其在条形图而不是散点图上显示模型。我试图给你投票,但我没有足够的业力。
这是我使用的方法和结果:
# 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()
我想建立一个类似这样的图表
我创建了条形图,并完成了逻辑回归。
#imports
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
plt.bar(prob_df['diff'], prob_df['full_win_prob'])
plt.show()
#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 也可以。
您可以使用 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()
多亏了 JohanC 的帮助,我才能够得到它。显然,我的回答很大程度上受到了他的帖子的启发。我稍微调整了代码,使其在条形图而不是散点图上显示模型。我试图给你投票,但我没有足够的业力。
这是我使用的方法和结果:
# 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()