Визуализация логистической регрессии

Я изучаю базовые модели машинного обучения и столкнулся со следующей проблемой: предсказанная линия не вписывается в набор данных. Я создаю простой набор данных из 2 классов, обучаю SVM и логистическую регрессию. Хотя метрики показывают хорошие результаты, визуализация плохая: обученная линия явно не разделяет два класса. Я не совсем понимаю, что не так, может кто-нибудь объяснить это?

from sklearn import datasets
from sklearn.linear_model import LogisticRegression

X, y = datasets.make_blobs(n_samples=100, centers=2, n_features=2, center_box=(0, 12))

clf = LogisticRegression()
clf.fit(X_train, y_train)

plt.plot(X_train[:, 0], X_train[:, 0] * svc.coef_[:, 1] + svc.coef_[:, 0])
plt.plot(X_train[:, 0][y_train == 0], X_train[:, 1][y_train == 0], 'g^')
plt.plot(X_train[:, 0][y_train == 1], X_train[:, 1][y_train == 1], 'bs')

Всего 1 ответ


Я думаю, что вижу ошибку, хотя немного трудно быть уверенным, потому что код, который вы продемонстрировали, неполон, и вы путаете между логистической регрессией и SVM. Для уточнения отвечу за логистическую регрессию. Имея это в виду, формула, которую вы используете для построения границы решения, неверна.

Формула для логистической регрессии:

введите описание изображения здесь

Мы определяем границу решения как значения x_1 и x_2, так что h (x) равно 0. Итак, перепишите уравнение в терминах одной из входных переменных.

введите описание изображения здесь

Итак, просто реализовать это в коде.

# Gather model parameters
theta_0, theta_1, theta_2 = clf.intercept_[0], clf.coef_[:, 0], clf.coef_[:, 1]

# Choose a pair of x values that fit nicely with your data
x_vals = [np.min(X_train[:, 0]) - 2, np.max(X_train[:, 0]) + 2]

# Apply the formula
y_vals = [- (theta_0 + theta_1 * x)/theta_2 for x in v_vals]

plt.plot(x_vals, y_vals, '--', c='r')