1. 问题
蒋方舟有句话说的挺好,大意是人应该多读书,那样才能开阔眼界,不读书的话,你的见识就是由你身边的亲戚朋友决定的。话说的不那么动听,但道理是这么个道理。这说明了周围环境对个人的影响。其实不只是人,数据也是,比如 K-nearest Neighbors(k-NN),就是利用身边最近的邻居来进行预测的一种算法。
2. 分析
K-nearest Neighbors 的原理很好理解。我们以二维平面为例。假设现在有一系列点, [ ( x 11 , x 12 ) , ( x 21 , x 22 ) , … , ( x n 1 , x n 2 ) ] [(x_{11}, x_{12}), (x_{21}, x_{22}),\dotsc, (x_{n1}, x_{n2})] [(x11,x12),(x21,x22),…,(xn1,xn2)],对应标签 [ y 1 , y 2 , … , y n ] ∈ [ 0 , 1 ] [y_1, y_2, \dotsc, y_n]\in [0, 1] [y1,y2,…,yn]∈[0,1]。现在有新的数据 ( x k 1 , x k 2 ) (x_{k1}, x_{k2}) (xk1,xk2),想要判断其是 0 还是 1 。
k-NN 算法,就是计算新的数据和已有数据之间的距离,然后挑选距离最近的那一个或多个的标签,具体几个,也即参数 k,可以由用户指定。一般来说,太小的 k 容易产生过拟合问题,太大的 k 又容易产生拟合不足的问题,所以选取合适的 k 值是这个算法的一个问题。
假如我们选择 k = 5 k=5 k=5,结果 3 个邻居的 y = 0,2个邻居的 y=1,应该怎么判断呢?一般来说,我们少数服从多数(simple majority vote),但也可以指定权重,比如让距离更近的权重更高。
还有一个问题时,二维空间很容易表示,但遇到多维空间,这个距离怎么算?很简单,扩充到多维空间就是了。比如变量 x 和 y 都是 n 维变量,其欧氏距离(Euclidean distance)即为
ρ = ∑ i = 1 n ( x i − y i ) 2 \rho = \sqrt{\sum_{i=1}^n(x_i - y_i)^2} ρ=i=1∑n(xi−yi)2
另外还有其他距离,比如曼哈顿距离(Manhattan distance)等。但实际应用中还是以欧氏距离最为常用。
k-NN 算法简单,功能却不简单。不仅可以做分类,还可以做回归。在图像处理、手写识别等方面,k-NN都有很广泛的应用。
而且k-NN是一种被称为无参数(non-parametric method)的机器学习方法,因为不像其他学习方法,需要根据数据学习出一系列的 Weighting,它只是根据特征值计算距离;所以在决策边界不规则的地方,应用效果尤其好。
3. 实现
我们用经典的鸢尾花数据集(iris)做个测试
import numpy as np
from sklearn import neighbors, datasets
from sklearn.model_selection import train_test_split
X, y = datasets.load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y)
clf = neighbors.KNeighborsClassifier()
clf.fit(X_train, y_train)
print("Training set score: {:.2f}".format(clf.score(X_train, y_train)))
print("Test set score: {:.2f}".format(clf.score(X_test, y_test)))
测试结果
Training set score: 0.97
Test set score: 0.97
准确率97%,很赞。
4. 总结
今天我们大致介绍了k-NN的用法。所谓物以类聚人以群分,诚不我欺。
有点怀念儿时的邻居小芳了。多年未见,一切可还安好?
相关代码均已上传到Github(https://github.com/jetorz/Data2Science)。
5. 交流
**独学而无友则孤陋寡闻。**现有「数据与统计科学」微信交流群,内有数据行业资深从业人员、海外博士、硕士等,欢迎对数据科学、数据分析、机器学习、人工智能有兴趣的朋友加入,一起学习讨论。
大家可以扫描下面二维码,添加荔姐微信邀请加入,暗号:机器学习加群。
6. 扩展
6.1. 延伸阅读
6.2. 参考文献
- G. James, D. Witten, T. Hastie R. Tibshirani, An introduction to statistical learning: with applications in R. New York: Springer, 2013.
- T. Hastie, R. Tibshirani, J. H. Friedman, The elements of statistical learning: data mining, inference, and prediction, 2nd ed. New York, NY: Springer, 2009.
- W. Härdle, L. Simar, Applied multivariate statistical analysis, 3rd ed. Heidelberg ; New York: Springer, 2012.