KNN — K近邻算法

【机器学习】K-近邻算法(KNN)全面解析 K-近邻算法(K-Nearest Neighbors, KNN)是一种基于实例的学习方法,属于监督学习范畴。它的工作原理简单直观:给定一个训练数据集,对新的输入实例,KNN算法通过计算其与训练集中每个实例的距离,找出距离最近的K个邻居,然后根据这些邻居的类别(对于分类任务)或值(对于回归任务)来预测新实例的类别或值。KNN因其简单高效和无需训练过程的特点,在众多领域中得到广泛应用,如模式识别、推荐系统、图像分类等。KNN算法的核心思想是“物以类聚”,即相似的数据应有相似的输出。 阅读详情

Demo

# -*- coding: utf-8 -*-
'''
Project: KNNDemo
File: demo.py
Author: Weifu Liu
Time:2020.06.12
'''
import numpy as np
import operator
import matplotlib.pyplot as plt

def createDataSet():
    '''
    Input:None
    Output:Group--a tran-dataset
           ClassLabelVector--the label of class used to plot scatter color
    Function:Prepare data       
    '''
    group = np.array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    labels = ['A','A','B','B']
    classLabelVector = []
    for label in labels:
        if label == 'A':
            classLabelVector.append(1)
        if label == 'B':
            classLabelVector.append(2)
    return group,classLabelVector

def createScatter(dataset,classLabelVector):
    '''
    Input: Sample Dataset
    Output: A Scatter Plot
    Function:Plot a scatter plot from sample dataset
    '''
    print(dataset)
    plt.scatter(dataset[:,0], dataset[:,1],alpha=0.6,c=classLabelVector)
    plt.ylabel('X')
    plt.xlabel('y')
    plt.title("KNN Demo")
    plt.show()

def classify0(inX,dataSet,labels,k):
    '''
    Input: inX - test vector
           dataset -test-dataset
           labels - categories
           k - parameter K of KNN algorithm 
    Output:result of KNN
    '''
    dataSetSize = dataSet.shape[0]
    print(dataSetSize)
    # diffMat is the value of x[i]-x[j] and y[i]-y[j]
    diffMat = np.tile(inX,(dataSetSize,1)) - dataSet
    print(diffMat)
    sqDiffMat = diffMat**2
    sqDistances = sqDiffMat.sum(axis=1)
    print(sqDistances)
    distances = sqDistances**0.5
    sortedDistIndicies = distances.argsort()
    classCount = {}
    for i in range(k):
        voteILabel = labels[sortedDistIndicies[i]]
        classCount[voteILabel] = classCount.get(voteILabel,0) + 1
    sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
    return sortedClassCount[0][0]        
    
    
def main():
    group,classLabelVector = createDataSet()
    print(group[0])
    createScatter(group,classLabelVector)
    testVec = np.array([1.2,1.1])
    k = 3
    print("测试数据的类别为:",classify0(testVec, group, classLabelVector, k))
    
if __name__ == "__main__":
    main()
    

在这里插入图片描述
在这里插入图片描述
鸢尾花测试

import numpy as np
import operator
import matplotlib.pyplot as plt
import csv
import random


def PreProcess(path):
    '''
    Input: path - the file path of dataset
    Output:None
    Function: get the tran_data and test_data
    '''
    f = open(path,'r',encoding='utf8')
    tran_csv = open('data/tran_data.csv','w',encoding='utf8',newline='')
    test_csv = open('data/test_data.csv','w',encoding='utf8',newline='')
    tran_writer = csv.writer(tran_csv)
    test_writer = csv.writer(test_csv)
    reader = csv.reader(f)
    for i in reader:
        print(i)
        rand = random.randint(1,5)
        lst = []
        lst.append(i[0])
        lst.append(i[1])
        lst.append(i[2])
        lst.append(i[3])
        if i[4] == 'Iris-setosa':
            lst.append('1')
        if i[4] == 'Iris-versicolor':
            lst.append('2')
        if i[4] == 'Iris-virginica':
            lst.append('3')
        if rand == 1:
            test_writer.writerow(lst)
        else:
            tran_writer.writerow(lst)
        
        
def LoadDataset():
    '''
    Input:None
    Output:tran_data,test_data
    Function:Load tran_data and test_data
    '''
    tran_data = np.loadtxt('data/tran_data.csv',delimiter=',')
    test_data = np.loadtxt('data/test_data.csv',delimiter=',')
    #print(dataset)
    return tran_data,test_data

def calDistance(inX,dataset,k):
    '''
    Input:Inx - test vector
          dataset - tran_data
          k - KNN K value
    Output:Predicted class
    Function:Calculate the distance to get the distance matrix
    '''
    repeatTime = dataset.shape[0]
    diffMat = np.tile(inX,(repeatTime,1)) - dataset
    #print(diffMat)
    sqDiffMat = diffMat**2
    sqDistances = sqDiffMat.sum(axis=1) - sqDiffMat[:,4]
    distances = sqDistances**0.5
    #print(distances)
    return KNNcls(distances,k,dataset)
        
def KNNcls(distances,k,dataset):
    '''
    Input: distances - the distance matrix
           k - KNN K value
           dataset - tran_data
    Output:Predicted class     
    Function:perform KNN classification to get the prediction result
    '''
    sortedDistanceIndex = distances.argsort()
    #print(sortedDistanceIndex)
    voteCount = {}
    Labels ={"1":"Iris-setosa","2":"Iris-versicolor","3":"Iris-virginica"}
    for i in range(k):
        labelID = dataset[sortedDistanceIndex[i]][4]
        #print("class ID is:",int(labelID))
        labelName = Labels[str(int(labelID))]
        #print("class label is:",labelName)
        voteCount[labelName] = voteCount.get(labelName,0) + 1
    #print(voteCount)
    sortedVoteCount = sorted(voteCount.items(),key=operator.itemgetter(1),reverse=True)
    #print('predicted = ',sortedVoteCount[0][0])
    return sortedVoteCount[0][0]
    
def main():
    ''' 
    Input:None
    Output:None
    Function:Use the classifier to test the data set for accuracy
    '''
    #path = 'data/iris.csv'
    #PreProcess(path)
    tran_data,test_data = LoadDataset()
    k = 3
    Labels ={"1":"Iris-setosa","2":"Iris-versicolor","3":"Iris-virginica"}
    sumCount = 0
    correctCount = 0
    for inX in test_data:
        print(inX)
        actualLabel = Labels[str(int(inX[4]))]
        print('actual = ',actualLabel)
        predictedLabel = calDistance(inX,tran_data,k)
        print('predicted = ',predictedLabel)
        sumCount += 1
        if actualLabel == predictedLabel:
            correctCount += 1
    print('Accuracy:',correctCount/sumCount)
    #print(test_data)
    inY = [4.9, 3.0 , 1.4, 0.2,2.0]
    preLabel = calDistance(inY,tran_data,k)
    print('predicted = ',preLabel)
    
    
if __name__ == "__main__":
    main()

测试数据
在这里插入图片描述
训练数据
在这里插入图片描述
result
在这里插入图片描述

K近邻算法(KNN)的概述与实现 KNN是一种简单但功能强大的算法,适用于分类和回归任务。然而,其计算成本和对K值的敏感性使其在处理大规模数据集或高维数据时存在一定的局限性。随着数据规模的增加,优化KNN的计算速度和性能成为一个值得探索的方向。你是否有使用KNN算法进行项目的经验?在实践中你会选择什么样的距离度量方法?欢迎分享你的看法和经验! 阅读详情

相关推荐

python 实现K近邻算法并进行可视化 调用sklearn的knn算法进行结果对比

  K近邻算法 思想:不知其人视其友 K近邻算法(knn)实现步骤:     计算当前点与已知类别数据集中的点的距离     距离递增排序,选出距离最小的k个点     确定前k个点类别出现的频率     将频率最高的类别作为当前点的预测分类 完整代码实现 #!/usr/bin/python # -*- coding: utf-8 -*- # @author: T # 导入数据集 f...

TDW blog 4256

人工智能入门 | 分类算法-KNN(原理+代码+结果)

KNN,即K最邻近算法,是数据挖掘分类技术中比较简单的方法之一,简单来说,就是根据“最邻近”这一特征对样本进行分类。

小哥谈 1万+

11、K近邻算法(KNN)

本文首先介绍了KNN算法的直观理解、算法三大要素、优缺点,并说明了如何实现KNN算法,最后讲解了sklearn中的KNN使用。

m0_56642803的博客 1206

【机器学习】分类算法 - KNN算法(K-近邻算法)KNeighborsClassifier

K-近邻算法的核心思想是根据「邻居」来「推断」你的类别。

wangyuxiang946的博客 1万+

机器学习(一):K-近邻算法(KNN)分类与回归

这是自己的第一篇机器学习的文章,单纯做自己的学习笔记,一起加油进步 K-近邻 算法(KNN)

2020重新做人的博客 6783

机器学习实战k-邻近算法(kNN)简单实施代码解读

一.概念k-邻近算法是最简单的机器学习算法之一。k-邻近算法采用测量不同特征值之间的距离(具体说是欧氏距离)的方法进行分类。输入待分类的数据后,计算输入特征与样本集数据对应特征的距离,选择样本集中与输入特征距离最小的前k个样本,统计这k个样本数据中出现次数最多的类别作为新数据的分类。二.kNN的简单实施代码及注释from numpy import * import operatordef creat

SCUT_Arucee的博客 3269

