机器学习之K-最邻近算法(1)

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
标题

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值