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)#更改参数
查看模型评分结果:
可以明显的看到,相对于上图来说,黑色曲线覆盖了更多的数据点。评分也比上一个模型更高了,也就是模型的准确率上升了。