博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用python模拟实现KNN算法
阅读量:6139 次
发布时间:2019-06-21

本文共 1577 字,大约阅读时间需要 5 分钟。

一.KNN简介

  1.KNN算法也称为K邻近算法,是 分类技术之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。
  2.KNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 KNN算法在类别决策时,只与极少量的相邻样本有关。由于KNN算法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。

二.代码实现

# -*- coding: utf-8 -*-"""使用python程序模拟KNN算法Created on Sat Jun 22 18:38:22 2019@author: zhen"""import numpy as npimport collections as csdata = np.array([        [203,1],[126,1],[89,1],[70,1],[196,2],[211,2],[221,2],[311,3],[271,3]        ])feature  = data[:,0] # 特征print(feature)label = data[:,-1] # 结果分类print(label)predictPoint = 200 # 预测数据print("预测输入特征为:" + str(predictPoint))distance = list(map(lambda x : abs(predictPoint - x), feature)) # 各点到预测点的距离print(distance)sortIndex = np.argsort(distance) # 排序,返回排序后各数据的原始下标print(sortIndex)sortLabel = label[sortIndex] # 根据下标重新进行排序print(sortLabel)# k = 3 # 设置k值大小为3for k in range(1,label.size+1):    result = cs.Counter(sortLabel[0:k]).most_common(1)[0][0] # 根据k值计算前k个数据中出现次数最多的分类,即为预测的分类    print("当k=" + str(k) + "时预测分类为:" + str(result))

三.结果

[203 126  89  70 196 211 221 311 271][1 1 1 1 2 2 2 3 3]预测输入特征为:200[3, 74, 111, 130, 4, 11, 21, 111, 71][0 4 5 6 8 1 2 7 3][1 2 2 2 3 1 1 3 1]当k=1时预测分类为:1当k=2时预测分类为:1当k=3时预测分类为:2当k=4时预测分类为:2当k=5时预测分类为:2当k=6时预测分类为:2当k=7时预测分类为:1当k=8时预测分类为:1当k=9时预测分类为:1

四.总结

  1.根据训练数据和结果可知,当k较小时【比如本次当k=1】,若训练数据存在异常数据时容易出现预测错误的情况,因此一般K值都不能太小!

  2.当k值较大时,某个分类的训练数据越多,预测成此分类的可能性越大,因此,训练数据要先根据分类进行再平衡!

  3.一般k值的选择与分类数量有关,分类数量越大,k一般也越大,一般为取值为:k~2k之间!

 

转载于:https://www.cnblogs.com/yszd/p/11070192.html

你可能感兴趣的文章
数据加密插件
查看>>
linux后台运行程序
查看>>
win7 vs2012/2013 编译boost 1.55
查看>>
IIS7如何显示详细错误信息
查看>>
Android打包常见错误之Export aborted because fatal lint errors were found
查看>>
Tar打包、压缩与解压缩到指定目录的方法
查看>>
配置spring上下文
查看>>
Python异步IO --- 轻松管理10k+并发连接
查看>>
Oracle中drop user和drop user cascade的区别
查看>>
登记申请汇总
查看>>
Office WORD如何取消开始工作右侧栏
查看>>
Android Jni调用浅述
查看>>
CodeCombat森林关卡Python代码
查看>>
第一个应用程序HelloWorld
查看>>
(二)Spring Boot 起步入门(翻译自Spring Boot官方教程文档)1.5.9.RELEASE
查看>>
Java并发编程73道面试题及答案
查看>>
企业级负载平衡简介(转)
查看>>
ICCV2017 论文浏览记录
查看>>
科技巨头的交通争夺战
查看>>
当中兴安卓手机遇上农行音频通用K宝 -- 卡在“正在通讯”,一直加载中
查看>>