ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

使用python模拟实现KNN算法

使用python模拟实现KNN算法 一.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: zhenimportnumpy as npimportcollections as cs datanp.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(lambdax : abs(predictPoint - x), feature))#各点到预测点的距离print(distance) sortIndex np.argsort(distance)#排序返回排序后各数据的原始下标print(sortIndex) sortLabel label[sortIndex]#根据下标重新进行排序print(sortLabel)#k 3 # 设置k值大小为3forkinrange(1,label.size1): 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] [04 5 6 8 1 2 7 3] [1 2 2 2 3 1 1 3 1] 当k1时预测分类为1当k2时预测分类为1当k3时预测分类为2当k4时预测分类为2当k5时预测分类为2当k6时预测分类为2当k7时预测分类为1当k8时预测分类为1当k9时预测分类为1四.总结1.从训练数据以及结果能够知道, 在k比较小的时候, 像这次k等于1的状况之下, 要是训练数据之中存在着异常数据, 那么就容易出现预测错误的情形, 所以通常K值都不可以太小2.当k值处于较大状态时, 对于某个进行了分类的情况而言, 其训练数据数量越多, 那么将其预测成为此给定分类的可能性也就越大, 所以, 训练数据需要先依据分类来开展进而实现再平衡3.通常情况下,k值的选取跟分类的数量存在关联, 分类的数量要是越大, 那么k一般而言也就会越大, 其通常的取值范围是处于: type~2type这个区间之内4.通常情况下, k值的挑选, 跟训练数据的规模存在关联, 选取训练数据平方根的数值周遭作为取值较为妥当, 这样是适宜的
返回列表