【问题标题】:How can I visualize the test samples of k nearest neighbour classifier?如何可视化 k 最近邻分类器的测试样本?
【发布时间】:2021-03-23 22:24:16
【问题描述】:

我想可视化 4 个 k-NN 分类器的测试样本。我已经搜索过了,但我找不到任何东西。你能帮我实现代码吗?

这是我目前的代码,

from sklearn.datasets import make_moons
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
from sklearn.neighbors import KNeighborsClassifier
from sklearn import metrics
from sklearn.neighbors import KNeighborsClassifier

X, y = make_moons(n_samples=100, noise=0.3)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.04, random_state=42)
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)

通过 1×4 轴图形。对于每个轴,我想可视化训练样本、相应的测试样本(用“+”标记表示)以及该样本的最近 k 个邻居(用绿色边框颜色表示)。每个轴的标题应说明预测类别。

【问题讨论】:

    标签: python scikit-learn data-science knn


    【解决方案1】:

    为此,您基本上需要重建 KNN 算法本身,因为它不会跟踪用于对给定样本进行预测的“邻居”。

    您将如何做到这一点取决于 KNN 算法使用的距离度量。

    例如,您可以定义一个函数来根据L1(曼哈顿距离)获取最近的邻居,如下所示:

    def get_neighbors(xs, sample, k=5):
        neighbors = [(x, np.sum(np.abs(x - sample))) for x in xs]
        neighbors = sorted(neighbors, key=lambda x: x[1])
        return np.array([x for x, _ in neighbors[:k]])
    

    xs 是您的训练集,sample 是您要进行预测的点。

    现在您可以通过在图上分散训练点、测试点和邻居来轻松地对其进行可视化。

    _, ax = plt.subplots(nrows=1, ncols=4, figsize=(15, 5))
    for i in range(4):
        sample = X_test[i]
        neighbors = get_neighbors(X_train, sample, k=5)
        ax[i].scatter(X_train[:, 0], X_train[:, 1], c="skyblue")
        ax[i].scatter(neighbors[:, 0], neighbors[:, 1], edgecolor="green")
        ax[i].scatter(sample[0], sample[1], marker="+", c="red", s=100)
        ax[i].set(xlim=(-2, 2), ylim=(-2, 2))
    
    plt.tight_layout()
    

    您可以通过向scatter 方法添加适当的参数来随意设置它的样式。请注意,我在这里通过设置xlimylim 对其进行剪切,您也可以更改这些,但要注意保持x 和y 轴之间的1:1 比例,否则邻居可能看起来不正确。

    【讨论】:

    • 非常感谢!你的回答真的很清楚。我学到了很多东西
    猜你喜欢
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 2011-06-23
    • 2015-05-12
    • 2019-01-03
    • 2023-01-24
    相关资源
    最近更新 更多