我需要绘制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')
#单列的绘图输出为
但是我想要这样的东西
相反,对于#all列,这是输出
编辑:
我尝试了另一种方法。
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()
结果比以前好,但仍然不正确: