《Python机器学习基础教程》学习笔记(3) k近邻算法(knn)

概述

《Python机器学习基础教程》学习笔记(3) k近邻算法(knn)_第1张图片

k近邻算法(knn),是一个理论上比较成熟的方法,也是最简单的机器学习算法之一,常用于分类,也用于回归。

原理及实现:挖个坑

 

应用

分类

数据集:mglearn的forge

调用方法:sklearn.neighbors.KNeighborsClassifier库的KNeighborsClassifier方法

import mglearn
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

X, y = mglearn.datasets.make_forge()
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
clf = KNeighborsClassifier(n_neighbors=3).fit(X_train, y_train)
print("Test set accuracy: {:.2f}".format(clf.score(X_test, y_test)))

当参考邻居数为1和3时的效果图(五角星为新样本)

《Python机器学习基础教程》学习笔记(3) k近邻算法(knn)_第2张图片《Python机器学习基础教程》学习笔记(3) k近邻算法(knn)_第3张图片

可以看到,当参考邻居数变化时,左上角的五角星的分类发生了变化

再将参考邻居数为1,3,9,26时的决策边界可视化,可以发现,模型预测的质量随着参考邻居数的增长先增高后降低,而当增长至与样本点的个数相等时,总是判断为训练集中占多数的类别,预测的质量最低

《Python机器学习基础教程》学习笔记(3) k近邻算法(knn)_第4张图片

 

回归

数据集:mglearn的wave

调用方法:sklearn.neighbors.KNeighborsRegressor库的KNeighborsRegressor方法

import mglearn
from sklearn.neighbors import KNeighborsRegressor
from sklearn.model_selection import train_test_split

X, y = mglearn.datasets.make_wave(n_samples=40)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
reg = KNeighborsRegressor(n_neighbors=3).fit(X_train, y_train)
print("Test set R²: {:.2f}".format(reg.score(X_test, y_test)))

k近邻回归算法对一个新的实例的预测值为训练集中离该实例最近的k个实例的平均值。将参考邻居数为1,3,9,40时的预测结果可视化,可以发现情况与分类算法相近

《Python机器学习基础教程》学习笔记(3) k近邻算法(knn)_第5张图片

评价

sklearn.KNeighbors库中的方法有两个重要参数:①参考邻居个数;②数据点之间距离的度量方法(默认为欧式距离)

k近邻算法的优点是简单粗暴,但缺点也十分严重:当数据量增大时,算法需要进行大量的计算,这时,预测的速度就会慢下来;其次就是,对于大多数特征的取值都为0的数据集(即稀疏数据集),效果尤其不好

在实践中往往不会用到k近邻算法

你可能感兴趣的:(机器学习)