iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >KNN算法原理及python实现
  • 174
分享到

KNN算法原理及python实现

python机器学习 2023-10-22 11:10:44 174人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

文章目录 1 KNN算法原理1.1 基本概念1.2 KNN算法原理1.3 实现步骤1.3 KNN算法优缺点 2 python手工实现KNN算法2.1 KNN算法预测单个数据2.2 KNN算

文章目录

1 KNN算法原理

1.1 基本概念

KNN(K-NearestNeighbor)即K近邻算法,是数据挖掘分类技术中最简单的方法之一。所谓K近邻,就是K个最近的邻居的意思,说的是每个样本都可以用它最接近的K个邻近值来代表。

1.2 KNN算法原理

在这里插入图片描述
假设特征空间有8个样本点,其中红色点为良性肿瘤,蓝色点为恶性肿瘤,现在要预测绿色点是良性肿瘤还是恶性肿瘤,我们需要计算出绿色点到所有其他样本点的距离,选择出距离最小的K个点,对K个点所属的类别进行比较,根据少数服从多数的原则,将测试样本点归入在K个点中占比最高的那一类。计算距离方法一般采用欧拉距离公式:在这里插入图片描述
n维特征空间欧式距离计算公式
在这里插入图片描述

1.3 实现步骤

总体来说,KNN分类算法包括以下4个步骤:
①准备数据,对数据进行预处理
②计算测试样本点(也就是待分类点)到其他每个样本点的距离 。
③对每个距离进行排序,然后选择出距离最小的K个点。
④对K个点所属的类别进行比较,根据少数服从多数的原则,将测试样本点归入在K个点中占比最高的那一类。

1.3 KNN算法优缺点

优点:

1)思想简单、效果强大。
2)天然可解决多分类问题。
2)重新训练的代价较低(类别体系的变化和训练集的变化,在WEB环境和电子商务应用中是很常见的)。
3)计算时间和空间线性于训练集的规模(在一些场合不算太大)。

缺点:
1)效率低下,如果训练集有m个样本,n个特征,则预测每一个新的数据,计算复杂度O(m*n)
2)高度数据相关,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数;对数据的局部结构比较敏感。如果查询点是位于训练集较密集的区域,那预测相对比其他稀疏集来说更准确。
3)预测结果不具有可解释性,只是找到了预测样本距离最近的样本点,不知道为什么属于预测类别。
4)维数灾难:随着维度增加,看似距离很近的2个点距离越来越大
在这里插入图片描述

2 python手工实现KNN算法

2.1 KNN算法预测单个数据

import matplotlib.pyplot as pltimport numpy as np#创建样本数据x_data = [[1,2],[3,7],[4,3],[2,5],[5,1],[8,2]]x_data = np.array(x_data)y_data = [1,1,0,1,0,0]y_data = np.array(y_data)

样本数据分布情况
在这里插入图片描述
假设测试数据为(6,7),在特征空间分布情况如下
在这里插入图片描述

from math import sqrt#计算测试数据到所有样本点距离distance = []for data in x_data:    d = sqrt(np.sum((data-x_test)**2))    distance.append(d)nearest = np.argsort(distance)#最近的3个样本点top_k = y_data[nearest[:3]]#k个样本点投票最多的from collections import Countery_predict = Counter(top_k).most_common(1)[0][0]

2.2 KNN算法预测数据集

import numpy as npfrom collections import Counterfrom math import sqrtfrom sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitclass KNNClassifier:    # 初始化KNN分类器,并对k赋值    def __init__(self, k):        self.k = k        self.x_train = None        self.y_train = None    # 根据训练数据集x_train和y_train训练kNN分类器    def fit(self, x_train, y_train):        self.x_train = x_train        self.y_train = y_train        return self    # 给定单个待预测数据x,返回x的预测结果值    def __predict(self, x_test):        distance = [sqrt(np.sum((data - x_test) ** 2)) for data in self.x_train]        aa = np.argsort(distance)        top_k = self.y_train[aa[:self.k]]        votes = Counter(top_k).most_common(1)[0][0]        return votes    # 给定待预测数据集X_predict,返回表示X_predict的结果向量    def predict(self, X_test):        y_predict = [self.__predict(x) for x in X_test]        return y_predict    def score(self, y_true, y_predict):        percent = np.sum(y_true == y_predict) / len(y_true)        return percentiris = load_iris()x_data = iris.datay_data = iris.targetx_train, x_test, y_train, y_test = train_test_split(x_data, y_data, test_size=0.2)knn = KNNClassifier(k=3)knn.fit(x_train, y_train)y_predict = knn.predict(x_test)percent = knn.sores(y_test, y_predict)

2.3 sklearn实现KNN算法

from sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom sklearn.neighbors import  KNeighborsClassifieriris = load_iris()x_data = iris.datay_data = iris.targetx_train, x_test, y_train, y_test = train_test_split(x_data, y_data, test_size=0.2)knn = KNeighborsClassifier(n_neighbors=3)knn.fit(x_train, y_train)y_predict = knn.predict(x_test)percent = knn.score(x_test,y_test)

来源地址:https://blog.csdn.net/weixin_45137294/article/details/123776746

--结束END--

本文标题: KNN算法原理及python实现

