K邻近算法

简介

介绍了非常简单的算法: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.mzph.cn/bicheng/11649.shtml

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

相关文章

爆款小红书免费流量体系课程(两周变现),小红书电商教程

课程下载&#xff1a;小红书电商教程-课程网盘链接提取码下载.txt资源-CSDN文库 更多资源下载&#xff1a;关注我。 课程内容&#xff1a; 10-爆款标题(三段式取标题).mp3 11-爆款封面怎么作图.mp3 12-爆款内容的模板(三段式模板).mp3 13-小红书流量推荐背后的秘密(四大流…

数据结构与算法-排序算法1-冒泡排序

本文先介绍排序算法&#xff0c;然后具体写冒泡排序。 目录 1.排序算法简介 2.常见的排序算法分类如下图&#xff1a; 3.冒泡排序&#xff1a; 1.介绍&#xff1a; 2.动态图解 3.举例 4.小结冒泡排序规则 5.冒泡排序代码 6.优化 7.优化后时间 代码&#xff1a; 运…

讯方·智汇云校4月HCIE通过28人!证书量总计123!

智汇云校捷报 —4月华为认证证书量123本— 智汇云校4月IE捷报来了 讯方技术2024年PMP第一期3月考期顺利结班&#xff0c;考试全员通过~ 2024年4月&#xff0c;云校HCIA、HCIP、HCIE共通过123人&#xff01; 62人通过HCIA 33人通过HCIP 28人通过HCIE 祝贺以下学员通过HC…

simulink-仿真以及PID参数整定/PID tuner 的使用流程

控制器搭建与参数整定 搭建一个前馈PID控制器控制系统PID tuner使用 一个懂点控制但不多的小白&#xff0c;因为需要利用simulink仿真&#xff0c;所以不得不学习一些仿真的知识&#xff0c;这篇文章适合和我一样的新手入门&#xff0c;有理解错误的地方希望大手们能够指出来共…

Llama3-Tutorial(Llama 3 超级课堂)-- 笔记

第1节—Llama 3 本地 Web Demo 部署 端口转发 vscode里面设置端口转发 https://a-aide-20240416-b4c2755-160476.intern-ai.org.cn/proxy/8501/ ssh -CNg -L 8501:127.0.0.1:8501 rootssh.intern-ai.org.cn -p 43681参考 https://github.com/SmartFlowAI/Llama3-Tutorial/b…

ssm123基于java web的网上书城系统的设计与实现+vue

基于java web的网上书城系统的设计与实现vue 摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff0c;商品交易当然也不能排除在外&#xff0c;随着商品交易管理的不断成熟&#xff0c;它彻底改变了…

STM32学习和实践笔记(25):USART(通用同步、异步收发器)

一&#xff0c;STM32的USART简介 USART即通用同步、异步收发器&#xff0c;它能够灵活地与外部设备进行全双工数据交换&#xff0c;满足外部设备对工业标准 NRZ 异步串行数据格式的要求。 UART即通用异步收发器&#xff0c;它是在USART基础上裁剪掉了同步通信功能。 开发板上…

LeetCode 700.二叉搜索树中的搜索

LeetCode 700.二叉搜索树中的搜索 1、题目 题目链接&#xff1a;700. 二叉搜索树中的搜索 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和一个整数值 val。 你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在&#xff0c;则…

Adobe使用常见问题解答,如何续费?

“Adobe系统状态”页上的颜色表示什么&#xff1f; Gray表示我们调查了潜在的服务中断并确定它没有影响。橙色表示轻微问题。红色表示严重问题。蓝色表示定期维护。绿色表示所有服务均运行正常。 如何查看以前的CSO或CMR&#xff1f; 导航到 https://status.adobe.com.单击所…

智能自助终端主板RK3288/RK3568在酒店前台自助机方案的应用,支持鸿蒙,支持免费定制

酒店前台自助机解决方案是一款基于自助服务终端&#xff0c;能够让客人通过简单的操作完成入住登记/退房的解决方案&#xff0c;大幅提高酒店的工作效率&#xff0c;提升客人体验&#xff0c;降低人力成本。 该方案解决了以下传统前台登记入住方式的痛点&#xff1a; 1、人流量…

