基于python的KNN原理及实现

KNN算法(K-Nearest Neighbors Algorithm)是一种常见的监督学习算法,用于分类和回归问题。它的基本思想是根据数据样本之间的距离度量来进行分类或回归预测。

KNN算法原理

  1. 计算测试样本与训练集中所有样本之间的距离,可以使用欧几里得距离、曼哈顿距离等距离度量方式。

  2. 根据距离大小对训练集中的样本进行排序。

  3. 选取与测试样本距离最近的K个样本,这些样本称为最近邻样本。

  4. 在分类问题中,对于K个最近邻样本,统计它们所属的类别,并将测试样本归属于出现次数最多的类别。

  5. 在回归问题中,对于K个最近邻样本,计算它们的平均值,并将测试样本预测为这些值的平均值。

KNN算法的实现过程如下:

  1. 加载数据集,并将数据集分为训练集和测试集。

  2. 对数据集进行归一化处理,例如将数据缩放到0到1的范围。

  3. 对测试集中的每个样本,计算其与训练集中所有样本之间的距离。

  4. 对距离排序,选取距离最近的K个训练样本。

  5. 对于分类问题,统计这K个样本所属的类别,将测试样本分类为出现次数最多的类别。对于回归问题,计算这K个样本的平均值,将测试样本预测为这些值的平均值。

  6. 对于每个测试样本,计算预测结果的准确率或均方误差(MSE)等指标,评估模型的性能。

import numpy as np
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split

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

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

    def predict(self, X_test):
        y_pred = []
        for x in X_test:
            distances = [np.sqrt(np.sum((x - x_train)**2)) for x_train in self.X_train]
            nearest_indices = np.argsort(distances)[:self.k]
            nearest_labels = [self.y_train[i] for i in nearest_indices]
            y_pred.append(max(set(nearest_labels), key=nearest_labels.count))
        return np.array(y_pred)

# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 对数据集进行归一化处理
scaler = StandardScaler()
X = scaler.fit_transform(X)

# 分割数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练KNN模型
knn = KNN(k=5)
knn.fit(X_train, y_train)

# 预测测试集
y_pred = knn.predict(X_test)

# 计算模型的准确率
accuracy = np.sum(y_pred == y_test) / len(y_test)
print('Accuracy:', accuracy)

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

作为大学生,你还不会搭建chatGPT微应用吗?

目录 引言ChatGPT是什么?背景:ChatGPT敢为人先,打破全球僵局示例演示:基于ChatGPT微应用实现的条件及步骤(1)整体框架(2)搭建前的准备工作(3)实际搭建步骤&a…

文件或目录损坏怎么办?4个实用方法!

案例:文件或目录损坏怎么恢复? 【有谁知道为什么文件会突然无法打开且显示损坏了呀?我有一个很重要的文件无法打开了,之前从来没有遇到过这样的问题,这让我很无措,请大家帮我想想办法吧!】 我…

ThreeJS-聚光等衰减(二十一)

聚光灯可以联系到现实中的手电筒 衰减分为:距离衰减和边缘衰减 .decay : Float(控制的是灯光自身的亮度) The amount the light dims along the distance of the light. Default is 2. In context of physically-correct rendering the defa…

pip lanms-neo报错问题

pip lanms-neo报错问题 安装Polygon3的时候,就遇到需要Microsoft Visual C 14.0的问题,以为通过本地whl安装,就能避免。结果,lanms-neo这个库,网上还不好找whl文件,找到的都是csdn里面的付费下载&#xff…

【Java8最优解】P1478 陶陶摘苹果(升级版)

陶陶摘苹果(升级版) 题目描述 又是一年秋季时,陶陶家的苹果树结了 nnn 个果子。陶陶又跑去摘苹果,这次他有一个 aaa 公分的椅子。当他手够不着时,他会站到椅子上再试试。 这次与 NOIp2005 普及组第一题不同的是&…

HotSpot笔记——共享库操作

共享库操作前言MakefileHotspot的Makefile如何定义需要共享库使用编译选项使用链接器选项dlopendlsym前言 jvm启动时,libjli.so、libjvm.so、libjava.so这些共享库的加载操作,都是c语言的,我们记录一下这些操作函数。 Makefile 以下是一个…

python学习笔记2

使用链接: Python 3 basics - GeeksforGeeks 对应的英文是: 这里联想一下Redis的数据类型: string list set hash zset 列表 有一个细节,可以看到下面的输出里面也带了中括号: 字典 第一行定义的时候是中括号,因为…

文章八:YOLOv5车牌识别系统的Web应用与API开发

