如何绘制逻辑回归概率

时间:2019-09-02 02:30:35

标签: python machine-learning plot logistic-regression

我需要绘制Logistic回归程序的概率,但是它不起作用。我正在使用糖尿病数据集,因此我有8个不同的列和1个目标二进制列,即结果(0或1)。

我试图在每列的函数中绘制概率,但仍然无法获得真正的S型函数。

w = pd.read_csv('diabetes2.csv') 

X = w.iloc[:, :8].values
y = w.iloc[:, 8].values 

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
X_train_2, X_test_2, y_train_2, y_test_2 = train_test_split(X_train, y_train, test_size=0.25, random_state=0) 

lr_clf = LogisticRegression(random_state = 0).fit(X_train_2, y_train_2)

lr_pred = lr_clf.predict(X_test_2)
lr_prob = lr_clf.predict_proba(X_test_2)[:,1]

#one column
plt.scatter(X[:,1], y, s = 1, color = 'black')
plt.plot(X_test_2[:,1], lr_prob, '.')
plt.xlabel('Gluocose')
plt.ylabel('Probability')

#all columns
plt.scatter(X[:,1], y, s = 1, color = 'black')
plt.plot(X_test_2, lr_prob, '.')
plt.xlabel('Gluocose')
plt.ylabel('Probability')

#单列的绘图输出为

Plot 1

但是我想要这样的东西

Real plot

相反,对于#all列,这是输出

Plot 2

编辑:

我尝试了另一种方法。

def model(x):
    return 1 / (1 + np.e**(-x))

for i in range (8):
    loss = model(X_test_2[:,i] * lr_clf.coef_[:,i] + lr_clf.intercept_).ravel()
    plt.scatter(X[:,i], y, s = 1, color = 'black')
    plt.plot(X_test_2[:,i], loss, '.', color = 'red')
    plt.xlabel(wine.columns.values[i])
    plt.ylabel('Probability')
    plt.show()

结果比以前好,但仍然不正确:

Plot 3

0 个答案:

没有答案