ppython 实现k nearest neighbours k最近邻分类算法

news2024/9/27 9:30:52

k nearest neighbours k最近邻分类算法介绍

K最近邻(KNN, K-Nearest Neighbor)分类算法是数据挖掘分类技术中最简单的方法之一,也是机器学习领域中一种基本的分类和回归方法。以下是对K最近邻分类算法的详细解释:

核心思想

KNN算法的核心思想是:如果一个样本在特征空间中的K个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。这种分类决策只依赖于最邻近的一个或几个样本的类别,而不需要构建复杂的分类模型。

算法流程

准备数据:对数据进行预处理,包括特征选择、特征缩放等。

确定K值:K是一个预先设定的正整数,表示在训练集中选取与待分类点最近的邻居数量。K值的选择对最终预测结果有显著影响,需根据具体问题和数据特性进行合理选择。

距离计算:计算待分类点与训练集中每一个点之间的距离。常用的距离度量包括欧氏距离、曼哈顿距离等。

寻找最近的K个邻居:根据计算得到的距离,按由近及远排序,选择与待分类点距离最近的K个训练数据点作为其邻居。

类别决策:统计这K个邻居中各个类别的出现频率,将待分类点归为出现频率最高的类别。这种决策规则被称为“多数表决”或“硬投票”。

特点

简单易懂:KNN算法概念清晰,实现过程直观,便于理解与解释。
无需假设数据分布:KNN是非参数方法,不依赖于数据的具体分布形式,适用于各种类型的数据集。
适应性强:能够处理多种类型的数据(如数值型、名义型、序数型等),且对于缺失值和异常值有一定的鲁棒性。
计算复杂度高:随着训练集规模增大,每次预测时都需要计算待分类点与所有训练点的距离,导致时间复杂度较高。
存储需求大:KNN算法需要保存整个训练集,对于大规模数据集,存储成本可能过高。
对异常值敏感:异常值可能对预测结果产生较大影响。
对类别不平衡问题处理欠佳:当数据集中各类别样本数量严重不均衡时,KNN可能偏向于将新样本分类为样本数量较多的类别。

应用场景

KNN算法凭借其通用性和灵活性,在众多商业和科研领域有着广泛的应用,包括金融市场分析、图像识别、文本分类等。

k nearest neighbours k最近邻分类算法python实现样例

下面是一个简单的Python实现k最近邻分类算法的示例:

import numpy as np
from collections import Counter

# 计算欧氏距离
def euclidean_distance(x1, x2):
    return np.sqrt(np.sum((x1 - x2) ** 2))

class KNN:

    def __init__(self, k=3):
        self.k = k

    def fit(self, X, y):
        self.X_train = X
        self.y_train = y

    def predict(self, X):
        y_pred = [self._predict(x) for x in X]
        return np.array(y_pred)

    def _predict(self, x):
        # 计算所有训练样本与输入样本的距离
        distances = [euclidean_distance(x, x_train) for x_train in self.X_train]
        # 按距离排序,并获取最近的k个样本的索引
        k_indices = np.argsort(distances)[:self.k]
        # 获取这k个样本的标签
        k_nearest_labels = [self.y_train[i] for i in k_indices]
        # 返回众数作为预测结果
        most_common = Counter(k_nearest_labels).most_common(1)
        return most_common[0][0]

使用示例:

# 定义训练数据
X_train = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])
y_train = np.array(['red', 'red', 'blue', 'blue', 'red', 'blue'])

# 创建KNN模型,设置k=3
knn = KNN(k=3)
# 训练模型
knn.fit(X_train, y_train)

# 定义测试数据
X_test = np.array([[2, 2], [6, 9], [1, 1], [10, 10]])
# 预测测试数据的标签
y_pred = knn.predict(X_test)

# 打印预测结果
print(y_pred)  # 输出 ['red' 'blue' 'red' 'blue']

这个示例中使用的是欧氏距离进行距离度量,可以根据需要修改为其他距离度量方式。同时,可以根据实际情况调整k值来获取更好的分类结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2169575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

弹簧状态检测系统源码分享

弹簧状态检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

Linux中安装ffmpeg

Linux中安装ffmpeg 一、下载二、安装三、测试 一、下载 先到这里下载ffmpeg。 二、安装 先将上传到服务器的某一目录,我这里是: /usr/local/ffmpeg 然后解压,解压命令如下: tar -xvf “你的安装包名称”我的是: ta…

流浪软件uniaccess agent 删除

cmd的C盘找不到就用git rm -rf 之后,只剩下 俩文件夹删不掉 然后360软件就看到了,可惜卸载失败 然后360文件就找到了,彻底删除 再回git 查看 方法 https://blog.51cto.com/u_16099347/11352333 https://blog.csdn.net/xioayu96/article/…

Linux下线程间的通信

为什么需要线程通信? 线程是操作系统调度的最小单元,拥有自己的栈空间。如果线程之间孤立运行,可能会导致资源浪费。线程需要协调工作以完成共同的任务,这就需要线程间相互通信 在 Linux 系统中,线程间通信&#xff…

请问这张图是ai绘画吗?

小白可做!全自动AI影视解说一键成片剪辑工具https://docs.qq.com/doc/DYnl6d0FLdHp0V2ll 先来结论,找到用这图的某宝店老板了,老板说不是AI画的。 真相只有一个,有图有真相 再来化身柯南,看看寻找答案的过程 要判断这张…

重考!CSP-J/S 2024第一轮认证泄题后续进展及疑问

