使用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: zhen """ import numpy as np import collections as cs data = 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值大小为3 for 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一般也越大,一般为取值为:type~2type之间!
4.一般k值的选择和训练数据的大小有关,可以取值为训练数据的平方根左右为宜!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架