KNN(K-Nearest Neighbor)分类算法原理

1.什么是看KNN算法? 最简单最初级的分类器是将全部的训练数据所对应的类别都记录下来,当测试对象的属性和某个训练对象的属性完全匹配时,便可以对其进行分类。但是怎么可能所有测试对象都会找到与之完全匹配的训练对象呢,其次就是存在一个测试对象同时与多个训练对象匹配,导致一个训练对象被分到了多个类的问题,基于这些问题呢,就产生了KNN。 KNN是通过测量不同特征值之间的距离进行分类。它的

沈春旭的博客 2万+

K-近邻算法(KNN)

欧几里得距离二维:​。

if_Echo_else的博客 1764

机器学习-KNN分类算法

由于找到的结果中大多数是猫,则把这个新动物划分为猫类。如果k值太大,学习的近似误差会增大,导致分类模糊,即欠拟合。对图5.2中的动物进行分类,当k=3时,分类结果为“猫:狗=2:1”,所以属于猫;当k=5时,表决结果为“猫:狗:熊猫=2:3:1”,所以判断目标动物为狗。KNN分类算法的核心思想:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。分类结果的确定往往采用多数表决原则,即由输入实例的k个最邻近的训练实例中的多数类决定输入实例的类别。

qq_55882840的博客 2091

K近邻算法(knn)及R实现

K近邻算法,即K-Nearest Neighbor algorithm,简称KNN算法,单从名字来猜想,可以简单粗暴的认为是:K个最近的邻居,当K=1时,算法便成了最近邻算法,即寻找最近的那个邻居。为何要找邻居?打个比方来说,假设你来到一个陌生的村庄,现在你要找到与你有着相似特征的人群融入他们,所谓入伙。     用官方的话来说,所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练

古韦的专栏 5899

机器学习3—分类算法之K邻近算法(KNN)

加载数据集采用loadtxt()函数加载酒类数据集,采用逗号(,)来分割。划分数据集由于Wine数据集第一列为类标,后面13列为13个酒类特征,获取其中两列特征,并将其划分成特征数组和类标数组,调用concatenate()函数实现。KNN训练调用Sklearn机器学习包中KNeighborsClassifier()函数训练,设置K值为3类,并调用clf.fit(train_data,train_target)训练模型,clf.predict(test_data)预测分类结果。...

ex_6450的博客 3247

机器学习之KNN最邻近分类算法

KNN算法简介 KNN(K-Nearest Neighbor)最邻近分类算法是数据挖掘分类(classification)技术中最简单的算法之一,其指导思想是”近朱者赤,近墨者黑“,即由你的邻居来推断出你的类别。 KNN最邻近分类算法的实现原理:为了判断未知样本的类别,以所有已知类别的样本作为参照,计算未知样本与所有已知样本的距离,从中选取与未知样本距离最近的K个已知样本,根据少数服从多数...

pengjunlee的博客 21万+

K近邻分类器实现代码knn.py

K近邻分类器实现代码 ,正确率高达百分之99.8

K-邻近算法(KNN)

