如何绘制由受过训练的kNN确定的决策边界?

问题描述

到目前为止,我已经将虹膜数据集分为训练集,值集和测试集。 我已经对knn进行了值1,5,10,15,20,30的训练,发现训练的准确性。 我现在想要绘制决策边界。

我找到了一些示例,但是不确定如何在其中实现代码,以便绘制数据。 可以执行我想做的示例代码:

#Calculate min,max and limits  
x_min,x_max = X[:,0].min() - 1,X[:,0].max() + 1
y_min,y_max = X[:,1].min() - 1,1].max() + 1
xx,yy = np.meshgrid(np.arange(x_min,x_max,h),np.arange(y_min,y_max,h))

# predict class using data and kNN classifier
Z = knn.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,shading='auto')

# Plot
plt.scatter(X[:,0],1],c=Y,cmap=cmap_bold)
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title("3-Class classification (k = %i)" % n_neighbors)
plt.show()

我要在其中实现的代码,以便显示我的数据:

X = iris.data[:,:2]
Y = iris.target

X_train,X_val_test,Y_train,Y_val_test = train_test_split(X,Y,test_size=.3,shuffle=True,random_state=666)  

X_val,X_test,Y_val,Y_test = train_test_split(X_val_test,Y_val_test,test_size=.5,random_state=221)  
# Store number of datapoints in each dataset:
N_train = len(Y_train)
N_val = len(Y_val)
N_test = len(Y_test)
print("Datapoints used for training:   ",N_train)
print("Datapoints used for validation: ",N_val)
print("Datapoints used for testing :   ",N_test)
# 70% - 30% - 30% train / val / test ratio

h = .02  # step size in the mesh

# Create color maps
cmap_light = ListedColormap(['#FFAAAA','#AAFFAA','#00AAFF'])
cmap_bold = ListedColormap(['#FF0000','#00FF00','#00AAFF'])


# Try K = 1,20 and 30 - And record testing accuracy
k_list = [1,30]
scores = []

for k in k_list:
    knn = KNeighborsClassifier(n_neighbors=k)
    knn.fit(X_train,Y_train)
    Y_pred = knn.predict(X_test)
    scores.append(metrics.accuracy_score(Y_test,Y_pred))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

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