KNN算法(K-NearestNeighbor)详解(手写python代码实现+sklearn实现) 数据挖掘 分类算法 例子讲解 优缺点特点总结

2 篇文章 0 订阅
订阅专栏

KNN算法(K-NearestNeighbor)详解(手写python代码实现+sklearn实现) 数据挖掘 分类算法 例子讲解 优缺点特点总结

1、KNN算法(K-NearestNeighbor)的介绍

为了判定未知样本的类别,以全部训练样本作为代表点,计算未知样本与所有训练样本的距离,并以最近邻者的类别较多的作为决策未知样本类别的唯一依据。
在这里插入图片描述

度量方式包括:欧式距离,曼哈顿距离,切比雪夫距离等

2、KNN算法的优缺点

  • 算法的优点就是简单易懂

  • 算法的缺点是

    1、只适合小数据集(每次预测都要用到全部的数据集)
    2、数据不平衡,也就是类别分布不统一的话,会打破平衡
    3、必须使用数据标准化,量纲不同的话,会导致结果被量纲大的数据所影响
    4、不适合特征维度过多的数据
    5、KNN是基于局部信息进行预测,对噪声非常敏感,K值的选取很重要,过小会导致对噪声敏感(容易过拟合),过大会包含过多其他的类别(容易欠拟合),影响最终的结果
    在这里插入图片描述

3、KNN算法的手写实现

手写算法思路:
在这里插入图片描述
例子如下:
在这里插入图片描述

代码实现:

import numpy as np

def getMaxinN(NArray,y):
    max_dist = 0
    max_index = 0
    print(NArray)
    for i in range(len(NArray)):
        print(np.abs(NArray[i][0] - y[0]))
        if abs(NArray[i][0] - y[0]) > max_dist :
            max_dist = NArray[i][0] - y[0]
            max_index = i
    print('max_dist:',max_dist)
    print('max_index:',max_index)
    print('================================')
    return [max_dist,max_index]

if __name__ == '__main__':
    data = [
        [1.6, 1],
        [2, 2],
        [1.9, 3],
        [1.88, 3],
        [1.7, 1],
        [1.85, 3],
        [1.6, 1],
        [1.7, 1],
        [2.2, 2],
        [2.1, 2],
        [1.8, 3],
        [1.95, 3],
        [1.9, 3],
        [1.8, 3],
        [1.75, 3]
    ]
    k = 5
    # 存放最近的五个点
    N = []
    TextData = [1.6]
    for i in range(len(data)):
        if i<k:
            N.append(data[i])
        else :
            max_arr = getMaxinN(N,TextData)
            if np.abs(data[i][0]-TextData[0]) < max_arr[0]:
                N.pop(max_arr[1])
                N.append(data[i])
    print(N)

    flag_arr = []
    for i in range(len(N)):
        flag_arr.append(N[i][1])

    frequencyNum = 0
    result = 0
    for i in range(max(flag_arr)):
        flagNum = flag_arr.count(i+1)
        if flagNum>frequencyNum:
            frequencyNum = flagNum
            result = i+1
    print(f'即最终的结果为,1.6属于{result}类' )

4、KNN算法的sklearn实现

1、导入sklearn模块与numpy模块
在这里插入图片描述

2、加载数据,并划分训练以及测试集
在这里插入图片描述

注意:这里的训练数据和测试数据的形状如果不是(n,1)的,要reshape(-1,1),标签则不需要,直接一行即可
3、实例化KNN分类器并用训练数据进行训练
在这里插入图片描述

4、使用模型对测试数据进行预测并计算准确率
在这里插入图片描述

运行结果如下:
在这里插入图片描述
完整代码:

# coding=utf8
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
import numpy as np

def KNN(data,target):
    # 设置随机种子,确保每次产生的随机数都一样
    np.random.seed(0)
    shuffle_arr = np.random.permutation(len(data))  # 生成打乱的ndarray索引
    ratio = 0.8
    num = int(ratio*len(data))
    # 划分训练集和测试集
    data_train = data[shuffle_arr[:num]]        # 注意:训练数据的形状如果不是(n,1)的,要reshape(-1,1)
    target_train = target[shuffle_arr[:num]]
    data_test = data[shuffle_arr[num:]]         # 注意:测试数据的形状如果不是(n,1)的,要reshape(-1,1)
    target_test = target[shuffle_arr[num:]]

    # 定义KNN分类器对象,k值为5
    knn = KNeighborsClassifier(n_neighbors=5)
    # 调用fit方法进行训练,接受训练集数据和标签
    knn.fit(data_train, target_train)

    # 调用预测方法,对数据进行预测
    predict = knn.predict(data_test)
    print('正确标签:', target_test)
    print('预测标签:', predict)

    # 计算准确率
    score = knn.score(data_test, target_test, sample_weight=None)
    print('准确率:', score)

    # 计算出预测属于每个分类的概率
    probility = knn.predict_proba(data_test)
    print(probility)

    print(knn.predict(np.array([[1.6]])))