1. KNN 算法原理 k-近邻算法(k-Nearest Neighbour algorithm)的工作原理:给定一个已知标签类别的训练数据集,输入没有标签的新数据后,在训练数据集中找到与新数据最邻近的 k 个实例,如果这 k 个实例的多数属于某个类别,那么新数据就属于这个类别。即由那些离新数据最近的 k 个实例来投票决定新数据归为哪一类。 最邻近分类算法是数据挖掘分类(classificat...

wangprince2017 1万+

基于相位检测与锁相环的DIY超声波风速仪设计与实现

相位检测是信号处理中的一项基础技术,它通过测量两个周期信号之间的相位差来获取信息。其核心原理在于,当信号在介质中传播时,外部因素(如风速)会改变其传播速度,从而导致接收端信号的相位发生偏移。锁相环(PLL)是实现高精度相位检测的关键电路,它能动态调整本地振荡器的频率,以跟踪并锁定输入信号的相位,从而将微小的相位变化转换为易于测量的电压信号。这项技术的工程价值在于其对电路精度要求相对较低,鲁棒性好,非常适合低成本、高灵敏度的测量应用。在气象监测、工业传感和消费电子等领域,相位检测技术被广泛用于风速风向测量、位

weixin_29540599的博客 385

arcgis select by attributes一次选多个_视频:如何基于ArcGIS与GeoDa求莫兰指数和绘制莫兰散点图?...

莫兰指数是全域莫兰指数(Global Moran's I)的简称,是澳大利亚统计学家帕特里克·阿尔弗雷德·皮尔斯·莫兰(Patrick Alfred Pierce Moran),在1950年提出的。详细介绍,如下:莫兰指数取值范围在-1.0至1.0之间。当Moran's I >0时,表示空间正相关性,其值越大,空间相关性越明显;当Moran's I <0时,表示空间负相关性...

weixin_39948247的博客 1758

K近邻算法(k-nearest neighbor,KNN)

K近邻算法(k-nearest neighbor,KNN) 经过一周昏天黑地的加班之后,终于到了周末,又感觉到生活如此美好,遂提笔写一写KNN,这个也许是机器学习众多算法中思想最为简单直白的算法了,其分类思想,总结起来就一句话:近朱者赤,近墨者黑。当然,KNN也可以用于回归任务,在回归任务中,采用“平均法”,即把离预测样本最近的K个样本的label(连续值)取平均作为预测结果,也可以根据距离远近进...

天泽28的专栏 6255

安卓新奇玩机工具全攻略___联发科MTK v6 限时免费 刷写固件工具操作

摘要:该文介绍一款限时免费的联发科V6刷机工具,支持小米、Vivo、Moto等多品牌设备,包括红米Note14Pro等机型(Klimt/Goya等代码)。工具需注册使用,提供EFS分区备份功能。作者提示工具可能触发杀毒警报,强调禁止非法用途,并说明部分联网工具可能失效。

小马哥的专栏 1310

KNN算法(k近邻算法)原理及总结

KNN 算法,或者称 k最邻近算法,是有监督学习中的分类算法。它可以用于分类或回归问题,但它通常用作分类算法。

m0_74405427的博客 14万+

YOLO26涨点改进 |独家创新,小目标涨点改进篇 | Arxiv 2025 | MHAF‑YOLO,引入RepHMS高效特征提取模块,适合轻量级目标检测、小目标检测、图像分类、旋转目标检测、实例分割

本文提出了一种改进的YOLO26目标检测模型,通过引入RepHMS模块和多分支辅助特征金字塔结构(MAFPN),显著提升了模型性能。RepHMS模块采用多分支异构卷积和重参数化策略,在不增加推理开销的情况下增强多尺度特征提取能力,尤其提升了小目标检测效果。实验表明,改进后的MHAF-YOLO模型在COCO数据集上仅用7.1M参数就达到48.9% AP,相比YOLO11-s参数量减少24.4%而性能提升1.9%。文章详细介绍了RepHMS模块的原理、实现代码及在YOLO26中的集成方法,并提供了两种改进配置。

Ai缝合怪、助力小伙伴高效发论文 197

[特殊字符] 从零构建携程/飞猪机票价格爬虫:Python异步抓取与反爬对抗实战

在出行决策、竞品分析、价格预测模型训练等场景中,稳定获取携程(Ctrip)和飞猪(Fliggy)的实时机票价格波动数据是刚需。然而,这两大平台均部署了业界顶尖的反爬体系——包括但不限于:动态请求签名(SignToken设备指纹采集(UACanvasWebGL接口参数加密(X-Sign_abtestcookie混淆)频率限制与 IP 封禁(滑动窗口 + 行为检测)目录前言:为什么需要自建机票价格爬虫?一、技术选型与项目架构1.1 核心技术栈1.2 系统架构图(文字描述)1.3 法律与道德声明。

2201_76125261的博客 336

k近邻算法K-Nearest Neighbors(KNN)

KNN算法的核心思想以及相关优化

2401_88885149的博客 1880

双端之Nginx+Php结合PostgreSQL搭建Wordpress

制作的 PG4WP 分支版本,它与所有版本的 WordPress 兼容,解决了原版的一些问题。参数,确保 PostgreSQL 正在监听默认端口(通常是 5432),或者你自定义的端口。:PG4WP 插件存在缺陷和不完整的功能,可能与最新版本的 WordPress 不兼容。的插件,它允许 WordPress 使用 PostgreSQL 数据库。,如果看到 Nginx 的默认欢迎页面,说明 Nginx 已正确安装。,如果看到 Nginx 的默认欢迎页面,说明 Nginx 已正确安装。

宇宙第一小趴菜的博客 1891

机器学习——K-近邻算法(KNN)

K-近邻算法(K-Nearest Neighbors, 简称 KNN)是一种基于实例的机器学习算法,广泛应用于分类和回归任务。它通过计算数据点之间的相似度(通常是距离度量),然后预测新的数据点的标签或数值。在图像分类任务中,KNN 可以通过计算图像特征向量之间的距离来分类,例如手写数字识别。KNN 可用于垃圾邮件检测,通过比较新邮件和历史邮件的相似性,判断其类别。原则,根据 kkk 个最近邻居的类别进行投票,选出出现最多的类别。基于用户相似度的推荐系统中,KNN 常用于查找兴趣相似的用户群体。

CYTLOVELY的博客 4914

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: C++面试——最小的K个数(LeetCode 面试题40)
下一篇: 2021-07-17烦烦烦
玄蛰
博客等级 码龄9年 89粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值