K-近邻算法(kNN)详解

简介: K-近邻算法(kNN)详解
from numpy import *
import operator
#导入科学计算包NumPy和运算符模块
def creatDataSet():
    #创建数据集(样本点集)和标签
    group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
    labels = ['A', 'A', 'B', 'B']
    return group, labels
group, labels = creatDataSet()
def classify0(inX, dataSet, labels, k):
    #K-近邻算法,inX表示输入的要被分类的新数据,dataSet表示用来训练算法的数据集(样本点集),labels表示标签,k表示用于选择最近邻居的数目(整数)
    dataSetSize = dataSet.shape[0]
    #dataSet.shape[0]读取数据集(样本点集)第一维的长度
    #欧氏距离公式d = ((x1 - x2)^2 + (y1 - y2)^2)^0.5,以下四行代码完成了这个公式的运算
    diffMat = tile(inX, (dataSetSize, 1)) - dataSet
    #tile(inX, (dataSetSize, 1))将inX重复dataSetSize次,每次重复一遍,然后每个数据均与dataSet相减
    sqDiffMat = diffMat ** 2
    sqDistances = sqDiffMat.sum(axis = 1)
    #sqDiffMat.sum(axis = 1)表示将sqDiffMat中的数据横向相加,例如[1.0, 1.1]横向相加后就为[2.1]
    distances = sqDistances ** 0.5
    #
    sortedDistIndicies = distances.argsort()
    #distances.argsort()将得到的distances从小到大排序然后返回索引值给sortedDistIndicies.例如:[3, 1, 4, 0]在执行argsort()后将返回[4, 2, 1, 3],因为排序后元组从小到大为[0, 1, 3, 4]每个元素在原始元组内的索引值为4、2、1、3
    classCount = {}
    #定义一个字典,用于储存不同标签出现的次数
    for i in range(k):
        #迭代的取前k个样本点的标签,并计算每个标签出现的次数,然后返回距离新数据最近的样本点的标签
        voteIlabel = labels[sortedDistIndicies[i]]
        #返回第sortedDistIndicies[i]个样本点的标签并赋值给voteIlabel
        classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
        #dict.get(key,default=None)获得classCount中voteIlabel对应的值,然后加1再重新赋值给classCount中的voteIabel
    sortedClassCount = sorted(classCount.items(), key = operator.itemgetter(1), reverse = True)
    #将classCount的键按classCount的值的大小从大到小进行排序,key = operator.itemgetter(1)表示获取一域的值(第一个域是零域),reverse = True表示降序排序
    return sortedClassCount[0][0]
    #返回classCount中value最大的key
result = classify0([1, 0.5], group, labels, 2)
print(result)
#将[1,0.5]作为测试点,检测K-近邻算法是否正常将数据分类


creatDataSet()创建的数据集和标签在平面直角坐标系中表示如下


image.png


输入测试点后,K-近邻算法将会分别比较测试点与四个样本点之间的距离,并把距离测试点最近的样本点的标签返回,这样就可以确定测试点应该被打上哪个标签。


相关文章
|
2月前
|
机器学习/深度学习 数据采集 人工智能
【机器学习算法篇】K-近邻算法
K近邻(KNN)是一种基于“物以类聚”思想的监督学习算法,通过计算样本间距离,选取最近K个邻居投票决定类别。支持多种距离度量,如欧式、曼哈顿、余弦相似度等,适用于分类与回归任务。结合Scikit-learn可高效实现,需合理选择K值并进行数据预处理,常用于鸢尾花分类等经典案例。(238字)
|
9月前
|
机器学习/深度学习 资源调度 算法
基于入侵野草算法的KNN分类优化matlab仿真
本程序基于入侵野草算法(IWO)优化KNN分类器,通过模拟自然界中野草的扩散与竞争过程,寻找最优特征组合和超参数。核心步骤包括初始化、繁殖、变异和选择,以提升KNN分类效果。程序在MATLAB2022A上运行,展示了优化后的分类性能。该方法适用于高维数据和复杂分类任务,显著提高了分类准确性。
|
机器学习/深度学习 算法 API
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
|
机器学习/深度学习 算法
机器学习入门(三):K近邻算法原理 | KNN算法原理
机器学习入门(三):K近邻算法原理 | KNN算法原理
|
机器学习/深度学习 算法 Python
机器学习入门:理解并实现K-近邻算法
机器学习入门:理解并实现K-近邻算法
190 0
|
算法 Python
KNN
【9月更文挑战第11天】
217 13
|
算法 大数据
K-最近邻(KNN)
K-最近邻(KNN)
|
机器学习/深度学习 算法 数据挖掘
R语言中的支持向量机(SVM)与K最近邻(KNN)算法实现与应用
【9月更文挑战第2天】无论是支持向量机还是K最近邻算法,都是机器学习中非常重要的分类算法。它们在R语言中的实现相对简单,但各有其优缺点和适用场景。在实际应用中,应根据数据的特性、任务的需求以及计算资源的限制来选择合适的算法。通过不断地实践和探索,我们可以更好地掌握这些算法并应用到实际的数据分析和机器学习任务中。
knn增强数据训练
【7月更文挑战第28天】
226 2
|
机器学习/深度学习 存储 并行计算
C语言与机器学习:K-近邻算法实现
C语言与机器学习:K-近邻算法实现

热门文章

最新文章