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.mfbz.cn/a/605031.html

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

相关文章

nginx: [emerg] invalid number of arguments in “alias“ directive in D:\nginx

问题背景 最近在配置一个nginx的配置&#xff0c;但是reload的时候遇到了以下报错 D:\nginx>nginx -s reload nginx: [emerg] invalid number of arguments in "alias" directive in D:\nginx/conf /nginx.conf:113 解决方案 关于“alias”指令中的参数数量错误…

十二届蓝桥杯Python组1月中/高级试题 第一题

** 十二届蓝桥杯Python组1月中/高级试题 第一题 第一题&#xff08;难度系数2&#xff0c;18 个计分点&#xff09; 编程实现&#xff1a; 输入一个字符串&#xff0c;输出这个字符串的最后一个字符。 输入描述&#xff1a;输入一个字符串 输出描述&#xff1a;输出这个字符串…

OpenCV单窗口并排显示多张图片

OpenCV单窗口并排显示多张图片 效果代码 PS&#xff1a;本例的代码适合图片的宽度和高度都相同。 效果 原始三张图片&#xff1a; 合并显示&#xff1a; 代码 import cv2 import numpy as npdef opencv_multi_img():# 读取图片img1 cv2.imread(saw_1.jpeg)img2 cv2.im…

2024软件测试自动化面试题(含答案)

1.如何把自动化测试在公司中实施并推广起来的&#xff1f; 选择长期的有稳定模块的项目 项目组调研选择自动化工具并开会演示demo案例&#xff0c;我们主要是演示selenium和robot framework两种。 搭建自动化测试框架&#xff0c;在项目中逐步开展自动化。 把该项目的自动化…

实验五 Spark Structured Streaming编程实践

一、编写程序 (1). 按照tag分组统计生成的日志数。 在新开的终端内输入 vi spark_exercise_testsyslog1.py &#xff0c;贴入如下代码并运行。运行之前需要关闭“tail终端”内的tail命令并重新运行tail命令&#xff0c;否则多次运行测试可能导致没有新数据生成。 #!/usr/bin…

Rust使用HashSet对Vec类型的元素进行去重

在Rust语言中&#xff0c;对Vec类型的元素进行去重&#xff0c;一种常见的方法是使用一个HashSet来帮助我们快速检查元素是否已经存在。以下是使用HashSet对Vec进行去重的示例代码&#xff1a; use std::collections::HashSet;fn main() {let vec_numbers vec![1, 2, 2, 3, 4…

Marin说PCB之国产电源芯片方案 ---STC2620Q

随着小米加入的造车大家庭&#xff0c;让这个本来就卷的要死的造车大家庭更加卷了。随之带来的蝴蝶效应就是江湖上各个造成门派都开始了降本方案的浪潮啊&#xff0c;开始打响价格战了。各家的新能源车企也是不得不开始启动了降本方案的计划了&#xff0c;为了应对降价的浪潮。…

手游广告归因新选择:Xinstall助力精准衡量投放效果

在手游市场竞争日益激烈的今天&#xff0c;广告主们面临着如何精准衡量广告投放效果的难题。手游广告归因平台的出现&#xff0c;为广告主们提供了一种全新的解决方案。而Xinstall&#xff0c;作为其中的佼佼者&#xff0c;正以其独特的优势&#xff0c;助力广告主们破解这一难…

【AI大模型】AI大模型热门关键词解析与核心概念入门

&#x1f680; 作者 &#xff1a;“大数据小禅” &#x1f680; 文章简介 &#xff1a;本专栏后续将持续更新大模型相关文章&#xff0c;从开发到微调到应用&#xff0c;需要下载好的模型包可私。 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 目…

SPSS多元线性回归

&#xff08;要满足&#xff09;模型的假设条件需要对数据进行怎样处理&#xff1f;&#xff1f; 为了使数据满足多元线性回归的条件&#xff0c;通常需要进行以下预处理步骤&#xff1a; 1. 数据清洗&#xff1a;处理缺失值、异常值和重复值&#xff0c;确保数据质量。 2. 特…

python-oracledb 已率先支持 Oracle 23ai