在本篇文章中,我们将探讨如何使用YOLOv5车牌识别系统开发一个Web应用,以及如何创建一个车牌识别API供其他开发者使用。我们将介绍Flask框架的基本概念,并实现一个简单的车牌识别Web应用和API。 车牌识别视频Flask框架介绍 Flask是一个轻量级的…

vue-cropper 拖动图片和截图框

现象 开发遇到vue--cropper不能拖动图片和截图框 解决方法 can-move-box设置为true,表示可以拖动截图框 can-move设置为true,表示可以拖动图片 *注意: 我外层套了一个el-col, el-col的宽高一定要大于截图框的宽高,否则移动不了…

网络安全工程师做什么?

​ 网络安全很复杂。数字化转型、远程工作和不断变化的威胁形势需要不同的工具和不同的技能组合。 系统必须到位以保护端点、身份和无边界网络边界。负责处理这种复杂安全基础设施的工作角色是网络安全工程师。 简而言之,网络安全工程师是负责设计和实施组织安全系…

ELK、ELFK企业级日志分析系统

目录 一、ELK简介 1、什么是ELK 2、ELK工作原理及过程​编辑 3、ELK相关名词介绍 ①Elasticsearch介绍 ②Logstash介绍 ③Kibana介绍 ④Fluentd介绍 ⑤Filebeat介绍 二、ELK部署 1、实验环境 2、安装elasticsearch 3、安装logstash ​编辑4、安装kiabana ​编辑…

网站是怎么屏蔽脏话的呢:简单学会SpringBoot项目敏感词、违规词过滤方案

一个社区最重要的就是交流氛围与审查违规,而这两者都少不了对于敏感词进行过滤的自动维护措施。基于这样的措施,我们才能基本保证用户在使用社区的过程中,不至于被敏感违规词汇包围,才能够正常的进行发布帖子和评论,享…

unity3d:asset store上C#代码热重载插件,不需要重运行,重新加载更新后函数

C#热重载插件地址 https://assetstore.unity.com/packages/tools/utilities/hot-reload-edit-code-without-compiling-250972?clickref1011lwHg8abv&utm_sourcepartnerize&utm_mediumaffiliate&utm_campaignunity_affiliate#description 打开热重装有两种方法 …

地库位置复杂如何导航,反向寻车系统解决方案

地库位置复杂如何导航?问路这一行为在迷路时确实比较高效,但是得到的信息往往还是过于碎片和混乱,尤其是在停车场内,通过问路去往目的地既费时又费力。而有了停车场地图,这个问题就迎刃而解了。停车场地图可以帮助驾车…

金山云最新财报的两个历史新高:毛利创新高,亏损创新高

‍数据智能产业创新服务媒体——聚焦数智 改变商业2023年3月29日,中国领先的独立云服务提供商金山云(美股代码:KC)发布了截至2022年12月31日的四季度财报与年度业绩数据。金山云首席执行官邹涛先生表示:“我们以喜人的…

【IoT】乐鑫WiFI选型指南

目录 1、简介 2、ESP32系列 2.1、ESP32-S2 2.2、ESP32-C3 2.3、ESP32-S3 最近要替换在用的wifi模组,这就涉及到选型。 1、简介 首先来到乐鑫官网:提供 Wi-Fi、蓝牙芯片和 AIoT 解决方案 I 乐鑫科技 可以看到,乐鑫的产品从大的层面分为三…

SpringBoot集成actuator监控服务-自动配置将康检查

前言 SpringBoot监控管理 微服务的特点决定了功能模块的部署是分布式的,大部分功能模块都是运行在不同的机器上,彼此通过服务调用进行交互,前后台的业务流会经过很多个微服务的处理和传递,出现了异常如何快速定位是哪个环节出现了…

算法设计-搜索

一、BFS 模板 ​ 如下所示 set<Node> visited;bool check(Node son);int bfs(Node start) {// initqueue<Node> q;q.push(start);visited.insert(start);while (!q.empty()){Node front q.front();q.pop();for (son : q.neigbour){// pruneif (check(son)){q.pu…

MySQL教程——基础篇

MySQL教程MySQL教程——基础篇MySQL概述关系型数据库数据模型SQLSQL通用语法SQL数据类型SQL分类DDLDMLDQL基本查询条件查询聚合函数分组查询排序查询分页查询案例训练执行顺序DCL用户管理权限控制函数字符串函数数值函数日期函数流程函数约束概述约束演示外键约束添加外键删除外…

【ChatGPT】ChatGPT 能否取代程序员?

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 前言: ChatGPT 的优势 自然语言的生成 文本自动生成 建立了更人性化的人机交互 ChatGPT 的局限性 算法的解释能力较差 程序的可实现性较差 缺乏优化和质量控制 程序员相较于 …
最新文章