Преимущество логистического регрессионного классификатора заключается в том, что как только вы его подгоняете, вы можете получить вероятности для любого образца вектора. Это может быть интереснее сюжет. Вот пример использования scikit-узнать:
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="white")
Во-первых, генерировать данные и установите классификатор в обучающем наборе:
X, y = make_classification(200, 2, 2, 0, weights=[.5, .5], random_state=15)
clf = LogisticRegression().fit(X[:100], y[:100])
Затем сделать непрерывную сетку значений и оценить вероятность каждого (х, у) точки в сетке:
xx, yy = np.mgrid[-5:5:.01, -5:5:.01]
grid = np.c_[xx.ravel(), yy.ravel()]
probs = clf.predict_proba(grid)[:, 1].reshape(xx.shape)
Теперь построить вероятностную сетку в качестве контурной карты и дополнительно показывают тест набор образцов на нем:
f, ax = plt.subplots(figsize=(8, 6))
contour = ax.contourf(xx, yy, probs, 25, cmap="RdBu",
vmin=0, vmax=1)
ax_c = f.colorbar(contour)
ax_c.set_label("$P(y = 1)$")
ax_c.set_ticks([0, .25, .5, .75, 1])
ax.scatter(X[100:,0], X[100:, 1], c=y[100:], s=50,
cmap="RdBu", vmin=-.2, vmax=1.2,
edgecolor="white", linewidth=1)
ax.set(aspect="equal",
xlim=(-5, 5), ylim=(-5, 5),
xlabel="$X_1$", ylabel="$X_2$")
логистической регрессии позволяет ваши классификации новых образцов на основе какого-то порога вы хотите, чтобы он не по своей сути есть одно «решение границы.» Но, конечно, общее правило принятия решения - p = .5. Мы также можем просто сделать этот уровень контура, используя приведенный выше код:
f, ax = plt.subplots(figsize=(8, 6))
ax.contour(xx, yy, probs, levels=[.5], cmap="Greys", vmin=0, vmax=.6)
ax.scatter(X[100:,0], X[100:, 1], c=y[100:], s=50,
cmap="RdBu", vmin=-.2, vmax=1.2,
edgecolor="white", linewidth=1)
ax.set(aspect="equal",
xlim=(-5, 5), ylim=(-5, 5),
xlabel="$X_1$", ylabel="$X_2$")
Правильно ли я, что вы импортировали 'seaborn', но на самом деле не использовали его в своем ответе? Я не знаком с этой библиотекой, просто проверяя, нужно ли это для ответа. – Rhubarb
@ Zhubarb: Seaborn переопределяет многие из конфигураций matplotlib по умолчанию, как только вы его импортируете. Поэтому, если вам не нужны какие-либо функциональные возможности, которые предоставляет seaborn напрямую, но просто хотите, чтобы matplotlib выглядел БОЛЬШЕ лучше, чем по умолчанию, все, что вам нужно сделать, это inport seaborn и заниматься своим бизнесом с помощью matplotlib. – Gus
@Gus Я получаю сообщение об ошибке at 'probs = clf.predict_probs (grid) [:, 1] .reshape (xx.shape)', говорящий, что 'AttributeError: объект LogisticRegression 'не имеет атрибута' predict_probs'' Я что-то упускаю? –