首页 > 编程语言 >K近邻算法

K近邻算法

时间:2022-11-04 12:25:19浏览次数:37  
标签:样本 标签 近邻 labels 算法 数据

K近邻算法知识背景:K-近邻法(K-nearest neighbor, K-NN)是1967年由Cover T和Hart P提出的一种基本分类与回归方法(百度的)。它的工作原理是:存在一个样本数据集合,也称作为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一个数据与所属分类的对应关系。输入没有标签的新数据后,将新的数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本最相似数据(最近邻)的分类标签。也就是在一个训练集中带有标签的样本数据,然后输入一个新数据,根据一个K值(后面会写到)范围内的最多数据样本来判断这个新数据的标签。
K近邻算法的算法步骤(在已经给了训练集的情况下):1.计算新数据点与各个训练集的距离,一般是以欧氏距离为标准。2.按照距离递增进行排序。3.输入一个K值,然后根据这个K值取前K个点(按照距离递增排序的点)。4.按照前K个点频率最高的标签定义为新数据的标签。

欧氏距离计算公式:

算法实现:NBA每年的选秀大会都是热点,各个球队也会根据新秀身高体重给出位置定位(大概就是适合在球队中打什么位置)。

而我可以将在集美大学篮球校队的部分球员的定位及身高体重数据作为训练集,而集美大学新生作为一个新的数据点去代入这个训练集,去寻找较为接近的位置。
代码实现:
from numpy import *
import operator
def UserDataInt():
#输入集美大学球员身高体重位置数据作为训练集
group = array([[175,65],[177,72],[189,88],[190,90],[183,80],[188,82]])
labels = ['后卫','后卫','中锋','中锋','前锋','前锋']
return group,labels
def Knn(inX, dataSet, labels, k):
dataSetSize = dataSet.shape[0]

diffMat = tile(inX, (dataSetSize, 1)) - dataSet

sqDiffMat = diffMat**2

sqDistances = sqDiffMat.sum(axis=1)

distances = sqDistances**0.5

sortedDistIndices = distances.argsort()

classCount = {}
for i in range(k):
    #对前K个球员进行排序
    voteIlabel = labels[sortedDistIndices[i]]
    
    classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1

sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)

return sortedClassCount[0][0]

i = 0
print("\n新球员数据")
NewdataInt = array([[183,80],[170,66],[190,90]])
Newdatabestclass = []
for i in range(3):
Newdatabestclass.append(Knn(NewdataInt[i], group, labels, 3))
#默认K值为3
print('新球员%d:身高%3dm 体重%3dkg 位置理论上更适合是: %s'%(i+1,myTests[i][0],myTests[i][1],Newdatabestclass[i]))

标签:样本,标签,近邻,labels,算法,数据
From: https://www.cnblogs.com/V1ncent56/p/16845392.html

相关文章

  • 实验二:逻辑回归算法实验
    【实验目的】理解逻辑回归算法原理,掌握逻辑回归算法框架;理解逻辑回归的sigmoid函数;理解逻辑回归的损失函数;针对特定应用场景及数据,能应用逻辑回归算法解决实际分类问题。......
  • 前端100题」包含算法、Vue、Reac、Javascript、浏览器等真题和答案
    目录(https://github.com/Advanced-Frontend/Daily-Interview-Question)第1题:写React/Vue项目时为什么要在列表组件中写key,其作用是什么?.6第2题:['1','2','3'......
  • 实验二 逻辑回归与算法实验
    【实验目的】理解逻辑回归算法原理,掌握逻辑回归算法框架;理解逻辑回归的sigmoid函数;理解逻辑回归的损失函数;针对特定应用场景及数据,能应用逻辑回归算法解决实际分类问题......
  • 贪心算法简单实践 -- 分糖果、钱币找零、最多区间覆盖、哈夫曼编解码
    1.贪心算法概览贪心算法是一种算法思想。希望能够满足限制的情况下将期望值最大化。比如:Huffman编码,Dijkstra单源最短路径问题,Kruskal最小生成树等问题都希望满足限制的情......
  • 基于GRNN广义回归神经网络的飞机引擎剩余使用周期预测算法的研究
    目录一、理论基础1.1数据分析1.2特征提取1.3GRNN二、核心程序三、仿真测试结果作者ID:fpga和matlabCSDN主页:https://blog.csdn.net/ccsss22?type=blog擅长技术:1.无......
  • 基于gamebased算法的动态频谱访问matlab仿真
    目录一、理论基础二、核心程序三、测试结果一、理论基础随着越来越多的新型无线应用,对频谱资源的需求越来越大。在这种情况下,这是举世公认的认知无线电的出现已经成为......
  • 分红包算法
    自己的想法红包生成算法:1,利用随机函数,产生最大,最小红包之间的数。(这样的话,数据之间的落差太大,没有意思)2,使红包能够近似正太分布就符合自然规律些。怎样构造正太分布效果......
  • 实验二:逻辑回归算法实验
    学号:201613305姓名:冯莹【实验目的】理解逻辑回归算法原理,掌握逻辑回归算法框架;理解逻辑回归的sigmoid函数;理解逻辑回归的损失函数;针对特定应用场景及数据,能应用逻辑回归......
  • 算法题--重建二叉树
    6要求时间限制:1秒空间限制:32768K题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输......
  • 数据结构(一):(顺序表)设计算法删除所有数字字符
    好家伙,写作业 什么是顺序表:顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性......