Logisti c регрессионная визуализация - PullRequest
0 голосов
/ 24 марта 2020

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

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 Ответ

0 голосов
/ 24 марта 2020

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

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

enter image description here

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

enter image description here

Итак, просто внедрите это в код.

# 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...