ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

K近邻 (KNN)算法的原理及优缺点

2019-10-28 23:01:04  阅读:696  来源: 互联网

标签:KNN plt min max 近邻 样本 优缺点 cmap clf


一、KNN算法原理

  K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法。

  它的基本思想是: 在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那个分类。

  KNN算法的描述:

    (1)计算测试数据与各个训练数据之间的距离;

    (2)按照距离的递增关系进行排序;

    (3)选取距离最小的K个点;

    (4)确定前K个点所在类别的出现频率

      (5)返回前K个点中出现频率最高的类别作为测试数据的预测分类。

  算法优点:训练时间为零。

  算法缺点:计算量太大。每一个待分类文本都要计算它到全体已知样本的距离,才能得到它的第K个最近邻点。

 

二、代码实现

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs  #make_blobs 聚类数据生成器 
from sklearn.neighbors import KNeighborsClassifier   #KNeighborsClassfier K近邻分类
#sklearn 基于Python语言的机器学习工具,支持包括分类,回归,降维和聚类四大机器学习算法。
#  还包括了特征提取,数据处理和模型评估者三大模块。
#  sklearn.datasets (众)数据集;sklearn.neighbors 最近邻


data=make_blobs(n_samples=5000,centers=5,random_state=8)
# n_samples 待生成样本的总数,sample 样本,抽样
# centers 要生成的样本中心数
# randon_state 随机生成器的种子
X,y=data
#返回值,X 生成的样本数据集;y 样本数据集的标签

plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.spring,edgecolor='k')
#c颜色,cmap Colormap实体或者是一个colormap的名字,cmap仅仅当c是一个浮点数数组的时候才使用。

clf=KNeighborsClassifier()
clf.fit(X,y)


x_min,x_max=X[:,0].min()-1,X[:,0].max()+1
y_min,y_max=X[:,1].min()-1,X[:,1].max()+1

xx,yy=np.meshgrid(np.arange(x_min,x_max,0.02),
                  np.arange(y_min,y_max,0.02))
Z=clf.predict(np.c_[xx.ravel(),yy.ravel()])
Z=Z.reshape(xx.shape)
plt.pcolormesh(xx,yy,Z,cmap=plt.cm.Pastel1)
plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.spring,edgecolor='k')
plt.title('KNN-Classifier')
plt.scatter(6.88,4.18,marker='*',s=200,c='r')
plt.xlim([x_min,x_max])


print('模型建好后的运行结果如下:')
print('=======================')
print('新加入样本的类别是:',clf.predict([[6.72,4.29]]))

print('该模型针对次数据集的分类正确率是:{:.2f}'.format(clf.score(X,y)))

输出结果:

模型建好后的运行结果如下:
=======================
新加入样本的类别是: [1]
该模型针对次数据集的分类正确率是:0.96



 

标签:KNN,plt,min,max,近邻,样本,优缺点,cmap,clf
来源: https://www.cnblogs.com/lsm-boke/p/11756173.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有