python机器学习监督学习算法之K近邻

中科白癜风医院好吗 https://baike.baidu.com/item/%E5%8C%97%E4%BA%AC%E4%B8%AD%E7%A7%91%E7%99%BD%E7%99%9C%E9%A3%8E%E5%8C%BB%E9%99%A2/9728824?fr=aladdin

K近邻(K-NN)算法可以说是最简单的机器学习算法。构建模型只需要保存训练集即可。想要对新数据进行预测,算法会在训练数据集中找到最近的数据点,也就是他们的“邻居”。根据选取的邻居个数不同,其预测精度可能不一样,最简单的模型就是指选取一个邻居。

1、单一(或者10个)最近邻模型对forge数据集的预测结果代码和图形如下:

importmglearn

mglearn.plots.plot_knn_classification(n_neighbors=1)

mglearn.plots.plot_knn_classification(n_neighbors=10)

运行后生成的图形如下:

由此可见,选择的近邻个数不同,预测结果有所变化。

2、下面,我们来看下分别使用1,2,8个近邻对forge数据进行分析预测,对应的代码如下:

importmatplotlib.pyplotasplt

importmglearn

importnumpyasnp

fromsklearn.model_selectionimporttrain_test_split

x,y=mglearn.datasets.make_forge()

x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=0)

fromsklearn.neighborsimportKNeighborsClassifier

clf=KNeighborsClassifier(n_neighbors=3)

clf.fit(x_train,y_train)

print(Testsetpredicitons:{}.format(clf.predict(x_test)))

print(Testsetaccuracy:{:.2f}.format(clf.score(x_test,y_test)))

fig,axes=plt.subplots(1,3,figsize=(10,3))

forn_neighbors,axinzip([1,2,8],axes):

#fit方法返回对象本身,所以我们可以将实例化和拟合放在一行代码中

clf=KNeighborsClassifier(n_neighbors=n_neighbors).fit(x,y)

mglearn.plots.plot_2d_separator(clf,x,fill=True,eps=0.5,ax=ax,alpha=.4)

mglearn.discrete_scatter(x[:,0],x[:,1],y,ax=ax)

ax.set_title({}neighbor(s).format(n_neighbors))

ax.set_xlabel(feature0)

ax.set_ylabel(feature1)

axes[0].legend(loc=3)

运行后的带的决策辩解结果如下:

如上分析,我们发现使用的近邻个数越多,则分类的曲线越平滑,也就是说,使用的紧邻越少对应越高的复杂度,使用的近邻个数越多对应越低的复杂度。

假如考虑极端情况,也就是近邻个数等于训练集中所有的数据点个数,那么每个测试点的邻居都完全相同(即所有训练点),所有预测的结果也完全相同(训练接种出现次数最多的类别)。

下节我们将使用乳腺癌数据集对上述推论进行论证,如果对此节内有什么疑问或建议,欢迎留言讨论!喜欢此类内容就请


转载请注明:http://www.aierlanlan.com/rzgz/2894.html