KNN算法代码实现

article/2025/9/7 7:59:57

原理:

KNN 算法也叫K近邻算法。假设给定一个训练数据集,其中的实例类别已定。它是通过找到一个数据集中与目标数据最近的K个邻居,然后通过多数表决等方式来预测目标数据的分类结果进行预测

三要素:

距离度量、K值、分类决策规则

功能:

KNN算法是一种基于实例的学习算法,不需要对数据进行建模,因此非常适合用于分类和回归问题。它也是监督学习方法里的一种常用方法。

主要实现步骤:

计算测试数据与各训练数据之间的距离。

按照距离的大小进行排序。

选择其中距离最小的k个样本点。

确定K个样本点所在类别的出现频率。

返回K个样本点中出现频率最高的类别作为最终的预测分类。

对癌症肿瘤进行预测

import numpy as np
import matplotlib.pyplot as plt
from collections import Counter  # 为了做投票# raw_data_x属于特征值,分别属于患病时间和肿瘤大小
raw_data_x = [[3.3935, 2.3312],[3.1101, 1.7815],[1.3438, 3.3684],[3.5823, 4.6792],[2.2804, 2.8670],[7.4234, 4.6965],[5.7451, 3.5340],[9.1722, 2.5111],[7.7928, 3.4241],[7.9398, 0.7916]]# raw_data_y属于目标值,0代表良性肿瘤,1代表恶性肿瘤
row_data_y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]class KNNClassifier:def __init__(self, k):assert k > 1, "K值必须大于1"self.k = kself.x_train = Noneself.y_train = Nonedef fit(self, x_train, y_train):"""根据训练数据集x_train和y_train训练分类器x_train: 训练数据的特征y_train: 训练数据的目标"""assert x_train.shape[0] == y_train.shape[0], "x_train的大小必须等于y_train的大小"assert self.k <= x_train.shape[0], "x_train的大小必须大于K"self.x_train = x_trainself.y_train = y_traindef euc_dis(self, instance1, instance2):"""计算两个样本instance1和instance2之间的欧式距离instance1: 第一个样本, array型instance2: 第二个样本, array型"""dist = np.sqrt(sum((instance1 - instance2) ** 2))return distdef knn_classify(self, testInstance):"""给定一个测试数据testInstance, 通过KNN算法来预测它的标签。testInstance: 测试数据,这里假定一个测试数据为array型"""distances = [self.euc_dis(x, testInstance) for x in self.x_train]kneighbors = np.argsort(distances)[:self.k]count = Counter(self.y_train[kneighbors])return count.most_common()[0][0]def score(self, x_test, y_test):"""根据测试样本x_test进行预测,和真实的目标值y_test进行比较,计算预测结果的准确度"""predictions = [self.knn_classify(x) for x in x_test]correct = np.count_nonzero((predictions == y_test) == True)return float(correct)/len(x_test)def __repr__(self):return "KNN(k={})".format(self.k)if __name__ == "__main__":# 从数据集中选择2个样本为测试样本, 其余的均为训练样本x_train = np.array(raw_data_x[:-2])y_train = np.array(row_data_y[:-2])x_test = np.array(raw_data_x[-2:])y_test = np.array(row_data_y[-2:])knn = KNNClassifier(3)knn.fit(x_train, y_train)score = knn.score(x_test, y_test)print("测试精确度为: %.3f" % score)# 未知的待分类样本x_test2 = np.array([8.9093, 3.3657])result = knn.knn_classify(x_test2)if result == 0: result = "良性肿瘤"else: result = "恶性肿瘤"print("对[8.9093, 3.3657]的预测结果为:【%s】" % result)

结果:

 


http://chatgpt.dhexx.cn/article/IgFiwcZr.shtml

相关文章

KNN中的优化算法KD-tree

我们知道KNN是基于距离的一个简单分类算法&#xff0c;熟悉KNN的都知道&#xff0c;我们要不断计算两个样本点之间的距离&#xff0c;但是&#xff0c;试想一下&#xff0c;如果数据量特别大的时候&#xff0c;我们要每个都计算一下&#xff0c;那样计算量是非常大的&#xff0…

KNN算法代码

一、K近邻算法 KNN是一种监督学习类别的算法&#xff0c;全称&#xff08;K-NearestNeighbor&#xff09;直译为K个最近的邻居&#xff0c;是一种聚类算法。该算法认为我们在判断一个物体的类别可以根据与他非常相似的K个物体的类别&#xff08;这K个物体的类别是已知的&#x…

KNN数据缺失值填充(附源码和数据)不调用包

KNN估计 数据缺失值填充—KNN估计一、基本思想二、步骤1.导入数据2.查看空缺值3.取出要分析的数据4.计算平均值5.计算标准差6.规范化7.计算欧几里得距离8.最优解9.画图 总结 数据缺失值填充—KNN估计 运行环境 python3.6 jupyter notebook 一、基本思想 先将数据标准化&…

数据挖掘——KNN算法的实现

&#x1f468;‍&#x1f4bb;作者简介&#xff1a;练习时长两年半的java博主 &#x1f4d6;个人主页&#xff1a;君临๑ &#x1f381; ps&#xff1a;点赞是免费的&#xff0c;却可以让写博客的作者开心好几天&#x1f60e; 文章目录 一、k-最近邻分类算法介绍 二、k-NN的特…

KNN算法调优

1.所用方法: 交叉验证与网格搜索 交叉验证(为了让被评估的模型更加精确可信): 所有训练集数据分成N等分&#xff0c;几等分就是几折交叉验证 网格搜索:调参数 K-近邻:超参数K 2.API: sklearn.model_selection.GridSearchCV&#xff1a; CV即cross validation…

计算机编程—必备基础知识点