python-oracledb 介绍 python-oracledb (以下简称 oracledb) 是 Python cx_Oracle 驱动程序的新名称&#xff0c;如果你仍在使用 cx_Oracle&#xff0c;建议升级到最新版本的 oracledb。 oracledb 驱动程序是一个开源模块&#xff0c;使 Python 程序能够访问 Oracle 数据库。默…

美业SaaS系统多门店收银系统源码-【卡升组合促销规则】讲解分享

美业管理系统源码 博弈美业SaaS系统 连锁多门店美业收银系统源码 多门店管理 / 会员管理 / 预约管理 / 排班管理 / 商品管理 / 促销活动 PC管理后台、手机APP、iPad APP、微信小程序 1、什么是卡升组合促销&#xff1f; 原价购买的卡项&#xff0c;卡状态正常的情况下&…

分红76.39亿,分红率再创新高,成长活力无限的伊利带来丰厚回报

伊利47万股东&#xff0c;又等来了一个好消息。 4月29日&#xff0c;伊利股份发布2023年报&#xff0c;实现营业总收入1261.79亿元&#xff0c;归母净利润104.29亿元&#xff0c;双创历史新高&#xff0c;实现连续31年稳健增长。 在递交亮眼成绩单的同时&#xff0c;乳业巨头伊…

MyBatis的其他查询操作

前言&#xff1a;在上篇博客介绍了MyBatis的一些增删改查操作&#xff0c;接下来介绍其他查询操作 目录 1 其他查询操作 1.1 多表查询 1.1.1 准备工作 1.1.2 数据查询 1.2 #{}和${} 1.2.1 #{}和${}使用 1.2.2 #{}和${}的区别 1.3 排序功能 1.4 like查询 2 数据库连接池 2.1 …

C++反射之检测struct或class是否实现指定函数

目录 1.引言 2.检测结构体或类的静态函数 3.检测结构体或类的成员函数 3.1.方法1 3.2.方法2 1.引言 诸如Java, C#这些语言是设计的时候就有反射支持的。c没有原生的反射支持。并且&#xff0c;c提供给我们的运行时类型信息非常少&#xff0c;只是通过typeinfo提供了有限的…

【吃透Java手写】1- Spring(上)-启动-扫描-依赖注入-初始化-后置处理器

【吃透Java手写】Spring&#xff08;上&#xff09;启动-扫描-依赖注入-初始化-后置处理器 1 准备工作1.1 创建自己的Spring容器类1.2 创建自己的配置类 ComponentScan1.3 ComponentScan1.3.1 Retention1.3.2 Target 1.4 用户类UserService Component1.5 Component1.6 测试类 2…

AI实景自动无人直播软件:引领直播行业智能化革命;提升直播效果,无人直播软件助力智能讲解

随着科技的快速发展&#xff0c;AI实景自动无人直播软件正在引领直播行业迈向智能化革命。它通过智能讲解、一键开播和智能回复等功能&#xff0c;为商家提供了更高效、便捷的直播体验。此外&#xff0c;软件还支持手机拍摄真实场景或搭建虚拟场景&#xff0c;使直播画面更好看…

Unity 性能优化之动态批处理(四)

提示&#xff1a;仅供参考&#xff0c;有误之处&#xff0c;麻烦大佬指出&#xff0c;不胜感激&#xff01; 文章目录 前言一、动态合批是什么&#xff1f;二、使用动态批处理1.打开动态合批2.满足条件 三、检查动态合批是否成功五、动态合批弊端总结 前言 动态批处理是常用优…

Flutter笔记:手动配置VSCode中Dart代码自动格式化

Flutter笔记 手动配置VSCode中Dart代码自动格式化 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csd…

pcm转MP3怎么转?只需3个步骤~

PCM&#xff08;Pulse Code Modulation&#xff09;是一种用于数字音频编码的基础技术&#xff0c;最早起源于模拟音频信号数字化的需求。通过PCM&#xff0c;模拟音频信号可以被精确地转换为数字形式&#xff0c;为数字音频的发展奠定了基础。 MP3文件格式的多个优点 MP3的优…
最新文章