if __name__ == '__main__':

    # 数据准备
    # iris = datasets.load_iris()
    # data = iris['data']  # 数据  都是ndarray类型的
    # target = iris['target']  # 数值型标签分类
    # target_name = iris['target_names']  # 数值型标签对应的分类名称

    example = np.array([
        [1.6, 1],
        [2, 2],
        [1.9, 3],
        [1.88, 3],
        [1.7, 1],
        [1.85, 3],
        [1.6, 1],
        [1.7, 1],
        [2.2, 2],
        [2.1, 2],
        [1.8, 3],
        [1.95, 3],
        [1.9, 3],
        [1.8, 3],
        [1.75, 3]
    ])
    data = example[:,0].reshape(-1,1)
    target = example[:,1]
    KNN(data,target)



5、KNN的特点总结

  1. 是一种基于实例的学习,需要一个邻近性度量来确定实例间的相似性或距离
  2. 不需要建立模型,但分类一个测试样例开销很大,需要计算域所有训练实例之间的距离
  3. 基于局部信息进行预测,对噪声非常敏感
  4. 最近邻分类器可以生成任意形状的决策边界,决策树和基于规则的分类器通常是直线决策边界
  5. 需要适当的邻近性度量和数据预处理,防止邻近性度量被某个属性左
KNN算法优缺点
zrh_CSDN的博客
07-09 3万+
KNN的主要优点有:1.理论成熟,思想简单,既可以用来做分类又可以做回归2.可以用于非线性分类3.训练时间复杂度比支持向量机之类的算法低3.和朴素贝叶斯之类的算法比,对数据没有假设,准确度高,对异常点不敏感4.由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属的类别,因此对于类域的交叉或重叠较多的待分类样本集来说,KNN方法较其他方法更为适合5.该算法比较适用于样本容量比较...
机器学习——k邻近算法(kNN)
Mr_marsa的博客
09-28 3393
机器学习——k近邻算法(kNN) 参考教材:机器学习实战(人民邮电出版社)Peter Harrington【美】著 语言:python 软件:VS code 1.k近邻算法的概述 k近邻算法采用不测量不同特征值之间的距离方法进行分类算法的距离计算公式为欧式距离公式: k近邻算法优缺点: 优点:精度高、对异常值不敏感、五数据输入假定。 缺点:计算复杂度高、空间复杂度高。 适用数据范围:数据型和标称型。 k近邻算法原理: 存在一个样本数据集合(训练样本集),切样本集中每...
KNN算法原理及python代码实现
最新发布
m0_74100344的博客
04-16 1556
(英文为K-Nearest Neighbor,因而又简称KNN算法)是非常经典的机器学习算法,用于分类和回归问题。其基本原理是对于一个新样本,K近邻算法的目的就是在已有数据中寻找与它最相似的K个数据,或者说“离它最近”的K个数据,如果这K个数据大多数属于某个类别,则该样本也属于这个类别。和K值的选取很大程度决定了KNN算法的结果;点距离则一般使用欧氏距离或曼哈顿距离。
K最近邻算法(KNN)---sklearn+python实现
热门推荐
05-23 4万+
k-近邻算法概述简单地说,k近邻算法采用测量不同特征值之间的距离方法进行分类。k-近邻算法优点:精度高、对异常值不敏感、无数据输入假定。缺点:计算复杂度高、空间复杂度高。 适用数据范围:数值型和标称型。      k-近邻算法(kNN),它的工作原理是:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将...
机器学习——KNN及sklearn实现
Tao_RY的博客
12-03 765
前言:简单介绍KNN算法sklearn实现 机器学习专栏:机器学习专栏 文章目录一、KNN算法原理二、算法参数1、距离2、K值二、sklearn实现KNN 一、KNN算法原理 K近邻算法是一种“懒惰学习”(lazy learning),就是你给我一个测试样本,我才需要去处理。与其相反的是“急切学习”(eager learning),即是在训练阶段就对数据进行处理。 对于分类问题,KNN算法步骤...
python编写knn算法_K最近邻算法(KNN)---sklearn+python实现方式
weixin_39805734的博客
12-03 872
k-近邻算法概述简单地说,k近邻算法采用测量不同特征值之间的距离方法进行分类。k-近邻算法优点:精度高、对异常值不敏感、无数据输入假定。缺点:计算复杂度高、空间复杂度高。 适用数据范围:数值型和标称型。k-近邻算法(kNN),它的工作原理是:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个...
K最近邻算法(KNN)---sklearn+python实现方式
09-17
K最近邻算法(K-Nearest Neighbors, 简称KNN)是一种基于实例的学习方法,也是非参数监督学习算法的一种。KNN的核心思想是通过寻找与未知类别样本最接近的K个已知类别的样本,根据这K个样本的类别分布来决定未知样本...
kNN-K最近邻(k-NearestNeighbor)算法python实现
01-06
邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表 该方法的思路是:如果一...
机器学习实战 - KNN(K近邻)算法PDF知识点详解 + 代码实现
04-27
邻近算法,或者说K最邻近(KNN,K-NearestNeighbor分类算法数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是K个最近的邻居的意思,说的是每个样本都可以用它最接近的K个邻近值来代表。近邻算法就是将数据...
python运用sklearn实现KNN分类算法
12-25
KNN(K-Nearest-Neighbours Classiflication)分类算法,供大家参考,具体内容如下 最简单的分类算法,易于理解和实现 实现步骤:通过选取与该点距离最近的k个样本,在这k个样本中哪一个类别的数量多,就把k归为哪...
knn.rar_in_knn python实现_k近邻_python 算法_近邻分类
09-23
K近邻分类算法实现 in Python
机器学习 K近邻
我是小白呀的博客
01-30 1424
机器学习 K近邻 KNN (k-neareast neighbor) 是解决分类与回归问题最基本的机器学习算法之一, 该算法没有显式的训练过程. 本节内容包括: k近邻是什么, K近邻案例实战.
机器学习——kNN算法之红酒分类
m0_52474147的博客
08-31 6279
数据集介绍数据集为一份红酒数据,总共有 178 个样本,每个样本有 13 个特征,这里不会为你提供红酒的标签,你需要自己根据这 13 个特征对红酒进行分类
KNN算法
weixin_46819123的博客
05-14 808
一、KNN算法概述 KNN可以说是最简单的分类算法之一,同时,它也是最常用的分类算法之一,注意KNN算法是有监督学习中的分类算法,它看起来和另一个机器学习算法Kmeans有点像(Kmeans是无监督学习中的聚类算法),但却是有本质区别的。 二、KNN特点 KNN是一种非参的,惰性的算法模型。 非参的意思并不是说这个算法不需要参数,而是意味着这个模型不会对数据做出任何的假设,与之相对的是线性回归(我们总会假设线性回归是一条直线)。也就是说KNN建立的模型结构是根据数据来决定的,这也比较符合现实的情况,
机器学习实战:Python基于K近邻KNN进行分类预测(四)
Senoh的博客
04-10 2951
K近邻()是一种基本的分类与回归算法。其基本思想是将新的数据样本与已知类别的数据样本进行比较,根据K个最相似的已知样本的类别进行预测。具体来说,KNN算法通过计算待分类样本与已知样本之间的距离(欧式距离曼哈顿距离等),选取距离待分类样本最近的K个已知样本,再通过对这K个已知样本的类别进行投票、取平均等方式确定待分类样本的类别。KNN算法中,K的取值是一个重要的超参数,不同的取值可能会影响算法的性能。简单易懂:KNN算法的原理简单,易于理解和实现
KNN分类算法优缺点
hscoder的博客
08-22 2万+
KNN算法的优点:1、思想简单,理论成熟,既可以用来做分类也可以用来做回归; 2、可用于非线性分类; 3、训练时间复杂度为O(n); 4、准确度高,对数据没有假设,对outlier不敏感;缺点: 1、计算量大; 2、样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少); 3、需要大量的内存;其伪代码如下: 1. 计算已知类别数据集中的点与当前点之间的距离; 2.
SklearnKNN算法
guihenao4010的博客
12-20 1077
KNN算法原理 K近邻是机器学习中常见的分类方法之间,也是相对最简单的一种分类方法,属于监督学习范畴。其实K近邻并没有显式的学习过程,它的学习过程就是测试过程。 k近邻算法思想:先给你一个训练数据集D,包括每个训练样本对应的标签。然后给你一个新的测试样本T,问你测试样本的标签预测是什么,K近邻的方法就是找到T到D中每一个样本的相似度,然后根据相似度大小对D中样本排序,取前K个最相似的样本的标签的众...
python sklearn knn快速实现,保姆级教学
weixin_39490300的博客
12-06 1587
python sklearn knn快速实现,保姆级教学
莺尾花的分类问题KNN(K-近邻)分类算法代码python
05-31
以下是莺尾花分类问题的KNN分类算法Python代码示例: ```python from sklearn.datasets import load_iris # 导入莺尾花数据集 from sklearn.model_selection import train_test_split # 划分数据集 from sklearn.neighbors import KNeighborsClassifier # KNN分类器 # 加载莺尾花数据集 iris = load_iris() # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=42) # 创建KNN分类器,K值为3 clf = KNeighborsClassifier(n_neighbors=3) # 训练模型 clf.fit(X_train, y_train) # 预测测试集的类别 y_pred = clf.predict(X_test) # 计算模型的准确率 accuracy = clf.score(X_test, y_test) print("模型的准确率为:{:.2f}%".format(accuracy * 100)) ``` 在以上代码中,首先导入莺尾花数据集并划分训练集和测试集。然后创建KNN分类器,K值为3,使用训练集来训练模型。接着,使用测试集来预测新莺尾花的类别,并计算模型的准确率。最后输出模型的准确率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 关于antd中的Form组件设置了initialValues属性后,如何在state或者props中的属性变化后,重新渲染修改Form中的数据显示的三种解决办法 React Typescript 12141
  • @Resource注解无法使用或失败以及java.lang.NoSuchMethodError:javax.annotation.Resource.lookup()的问题 9235
  • MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测 8072
  • k-means算法详解(python实现) 数据挖掘 聚类分析 k均值算法 6299
  • 关于antd的Table组件的expandedRowKeys 设置后点击展开图标无法展开的问题 6182