本文链接: https://www.lsjlt.com/news/439627.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • KNN算法原理及python实现
    文章目录 1 KNN算法原理1.1 基本概念1.2 KNN算法原理1.3 实现步骤1.3 KNN算法优缺点 2 python手工实现KNN算法2.1 KNN算法预测单个数据2.2 KNN算...
    99+
    2023-10-22
    python 机器学习
  • 深入浅出KNN算法(一) KNN算法原理
    KNN可以说是最简单的分类算法之一,同时,它也是最常用的分类算法之一,注意KNN算法是有监督学习中的分类算法,它看起来和另一个机器学习算法Kmeans有点像(Kmeans是无监督学习算法),但却是有本质区别的。那么什么是KNN算法呢,接...
    99+
    2023-01-31
    算法 深入浅出 原理
  • KNN算法的Python实现
    # KNN算法思路:#-----------------------------------------------------##step1:读入数据,存储为链表#step2:数据预处理,包括缺失值处理、归一化等#step3:设置K值#s...
    99+
    2023-01-31
    算法 KNN Python
  • 怎样理解和实现KNN算法
    今天就跟大家聊聊有关怎样理解和实现KNN算法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。knn介绍邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数...
    99+
    2023-06-04
  • 怎么用python代码实现knn算法
    下面是一个简单的示例代码,实现了knn算法:```pythonimport numpy as npfrom collections ...
    99+
    2023-10-11
    python knn算法
  • 使用Python处理KNN分类算法的实现代码
    目录KNN分类算法的介绍测试数据Python代码实现结果分析简介: 我们在这世上,选择什么就成为什么,人生的丰富多彩,得靠自己成就。你此刻的付出,决定了你未来成为什么样的人...
    99+
    2024-04-02
  • Java Bellman-Ford算法原理及实现方法
    本篇内容介绍了“Java Bellman-Ford算法原理及实现方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一 点睛如果遇到...
    99+
    2023-07-02
  • Dijkstra算法原理及C++怎么实现
    这篇文章主要介绍“Dijkstra算法原理及C++怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Dijkstra算法原理及C++怎么实现”文章能帮助大家解决问题。什么是最短路径问题如果从图中...
    99+
    2023-07-02
  • 详解JavaBellman-Ford算法原理及实现
    目录一 点睛二 算法步骤三 算法实现四 测试一 点睛 如果遇到负权边,则在没有负环(回路的权值之和为负)存在时,可以采用 Bellman-Ford 算法求解最短路径。该算法...
    99+
    2024-04-02
  • 图文详解感知机算法原理及Python实现
    目录写在前面1.什么是线性模型2.感知机概述3.手推感知机原理4.Python实现4.1 创建感知机类4.2 更新权重与偏置4.3 判断误分类点4.4 训练感知机4.5 动图可视化5...
    99+
    2024-04-02
  • 详解Dijkstra算法原理及其C++实现
    目录什么是最短路径问题Dijkstra算法实现思路案例分析代码实现什么是最短路径问题 如果从图中某一顶点(称为源点)到达另一顶点(称为终点)的路径可能不止一条,如何找到一条路径使得沿...
    99+
    2024-04-02
  • 随机森林算法(Random Forest)原理分析及Python实现
    目录 一、基础概念1.监督式机器学习2. 回归和分类3. 决策树4. 随机森林 二、Random Forest 的构造1. 算法实现2.数据的随机选取3. 待选特征的随机选取 三、Ra...
    99+
    2023-09-27
    python 算法 随机森林
  • 图文详解牛顿迭代算法原理及Python实现
    目录1.引例2.牛顿迭代算法求根3.牛顿迭代优化4 代码实战:Logistic回归1.引例 给定如图所示的某个函数,如何计算函数零点x0 在数学上我们如何处理这个问题? 最简单的办...
    99+
    2024-04-02
  • kNN分类算法实例1:用kNN改进约会网
    目录 实战内容 用sklearn自带库实现kNN算法分类 将内含非数值型的txt文件转化为csv文件 用sns.lmplot绘图反映几个...
    99+
    2023-01-31
    算法 实例 kNN
  • GBDT算法原理以及实例理解(含Python代码简单实现版)
    一、算法简介: GBDT 的全称是 Gradient Boosting Decision Tree,梯度提升树,在传统机器学习算法中,GBDT算的上是TOP前三的算法。 想要理解GBDT的真正意义,那...
    99+
    2023-09-01
    python 算法 机器学习
  • 图文详解梯度下降算法的原理及Python实现
    目录1.引例2.数值解法3.梯度下降算法4.代码实战:Logistic回归1.引例 给定如图所示的某个函数,如何通过计算机算法编程求f(x)min? 2.数值解法 传统方法是数值解...
    99+
    2024-04-02
  • react diff 算法实现思路及原理解析
    目录事例分析diff 特点diff 思路实现 diff 算法修改入口文件实现 React.Fragment我们需要修改 children 对比前面几节我们学习了解了 react 的渲...
    99+
    2024-04-02
  • 一文搞懂JavaMD5算法的原理及实现
    目录MD5加密简介MD5加密原理MD5加密常用方法MD5加密简介 哈希算法又称散列算法,是将任何数据转换成固定长度的算法的统称。 从本质上讲,MD5也是一种哈希算法,其输出...
    99+
    2024-04-02
  • SPFA算法的实现原理及其应用详解
    目录一、前言二、SPFA 算法1、SPFA算法的基本流程2、代码详解三、SPFA 算法已死一、前言 SPFA算法,全称为Shortest Path Faster Algorithm,...
    99+
    2023-05-20
    SPFA算法原理 SPFA算法应用 SPFA算法
  • Python机器学习之KNN近邻算法
    目录一、KNN概述二、使用Python导入数据三、numpy.array()四、实施KNN分类算法五、计算已知类别数据集中的点与当前点之间的距离六、完整代码七、数据处理、分析、测试八...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作