K最近邻算法学习(2)

本文探讨了K最近邻(KNN)算法在处理多元分类任务中的表现,通过实例展示KNN在5个类别数据集上的正确率为0.96,证明其在多类别问题中仍保持良好性能。同时,进行了KNN回归分析,通过调整n_neighbors参数为2,观察到模型评分提升,准确率增加,模型效果显著改善。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

KNN算法处理多元分类任务

下面来测试KNN算法在类型有多个的时候的性能,下面的测试是用有5个类别的数据集来测试的。

from sklearn.datasets import make_blobs
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt
#构建数据集
data = make_blobs(n_samples=500,centers=5,random_state=8)
X,y = data
#训练模型
clf = KNeighborsClassifier()
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,.02),np.arange(y_min,y_max,.02))
Z = clf.predict(np.c_[xx.ravel(),yy.ravel()])
z = Z.reshape(xx.shape)
plt.pcolormesh(xx,yy,z,cmap=plt.cm.jet)
plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.spring,edgecolor='k')
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title("MutliClassifier:KNN")
plt.show()
#模型评估
print("\n\n")
print("==========================")
print("模型准确率:{:.2f}".format(clf.score(X,y)))
print("==========================")

运行结果如下:
在这里插入图片描述
可以看到虽然讲类别变多了,但是KNN算法的性能还是不错的,依旧有0.96的正确率。

KNN回归分析

同样在进行分析之前,需要先创建相应的数据集来进行测试。例子如下:

from sklearn.datasets import make_regression
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsRegressor
import numpy as np
#x:input,y:output
X,y = make_regression(n_samples=100,n_features=1,n_informative=1,noise=50,random_state=8)
reg = KNeighborsRegressor()
reg.fit(X,y)
#画图
z = np.linspace(-3,3,200).reshape(-1,1)#变成一列
plt.scatter(x,y,c='orange',edgecolor='k')
plt.plot(z,reg.predict(z),c='k',linewidth=3)
plt.title("KNN Regressor")
plt.show()
print("\n")
print("=========================")
print("模型评分:{:.2f}".format(reg.score(X,y)))
print("=========================")

运行结果如下:
在这里插入图片描述
从以上结果可以看出来,当使用默认的n_neighbors=5时,模型效果不是很好。在此将n_neighbors设置为2,在来查看模型的评分。

reg = KNeighborsRegressor(n_neighbors=2)#更改参数

查看模型评分结果:
在这里插入图片描述
可以明显的看到,相对于上图来说,黑色曲线覆盖了更多的数据点。评分也比上一个模型更高了,也就是模型的准确率上升了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值