目录&#xff1a; 1. 编程语言1.1 编程1.2 计算机语言1.3 编程语言1.4 翻译器1.5 编程语言和标记语言区别 2. 计算机基础2.1 计算机组成2.2 数据存储2.3 数据存储单位2.4 程序运行 1. 编程语言 1.1 编程 编程&#xff1a;就是让计算机为解决某个问题而使用某种程序设计语言编…

计算机概论--计算机基础知识快速入门

0.前言1.计算机&#xff1a;辅助人脑的好工具 1.1计算机硬件的五大单元1.2CPU的种类1.3接口设备1.4运作流程 2.个人计算机架构与接口设备 2.1CPU2.2内存2.3显卡2.4硬盘与存储设备2.5主板 3.软件程序执行 3.1机器程序与编译程序3.2操作系统 3.2.1操作系统内核3.2.2系统调用 3.3小…

0基础如何开始学习计算机知识?

一、计算机的基本操作 计算机中只有文件和文件夹 计算机中&#xff0c;只有两样东西&#xff0c;文件和文件夹。 文件夹&#xff1a;本身不存储数据内容。文件夹是用来组织和管理文件的。 文件&#xff1a; 所有的txt文本文档&#xff0c;音乐&#xff0c;视频&#xff0c;图…

【电脑讲解】电脑知识入门大全,超详细电脑基础知识讲解

这是一个新坑&#xff0c;希望大家喜欢 电脑的基础知识大全&#xff0c;你确定都知道? 一、软件系统 软件系统包括&#xff1a;操作系统、应用软件等。应用软件中电脑行业的管理软件&#xff0c;IT电脑行业的发展必备利器&#xff0c;电脑行业的erp软件。 二、硬件系统 硬件系…

计算机知识01:计算机基础知识入门

1. 计算机运行流程 如果不是很了解电脑运行流程的话&#xff0c;我们可以类比一下&#xff0c;假设电脑是一个人体&#xff0c;那么每个元件对应到哪个地方呢&#xff1f;可以这样思考&#xff1a; CPU脑袋&#xff1a;每个人会做的事情都不一样&#xff08;微指令集的差异&a…

IP地址(IP Address)

IP Address在网络中&#xff0c;通信节点都需要一个IP地址 以点分十进制表示&#xff0c;有32位二进制构成&#xff08;大约43亿&#xff09; 分为两个部分&#xff1a;网络位和主机位 网络位&#xff1a;代表IP地址所属的网段 主机位&#xff1a;代表网点上的某个节点 由子…

IP地址构成 ,以及如何求“网络地址“以及“广播地址“

IP地址&#xff08;英语&#xff1a;IP Address, 全称&#xff1a;Internet Protocol Address&#xff09;又称互联网协议地址。当设备连接网络&#xff0c;设备将被分配一个IP地址&#xff0c;用作标识。通过IP地址&#xff0c;设备间可以互相通讯&#xff0c;如果没有IP地址&…

电话号码对应的英语单词

问题&#xff1a; 电话的号码盘一般可以用于输入字母&#xff0c;如用2可以输入a,b,c,用3可以输入d,e,f等。 对于号码5869872&#xff0c;可以依次输出其代表的所有字母组合。如&#xff1a;jtmwtpa,jtmwtpb......... 1、您能否可以根据这样的对应关系设计一个程序&#xff…

地址的概念

前言&#xff1a;地址的概念 1. 地址概念及各个单位换算1.1 地址的概念1.2 单位换算1.3 举例说明&#xff0c;加深理解1.4 关于地址的宽度 1. 地址概念及各个单位换算 1.1 地址的概念 计算机内的数据是存储在地址里面的&#xff0c;地址又是以字节&#xff08;Byte&#xff09…

地址的地址?

在visual studio 2019中 #include <stdio.h> #include <stdlib.h> typedef struct student { int value; struct student* next_stu; }Student; Student * creatlist(); void insertlist(Student * list,int value); int main() { Student *my_list…

GoldenDict 上的那些精美版权词典(附下载地址)(英语、俄语、梵语、印地语)

转载▼ 标签&#xff1a; 杂谈 国内的有道词典和金山词典由于使用方便、宣传到位得到了许多同学的喜爱。在开源软件的领域&#xff0c;也有一款非常好用的词典GoldenDict&#xff0c;它的强项在于可以直接使用众多词典厂商的词库。那些正规的词典厂商通常购买了词典的版权…

【GO】map转json

咔咔博客之map转json 跟结构体转json一样都使用的是json.Marshal()方法 最后需要就是把字节转为字符串使用string即可 案例 func main() {// 定义了interface 后边就可以跟任意类型了mMap : make(map[string]interface{})mMap["博客地址"] "blog.fangkang.to…

Json4s的一些用法 JSon转对象实体 Json转Map Map转Json

Json4s 全称就是Json For Scala&#xff0c;为Scala而生 首先上Maven依赖配置&#xff0c;其实Spark中自带了Json4s如果是编写Spark代码,并不需要单独引用Json4s的依赖了 <dependency><groupId>org.json4s</groupId><artifactId>json4s-jackson_2.11&…

map转json字符串字段排序

需求&#xff1a;map转成json字符串&#xff0c;要求字段按字母升序排列 package com.data.test;import java.util.HashMap; import java.util.Map; import java.util.TreeMap; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFe…

Map与JSON数据之间的互相转化

Map与JSON mapmap转JSON字符串JSON字符串转JSON对象Map转JSON对象JSON字符串转MapJSON对象转MapJSON对象转JSON字符串IDEA功能快捷键 map 此内容是方便博主自己记忆内容&#xff0c;不用于公开学习资料&#xff0c;若发现语法错误&#xff0c;自行更正&#xff0c;勿喷 map转…