为什么 KNearest Neighbors 的复杂度会随着 k 值的降低而增加?k最近邻的图何时具有平滑或复杂的决策边界?请详细说明。
而且,给定一个要分类的数据实例,K-NN 是使用输入特征的统计模型计算每个可能类的概率,还是只得到支持它的点数最多的类?
为什么 KNearest Neighbors 的复杂度会随着 k 值的降低而增加?k最近邻的图何时具有平滑或复杂的决策边界?请详细说明。
而且,给定一个要分类的数据实例,K-NN 是使用输入特征的统计模型计算每个可能类的概率,还是只得到支持它的点数最多的类?
这种情况下的复杂性是讨论不同类之间边界的平滑度。理解这种平滑复杂性的一种方法是询问如果您稍微移动,您被分类的可能性有多大。如果这种可能性很高,那么您就有一个复杂的决策边界。
为了 -NN算法决策边界基于选择的值 ,因为这就是我们将如何确定新实例的类别。当你减少价值 你最终会做出更细化的决定,因此不同类之间的边界将变得更加复杂。
你应该注意到这个决策边界也高度依赖于你的类的分布。
让我们看看改变值时决策边界是如何变化的 以下。我们可以看到,为然而在另一个区域有蓝色和红色的口袋,据说这比平滑的决策边界更复杂。
首先让我们用 100 个实例和 3 个类制作一些人工数据。
from sklearn.datasets.samples_generator import make_blobs
X, y = make_blobs(n_samples=100, centers=3, n_features=2, cluster_std=5)
让我们绘制这些数据,看看我们要面对什么
现在让我们看看边界对于不同的值是怎样的. 我将在下面发布我用于此的代码供您参考。
用于这些实验的代码如下取自这里
from sklearn import neighbors
k = 1
clf = neighbors.KNeighborsClassifier(20)
clf.fit(X, y)
from matplotlib.colors import ListedColormap
import matplotlib.pyplot as plt
cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])
cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])
# Plot the decision boundary. For that, we will assign a color to each
# point in the mesh [x_min, x_max]x[y_min, y_max].
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()])
# Put the result into a color plot
Z = Z.reshape(xx.shape)
plt.figure()
plt.pcolormesh(xx, yy, Z, cmap=cmap_light)
# Plot also the training points
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=cmap_bold)
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.show()