MySQL 通过 systemd 启动时 hang 住了……

mysqld&#xff1a;哥&#xff0c;我起不来了…… 作者&#xff1a;贲绍华&#xff0c;爱可生研发中心工程师&#xff0c;负责项目的需求与维护工作。其他身份&#xff1a;柯基铲屎官。 爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编…

佛山市组织开展2024年全市抗震救灾应急演练并召开相关部署会

为深入贯彻落实关于防灾减灾救灾重要论述精神和国家、省、市决策部署,提高佛山市应对地震灾害的抢险救灾实战能力,构建切实可行、快速反应、科学处置的抗震救灾应急救援工作体系,结合第16个全国防灾减灾日宣传主题,5月11日上午,佛山市组织开展2024年全市抗震救灾应急演练并召开…

计算机网络 3.3OSI参考模型

第三节 OSI参考模型 一、认识OSI/RM 1.描述&#xff1a;定义了一个连接异种计算机的标准主体结构&#xff0c;给网络设计者提供了一个参考规范。 2.组织&#xff1a;国际标准化组织. 3.发展&#xff1a;1979年研究并提出了该国际标准。 4.分层原则&#xff1a; ①层次的划…

d17(154-168)-勇敢开始Java,咖啡拯救人生

目录 方法递归 字符集 编码-解码 IO流 字节流 字节输入流 InputSream FileInputStream 字节输出流 OutputSream FileOutputSream 释放资源的方式 try-catch-finallly try-with-resource 字符流 字符输入流 Reader FileReader 文件字符输出流 Writer FileWriter …

达梦数据库 报错 数据类型不匹配

达梦数据库 报错 数据类型不匹配 背景描述问题分析问题处理方案1&#xff1a;方案2&#xff1a;TO_CHAR(str)CAST(value AS type)CONVERT(type,value)DBMS_LOB 包TEXT_EQUAL(n1,n2) 写在最后 背景描述 本文写于初接触到达梦(DM)数据库&#xff0c;之前没有用过&#xff0c;因此…

电脑快速搜索文件及文件夹软件——Everything

一、前言 Everything是一款由voidtools开发的文件搜索工具&#xff0c;主要运行于Windows操作系统上。它的主要功能是快速、高效地搜索电脑上的文件和文件夹名称。Everything通过利用NTFS文件系统的MFT&#xff08;主文件表&#xff09;来索引文件&#xff0c;从而实现几乎实时…

基于SpringBoot + MySQL的宠物医院管理系统设计与实现+毕业论文+指导搭建视频

系统介绍 项目的使用者可以避免排队挂号&#xff0c;比较方便&#xff0c;也方便于宠物医院的管理。现在的宠物本系统根据华阳社区宠物医院管理工作流程将系统使用者划分为三类&#xff0c;分别为、宠物医生、宠物主人以及系统管理人员&#xff0c;以下是对该三类类用户的具体…

Jmeter内存溢出原因及解决办法

现在越来越多的小伙伴在压力测试过程中选择使用Jmeter&#xff0c;原因是这个工具开源且小巧&#xff0c;而且还支持二次开发。 但是事情都有两面性&#xff0c;利弊共存啊&#xff0c;对比商业软件Loadrunner&#xff0c;Jmeter在高并发&#xff0c;特别是大型项目的高并发&a…

浏览器执行渲染原理

一、事件循环 事件循环&#xff08;Event Loop&#xff09;是JavaScript的执行环境的核心概念之一&#xff0c;它负责处理JavaScript中的异步操作和执行顺序。事件循环使得JavaScript能够在单线程上有效地处理并发&#xff0c;同时保持编程模型的简单性。 以下是事件循环的一…

使用Eigen将经纬度、高程、偏北角转成变换矩阵

目录 1、前言 2、示例 3、代码解析 4、垂直于给定点的切平面变换 5、代码解析 1、前言 在地球表面进行刚体变换时候&#xff0c;要将具有经纬度、高程和偏北角的坐标信息转换为变换矩阵表达&#xff0c;首先需要了解坐标系之间的转换关系。 通常&#xff0c;我们会将经纬…