Lợi thế của trình phân loại hồi quy logistic là khi bạn vừa với nó, bạn có thể nhận được xác suất cho bất kỳ vectơ mẫu nào. Điều đó có thể thú vị hơn để vẽ. Dưới đây là một ví dụ sử dụng scikit-học:
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")
Thứ nhất, tạo ra các dữ liệu và phù hợp với phân loại để tập huấn luyện:
X, y = make_classification(200, 2, 2, 0, weights=[.5, .5], random_state=15)
clf = LogisticRegression().fit(X[:100], y[:100])
Tiếp theo, tạo ra một mạng lưới liên tục các giá trị và đánh giá khả năng của mỗi (x, y) chỉ trong lưới:
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)
Bây giờ, vẽ lưới khả năng như một bản đồ đường viền và bổ sung cho các mẫu thử nghiệm thiết lập trên đầu trang của nó:
01.235.
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$")
Các hồi quy logistic cho phép mẫu mới classify của bạn dựa trên bất kỳ ngưỡng mà bạn muốn, vì vậy nó không vốn đã có một "ranh giới quyết định." Nhưng, tất nhiên, một quy tắc quyết định chung để sử dụng là p = .5. Chúng tôi cũng có thể chỉ cần vẽ đường viền rằng mức độ sử dụng đoạn code trên:
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$")
Tôi có phải rằng bạn đã nhập 'seaborn' nhưng thực tế đã không sử dụng nó trong câu trả lời của bạn? Tôi không quen thuộc với thư viện đó, chỉ cần kiểm tra xem nó là cần thiết cho câu trả lời. – Rhubarb
@Zhubarb: Seaborn ghi đè nhiều cấu hình mặc định của matplotlib ngay sau khi bạn nhập. Vì vậy, nếu bạn không cần bất kỳ chức năng mà seaborn cung cấp trực tiếp, nhưng chỉ muốn matplotlib nhìn MUCH tốt hơn nó theo mặc định, tất cả những gì bạn phải làm là inport seaborn và đi về doanh nghiệp của bạn với matplotlib – Gus
@Gus Tôi gặp lỗi tại 'probs = clf.predict_probs (grid) [:, 1] .reshape (xx.shape)' nói rằng đối tượng 'AttributeError: 'LogisticRegression' không có thuộc tính 'predict_kết_probs'' tôi có thiếu gì đó không? –