K邻近算法

news2024/11/28 0:52:22

简介

介绍了非常简单的算法:K邻近算法,即KNN。

在这里插入图片描述


基本介绍

K-近邻算法(K-Nearest Neighbors,简称KNN)是一种基本且广泛应用的监督学习算法,主要用于分类和回归任务。

工作原理非常简答直观:所谓近朱者赤、近墨者黑。为了判断测试样本的类别,以所有的测试集样本为参照,计算测试样本与训练集所以样本的距离,从中选取与未知样本距离最近的K个已知样本,根据少数服从多数的投票法则**(majority-voting)**,根据这些邻居的信息来预测新数据点的分类或数值。

KNN算法的应用

  • 分类任务:如在医疗领域根据患者的历史数据来预测疾病的类型。
  • 回归任务:如预测房价或股票价格。
  • 推荐系统:如根据用户的购买历史和偏好来推荐商品。

KNN算法的简单性和有效性使其成为许多领域中常用的基准算法之一。然而,它在处理大规模数据集时的计算和存储需求较高,这可能限制了其在某些应用中的实用性。


特点

非参数算法:KNN是一种非参数学习算法,这意味着它不对数据的分布做任何假设。这是它与其他统计学习方法最大的不同。

惰性学习器:KNN属于惰性学习方法,因为它实际上不会从训练数据中学习一个判别函数,而是直接使用训练数据进行预测,简单粗暴。

距离度量:KNN算法中的距离可以是任何度量距离,常见的有欧氏距离、曼哈顿距离或明可夫斯基距离,这在我写的聚类分析那篇文章有详细列举和介绍。


步骤

step 1 选择邻居数量K

K的选择会对算法结果有很大影响。

较小的K值意味着噪声将对结果有更大影响,而较大的K值则使计算成本更高并可能导致分类器过于平滑,拟合效果不佳。

step 2 计算距离

计算测试点与每个训练数据点之间的距离。

step 3 找到最近的K个邻居

选择距离最近的K个训练数据点作为邻居。

step 4 进行预测

对于分类任务,通常采用“投票制”,即在K个最近邻居中多数类别为预测类别;

对于回归任务,则通常是这K个邻居的输出变量的平均值。


KNN运用实例

我们运用一下 sklearn.datasets 中的 load_breast_cancer 数据集

# 导入库
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
import pandas as pd
from sklearn.datasets import load_breast_cancer  # 使用乳腺癌维斯康数据
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, recall_score, precision_score, f1_score

# 示例数据集
data = load_breast_cancer()
print(data)
print(type(data))  # data的类型为<class 'sklearn.utils._bunch.Bunch'>
print("目标变量名称:", data.target_names)  # 目标变量名称: ['malignant' 'benign'],即良性和恶性

df = pd.DataFrame(data.data, columns=data.feature_names)
df['target'] = data.target
print(df)

# 将 target_names 映射到整数值
target_map = {'malignant': 1, 'benign': 0}
df['target'] = np.where(df['target'] == 0, 'benign', 'malignant')  # 将整数映射到字符
df['target'] = df['target'].map(target_map)  # 将字符映射到整数