2024年9月26日晚间,NOI官网发布了”对部分被认证者进行CSP-J/S 2024第一轮重新认证的公告“,对少儿编程培训机构老师举报陕西鸿泉教育培训机构泄题一事进行了最新的回应。 对涉嫌参加该机构培训的学生的CSP-J/S 2024第一轮入门级、提高级认证成绩不予认可…

<<编码>> 第 21 章 总线连接(Get on the Bus) 示例电路

比较器 info::操作说明 鼠标单击开关切换开合状态 鼠标单击逻辑输入切换 0|1 状态 若上方和左边的输入相同, 则输出高电平 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/code-hlchs-examples/assets/circuit/code-hlchs-ch21-0…

力扣(LeetCode)每日一题 2207. 字符串中最多数目的子序列

题目链接https://leetcode.cn/problems/maximize-number-of-subsequences-in-a-string/description/?envTypedaily-question&envId2024-09-24 给你一个下标从 0 开始的字符串 text 和另一个下标从 0 开始且长度为 2 的字符串 pattern ,两者都只包含小写英文字母…

Vue中使用Hls.js进行视频直播的播放

HLS.js使用文档 1、安装组件&#xff1a; npm install hls.js --save2、引入组件&#xff1a; import Hls from hls.js3、使用组件&#xff1a; // DOM&#xff1a; <video id"video" controls loop"false"></video> // DATA: let hls nul…

[深度学习]卷积神经网络CNN

1 图像基础知识 import numpy as np import matplotlib.pyplot as plt # 图像数据 #imgnp.zeros((200,200,3)) imgnp.full((200,200,3),255) # 可视化 plt.imshow(img) plt.show() # 图像读取 imgplt.imread(img.jpg) plt.imshow(img) plt.show() 2 CNN概述 卷积层convrelu池…

实战OpenCV之色彩空间转换

基础入门 色彩空间是描述颜色的一种数学模型&#xff0c;它定义了颜色的三个或更多维度&#xff0c;比如&#xff1a;亮度、色相和饱和度等。最著名的色彩空间之一是RGB&#xff0c;它基于人眼对光的感知原理&#xff0c;通过红、绿、蓝三种基本颜色的不同强度组合来表示几乎所…

【HarmonyOS】鸿蒙仿iOS线性渐变实现

【HarmonyOS】仿照IOS中可以通过输入start&#xff08;0&#xff0c;0&#xff09;&#xff0c;end&#xff08;1&#xff0c;1&#xff09;获取角度到.linearGradient&#xff0c;从而实现左上到右下渐变 class Point {x: number 0y: number 0 }Entry Component struct Page…

开源链动 2+1 模式 S2B2C 商城小程序:激活 KOC,开启商业新征程

摘要&#xff1a;本文深入探讨了 KOC 在立体连接中的重要性&#xff0c;以及如何通过开源链动 21 模式 S2B2C 商城小程序发现和找到更多的 KOC。强调了历史积累强关系和快速强化强关系的方法&#xff0c;并阐述了该商城小程序在推动商业发展中的关键作用。 一、引言 在当今竞争…

mysql 内存被打满记录

一&#xff1a;早上收到报警&#xff1a;提示&#xff1a;您的云数据库RDS的1个实例因存储空间满将被锁定&#xff0c;请关注实例的存储空间使用情况&#xff0c;可通过存储扩容或空间清理解除锁定。后续查看错误日志如下&#xff1a;磁盘没有空间了 没有多余的空间写binlog和…

2024年下安徽省事业编考试报名流程(电脑)

2024年下安徽省事业编考试报名流程&#xff08;电脑&#xff09;

极狐GitLab 17.4 升级指南

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab https://dl.gitlab.cn/6y2wxugm 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文分享极狐GitLab 17.4 升级…

【JVM】垃圾释放方式:标记-清除、复制算法、标记-整理、分代回收

文章目录 1. 标记-清除2. 复制算法4. 标记-整理4. 分代回收 把标记为垃圾的对象的内存空间进行释放。主要有三种释放方式 1. 标记-清除 把标记为垃圾的对象&#xff0c;直接释放掉&#xff08;最朴素的做法&#xff09; 此时就是把标记为垃圾的对象所对应的内存空间直接释放。…

【机器学习】探索LSTM:深度学习领域的强大时间序列处理能力

目录 &#x1f354; LSTM介绍 &#x1f354; LSTM的内部结构图 2.1 LSTM结构分析 2.2 Bi-LSTM介绍 2.3 使用Pytorch构建LSTM模型 2.4 LSTM优缺点 &#x1f354; 小结 学习目标 &#x1f340; 了解LSTM内部结构及计算公式. &#x1f340; 掌握Pytorch中LSTM工具的使用. &…

反光柱定位算法-雷达强度数据包

反光柱定位算法-雷达强度数据包 反光柱定位算法-雷达强度数据包 作者&#xff1a; 苏凯 系统环境&#xff1a; 系统&#xff1a;ubuntu20.04 ros1版本&#xff1a; noetic 雷达: sick TM581 强度值标定文件&#xff1a; scanIntensities.txt 部署在环境中的反光柱数据…

类和对象(2)

文章目录 &#x1f3af;引言&#x1f453;类和对象(2)1.类的默认成员函数2.构造函数2.1构造函数概念 3.析构函数3.1. **析构函数的定义**3.2. **析构函数的特点** 4.拷贝构造函数4.1. **拷贝构造函数的定义** 5.赋值运算符重载5.1运算符重载5.2赋值运算符重载5.3日期类的实现 &…