使用k-nn和k的不同值绘制图形

问题描述

我想为k-nn分类器绘制具有不同k值的图形。 我的问题是这些数字似乎具有相同的k值。 到目前为止,我尝试过的是在循环的每次运行中更改k的值:

clf = KNeighborsClassifier(n_neighbors=counter+1) 但是所有数字似乎都是针对k=1

from sklearn.datasets import fetch_california_housing
data = fetch_california_housing()
import numpy as np
from sklearn.model_selection import train_test_split

c = np.array([1 if y > np.median(data['target']) else 0 for y in data['target']])
X_train,X_test,c_train,c_test = train_test_split(data['data'],c,random_state=0)

from sklearn.neighbors import KNeighborsClassifier
import mglearn
import matplotlib.pyplot as plt

fig,ax = plt.subplots(nrows=1,ncols=3,figsize=(20,6))
for counter in range(3):      
    clf = KNeighborsClassifier(n_neighbors=counter+1) 
    clf.fit(X_test,c_test)
    plt.tight_layout()  # this will help create proper spacing between the plots.
    mglearn.discrete_scatter(X_test[:,0],X_test[:,1],c_test,ax=ax[counter])
    plt.legend(["Class 0","Class 1"],loc=4)
    plt.xlabel("First feature")
    plt.ylabel("Second feature")
    #plt.figure()

解决方法

所有图看起来相同的原因是您每次都只是绘制测试集,而不是在测试集上绘制模型预测。您可能打算对k的每个值执行以下操作:

  • 将模型调整为训练集,在这种情况下,应将clf.fit(X_test,c_test)替换为clf.fit(X_train,c_train)

  • 在测试集上生成模型预测,在这种情况下,您应该添加c_pred = clf.predict(X_test)

  • 在测试集上绘制模型预测,在这种情况下,应在散点图中将c_test替换为c_pred,即使用mglearn.discrete_scatter(X_test[:,0],X_test[:,1],c_pred,ax=ax[counter])代替{{1} }。

我在下面提供了完整的代码。

mglearn.discrete_scatter(X_test[:,c_test,ax=ax[counter])

enter image description here

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...