分类专栏

  • 云服务器 2篇
  • 课程设计 3篇
  • 数据分析实战 3篇
  • keras 1篇
  • 人工智能 1篇
  • React 3篇
  • 小程序 2篇
  • MATLAB实战 2篇
  • 数据挖掘 2篇
  • 关于antd中的Form组件设置了initialValues属性后, 1篇
  • antd的Table组件expandedRowKeys属性 1篇
  • python学习笔记 1篇
  • setState后没有更新state中的数据的问题
  • pyecharts的使用 1篇
  • @Resource注解 1篇
  • 安装软件 1篇

最新评论

  • MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测

    无心同学: 你好,YTrain是训练数据的目标变量,与之对应的就是XTrain模型输入的训练数据,x理解为自变量,y理解为因变量

  • MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测

    xixia33: 看了后面的代码,在net中突然出现的参数YTrain是从哪里来的呢?另外计算误差的时候,那个YInspect是从哪里来的?

  • 解决ssh连接不上远程服务器。解决XShell连接不上win11虚拟机的问题。Could not connect to ‘xxx‘ (port 22) VMWare 虚拟机 Xshell Xftp

    汤姆931: 感谢感谢,woc,给我整半天卡这一步

  • Python_基于长短期记忆网络(LSTM)的电商评论情感分析预测 Python数据分析实战 数据可视化 情感分类 变种RNN 电商评论情感分析 电子商务论文 自然语言处理

    Waltzvi: 请问如何获取?

  • MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测

    莓莓酒酿小丸子.: 那这个模型是不是没办法用了,还是能调整?

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • Python_基于长短期记忆网络(LSTM)的电商评论情感分析预测 Python数据分析实战 数据可视化 情感分类 变种RNN 电商评论情感分析 电子商务论文 自然语言处理
  • 我的创作纪念日
  • 解决Xftp连接不上win11虚拟机,使用ftp协议连接不上虚拟机,无法与主机连接,无法与’xxx.xxx.xxx.xxx’连接,如何将文件传输到虚拟机云服务器
2024年1篇
2023年6篇
2022年11篇
2021年6篇

目录

目录

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无心同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

深圳SEO优化公司嘉兴关键词按天计费报价东莞网站推广方案推荐酒泉关键词按天收费多少钱邵阳网站优化按天计费哪家好南充企业网站建设价格九江SEO按天计费多少钱平湖网站优化推广公司盘锦关键词排名包年推广公司昭通网站建设推荐太原推广网站公司鹰潭网站优化排名多少钱拉萨百度seo报价龙华网站关键词优化哪家好哈尔滨百度seo报价广东百度标王推荐松岗百搜标王哪家好观澜百姓网标王公司海东营销网站哪家好曲靖营销型网站建设公司洛阳英文网站建设哪家好南宁建网站多少钱阳泉seo报价聊城百度seo价格大鹏建网站推荐吉安关键词按天计费宝安seo多少钱来宾网站优化排名多少钱广东SEO按天扣费聊城关键词按天扣费多少钱梧州网站推广工具多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化