# 划分训练集
X = df.drop('target', axis=1)
y = df['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=100)

# 创建KNN模型,建立实例,设置邻居数为3
knn = KNeighborsClassifier(n_neighbors=3)

# 训练模型
knn.fit(X_train, y_train)

# 预测
y_pred = knn.predict(X_test)
results_df = X_test.copy()
results_df['Actual'] = y_test
results_df['Predicted'] = y_pred
print(results_df.head())

# 评价
auc = accuracy_score(y_test, y_pred)
print(f"准确率为:{format(auc)}")
recall = recall_score(y_test, y_pred)
print(f"召回率为:{format(recall)}")
pre = precision_score(y_test, y_pred)
print(f"精确度为:{format(pre)}")
f1 = f1_score(y_test, y_pred)
print(f"F1-SCORE为:{format(f1)}")

在这里插入图片描述

我们可以发现,评价的结果还是很好的。

np.where() 函数

NumPy 库中的一个函数,用于根据指定条件返回输入数组、标量或者另外两个数组中对应位置的元素。基本语法如下:

np.where(condition, x, y)
  • condition 是一个条件表达式,可以是布尔数组或者条件表达式。
  • 如果 condition 中的元素为 True,则将 x 对应位置的元素添加到返回的数组中;如果为 False,则将 y 对应位置的元素添加到返回的数组中。

map() 方法

  • map() 方法是 Pandas 库中 Series 类型的一个方法,用于根据提供的字典、Series 或函数映射数据中的值。它的基本语法如下:
Series.map(arg)
  • arg 可以是一个字典、Series 或者一个接受单个参数并返回一个值的函数。
  • map() 方法会将数据中的每个元素通过映射规则转换成另一个值,并返回一个新的 Series 对象。

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

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

相关文章

改变浏览器大小,图片(img)内容居中显示img标签,不是背景图

改变浏览器大小,图片&#xff08;img&#xff09;内容居中显示&#xff0c;img标签&#xff0c;不是背景图 效果直接上图&#xff1a; 上代码&#xff1a; <!DOCTYPE html> <html> <head><title>测试图片居中显示&#xff0c;高度不变只变宽度<…

面试集中营—Seata分布式事务

一、分布式事务 本地事务 在计算机系统中&#xff0c;更多的是通过关系型数据库来控制事务&#xff0c;这是利用数据库本身的事务特性来实现的&#xff0c; 因此叫数据库事务&#xff0c;由于应用主要靠关系数据库来控制事务&#xff0c;而数据库通常和应用在同一个服务器&am…

SQLite利用事务实现批量插入(提升效率)

在尝试过SQLite批量插入一百万条记录&#xff0c;执行时长高达20多分钟后&#xff0c;就在想一个问题&#xff0c;这样的性能是不可能被广泛应用的&#xff0c;更不可能出现在真实的生产环境中&#xff0c;那么对此应该如何优化一下呢&#xff1f; 首先分析一下批量插入的逻辑 …

社交媒体数据恢复:脉脉

在使用社交软件脉脉的过程中&#xff0c;可能会遇到数据丢失的情况&#xff0c;如误删了重要信息或者更换手机后数据未能同步等问题。那么如何恢复脉脉中的数据呢&#xff1f;本文将为您提供详细的步骤指导。 注意&#xff1a;以下操作需要在脉脉账户登录状态下进行。 登录脉…

红米K60Pro/K50/K40系列澎湃OS解锁BL降级出厂MIUI14稳定版本方法

最新红米K60/60pro/K50/K50至尊/K40等多个系列手机都已经推送了澎湃OS系统&#xff0c;但新版的系统适配周期短或者等其他原因&#xff0c;导致很多小伙伴希望降级回到MIUI14系统&#xff0c;多个小米售后都拒绝降级服务&#xff0c;并且官方也没有开通1个自助降级的方法&#…

速戳!高考生做近视手术须知,避免错过心仪大学

距离高考还有不到一个月的时间&#xff0c;考生们在紧张复习的同时&#xff0c;不要忘了了解意向专业、院校的视力要求。一些专业和院校录取不仅靠实力,还需要“视力”,考了个好成绩却因视力不达标而被专业、院校退档,这样的结果是我们不想看到的。如果你想圆军旅梦、警校梦、航…

软考--信息系统项目管理师课程笔记

第一章 信息化发展 1.国家信息化&#xff1a;应用&#xff08;上&#xff09;&#xff0c;技术&#xff08;下&#xff09;&#xff0c;人才&#xff08;左&#xff09;&#xff0c;规范&#xff08;右&#xff09; 2.广域网协议包括&#xff1a;ISDN&#xff0c;ASDL&#xf…

Android的视图显示和管理机制:layout view window WindowManager Canvas Surface

在Android系统中&#xff0c;Layout view window WindowManager Canvas Surface SurfaceFlinger这些组件协同工作&#xff0c;以实现图形的绘制和显示。需要搞明白这些组件是什么时候创建的以及他们之间的结构关系。 从上到下的层级关系&#xff1a;用户在View上进行操作&…

SQLite .journal 文件

在之前插入大量数据测试的时候&#xff0c;发现在数据库文件同级目录下会产生一个同名.journal的文件&#xff0c;并且不是一直会存在&#xff0c;而是生成一会就会自动删除&#xff0c;然后继续生成继续删除&#xff0c;直到数据插入完成。 初步猜测&#xff0c;应该是类似 re…

代码-功能-Python-运用bs4技术爬取汽车之家新闻信息

第三方库安装指令&#xff1a; pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple pip install BeautifulSoup4 -i https://pypi.tuna.tsinghua.edu.cn/simple 运行代码&#xff1a; #这个代码并不完整&#xff0c;有很大的问题&#xff0c;但目前不知道怎么…

05-Fortran基础--Fortran文件操作

05-Fortran基础--Fortran文件操作 0 引言1 文件操作有关的关键字介绍1.1 打开文件&#xff08;OPEN&#xff09;1.2 文件关闭&#xff08;CLOSE&#xff09;1.3 文件查询&#xff08;INQUIRE&#xff09;1.3 文件读写&#xff08;read/write&#xff09;1.4 文件操作符&#xf…

机器学习作业4——朴素贝叶斯分类器

目录 一、理论 一个例子&#xff1a; 二、代码 对于代码的解释&#xff1a; 1.fit函数&#xff1a; 2.predict函数: 三、实验结果 原因分析&#xff1a; 一、理论 朴素贝叶斯分类器基于贝叶斯定理进行分类&#xff0c;通过后验概率来判断将新数据归为哪一类。通过利用贝…

设计模式——结构型模式——代理模式(静态代理、动态代理:JDK、CGLIB)

目录 代理模式 代理模式简介 代理模式的分类 代理模式组成 代理模式的优缺点 静态代理 背景前置 编写代码 JDK动态代理 编写代码 使用Arthas分析JDK动态代理底层原理 CGLIB动态代理 编写代码 三种代理的对比 代理模式使用场景 代理模式 代理模式简介 代理模式属…

测试萌新三天速通python基础(二)列表,字符串,元组,字典,遍历,容器,集合,函数

python基础 字符串下标(索引)切片字符串的替换 replace()字符串拆分 split()字符串的连接 join列表 list列表的增删改查列表的反转 reverse()排序列表嵌套元组 tuple 排序 升序降序交换变量字典 dict查询遍历容器集合函数参数函数的嵌套调⽤函数的返回值模块导⼊的⽅法____name…

重发布和路由策略实验(课堂练习)

需求&#xff1a; 将1.1.1.0/24网段&#xff08;不在OSPF中&#xff09;重发布到网络中&#xff0c;不允许出现次优路径&#xff0c;实现全网可达。 需求分析&#xff1a; 1、在R1上重发布1.1.1.0/24网段&#xff0c;但是需要过滤192.168.12.0/24和192.168.13.0/24 2、在R2和R3…

【论文阅读笔记】MapReduce: Simplified Data Processing on Large Clusters

文章目录 1 概念2 编程模型3 实现3.1 MapReduce执行流程3.2 master数据结构3.3 容错机制3.3.1 worker故障3.3.2 master故障3.3.3 出现故障时的语义 3.4 存储位置3.5 任务粒度3.6 备用任务 4 扩展技巧4.1 分区函数4.2 顺序保证4.3 Combiner函数4.4 输入和输出的类型4.5 副作用4.…

【超详细】跑通YOLOv8之深度学习环境配置2

环境配置2下载安装内容如下&#xff1a; CUDA&#xff1a;https://developer.nvidia.com/cuda-toolkit-archive cudnn&#xff1a;https://developer.nvidia.com/rdp/cudnn-archive 版本&#xff1a;CUDA11.3 cudnn8.9.7 CUDA安装 简介 CUDA&#xff08;Compute Unified De…

【superset】基于MySQL的BI数据分析可视化实战案例(已更新)

1.熟悉、梳理、总结下superset可视化分析实战案例知识体系,一直想探索有效可用的可视化分析方案,大多收费或不好用,这里,借此机会总结、更新下。 2.复杂度高,遇到并解决的问题较多,尝试了很多次。 3.欢迎批评指正,跪谢一键三连! 基于MySQL的BI数据分析可视化实战案例文…

免费剪辑的素材资源网站,超高清、可商用、不限速、无版权,迅速有效的解决您的视频剪辑难题!

在数字媒体时代&#xff0c;高质量的剪辑素材已成为视频制作的核心资源。下面为您推荐的优质视频剪辑素材网站&#xff0c;都提供超高清、无限速、无版权、可商用的素材&#xff0c;这些网站将大大提升您的视频制作效率和质量 01. 蛙学府 实用性&#xff1a;★★★★☆ 丰富性&…

容器化Jenkins远程发布java应用(方式一:pipline+ssh)

1.创建pipline工程 2.准备工程Jenkinsfile文件&#xff08;java目录&#xff09; 1.文件脚本内容 env.fileName "planetflix-app.jar" env.configName "planetflix_prod" env.remoteDirectory "/data/project/java" env.sourceFile "/…