K_最邻近算法:k最邻近算法又称为knn算法,是一种有监督的机器学习算法。k_邻近算法的核心思想是:未标记的样本类别,由距离其最近的k个邻居投票决定。距离计算一般采用欧式距离或者曼哈顿距离。
具体原理如下:
(1)计算测试数据与每个样本之间的距离,按照距离的递增关系排序。
(2)选取距离最小的k个点。
(3)统计k个点对应的类别出现的频率,频率最高的就是我们要求得测试数据的类别。
优点:准确性高,对噪音不敏感。
缺点:计算量大,对内存要求高。
变种:(1)默认情况下,都是使用相同的权值;
(2)可以针对不同的邻居指定不同的权重。
(3)可以使用一定半径内的点取代距离最近的k个点。
"""
使用knn算法做一个简单的分类
"""
from sklearn.datasets.samples_generator import make_blobs
import matplotlib.pyplot as plt;
from sklearn.neighbors import KNeighborsClassifier as knn;
import numpy as np;
center=[[-2,-3],[5,5],[3,1]];
x,y=make_blobs(n_samples=120,centers=center,cluster_std=0.6,random_state=0);
clf=knn(n_neighbors=5)
clf.fit(x,y);
x_test=[[0,5]];
y_pre=clf.predict(x_test);
print(y_pre)#打印的结果是2,说明属于center中的第三类。
kn=clf.kneighbors(x_test,return_distance=False)
print(kn)
plt.figure();
c=np.array(center);
plt.scatter(x[:,0],x[:,1],s=100,cmap="cool")
plt.scatter(c[:,0],c[:,1],s=100,marker="^",c="orange")
plt.scatter(x_test[0][0],x_test[0][1],marker="*",s=100,cmap="cool");
for i in kn[0]:
print(x[i][0],x_test[0][0])
print(x[i][1],x_test[0][1])
plt.plot((x[i][0],x_test[0][0]),(x[i][1],x_test[0][1]));
plt.show();
运行结果:
[2]
[[ 49 107 77 42 51]]
2.701180529584617 0
2.1577192322901917 5
2.556262202165212 0
1.9258087572440414 5
4.105245444376637 0
5.263635020758722 5
2.2647386887018994 0
1.5066177858409282 5
2.3062905409068524 0
1.468718861025996 5