Để vẽ ranh giới quyết định (decision boundaries) của thuật toán k-NN trong Matplotlib, bạn có thể thực hiện theo các bước sau:
Các bước thực hiện
- Thiết lập kích thước hình vẽ và điều chỉnh khoảng cách giữa các subplot.
- Khởi tạo biến n_neighbors cho số láng giềng.
- Tải bộ dữ liệu iris (phân loại).
- Tạo điểm dữ liệu X (2 đặc trưng đầu) và y (nhãn).
- Tạo danh sách màu tối (dark) và màu sáng (light) cho colormap.
- Khởi tạo classifier k-NN.
- Tạo lưới điểm xx, yy bao phủ không gian đặc trưng.
- Dự đoán nhãn cho mỗi điểm lưới.
- Vẽ contourf cho ranh giới quyết định.
- Vẽ scatter plot cho dữ liệu huấn luyện.
- Đặt nhãn trục, tiêu đề và giới hạn trục.
- Sử dụng plt.show() để hiển thị.
Ví dụ minh họa
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.colors import ListedColormap
from sklearn import neighbors, datasets
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
n_neighbors = 15
iris = datasets.load_iris()
X = iris.data[:, :2]
y = iris.target
h = .02
cmap_light = ListedColormap(['orange', 'cyan', 'cornflowerblue'])
cmap_bold = ['darkorange', 'c', 'darkblue']
clf = neighbors.KNeighborsClassifier(n_neighbors, weights='uniform')
clf.fit(X, y)
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.figure()
plt.contourf(xx, yy, Z, cmap=cmap_light)
sns.scatterplot(x=X[:, 0], y=X[:, 1], hue=iris.target_names[y],
palette=cmap_bold, alpha=1.0, edgecolor="black")
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.title("3-Class classification (k = %i, 'uniform' = '%s')" % (n_neighbors, 'uniform'))
plt.xlabel(iris.feature_names[0])
plt.ylabel(iris.feature_names[1])
plt.show()
Kết quả đầu ra
Biểu đồ ranh giới quyết định k-NN (k=15) cho bộ dữ liệu Iris 2 đặc trưng, với vùng màu phân loại và điểm dữ liệu thực tế.