2.机器学习-K最近邻(k-Nearest Neighbor,KNN)分类算法原理讲解

2️⃣机器学习-K最近邻(k-Nearest Neighbor,KNN)分类算法原理讲解

  • 个人简介
  • 一·算法概述
  • 二·算法思想
      • 2.1 KNN的优缺点
  • 三·实例演示
      • 3.1电影分类
      • 3.2使用KNN算法预测 鸢(yuan)尾花 的种类
      • 3.3 预测年收入是否大于50K美元

个人简介

🏘️🏘️个人主页:以山河作礼。
🎖️🎖️:Python领域新星创作者,CSDN实力新星认证,CSDN内容合伙人,阿里云社区专家博主,新星计划导师,在职数据分析师。
🎉🎉免费学习专栏

1. 《Python基础入门》——0基础入门
2.《Python网络爬虫》——从入门到精通
3.《Web全栈开发》——涵盖了前端、后端和数据库等多个领域

💕💕悲索之人烈焰加身,堕落者不可饶恕。永恒燃烧的羽翼,带我脱离凡间的沉沦。

一·算法概述

K-最近邻算法(K-Nearest Neighbor,简称KNN)是一种基于实例学习的算法,可以应用于分类和回归任务。作为一种非参数算法KNN不对数据分布做任何假设,而是直接使用数据中的最近K个邻居的标签来预测新数据点的标签

在KNN算法中,每个数据点都可以表示为一个n维向量,其中n是特征的数量。对于一个新的数据点,KNN算法会计算它与每个训练数据点之间的距离,并选择最近的K个训练数据点。对于分类问题,KNN算法会将这K个训练数据点中出现最多的类别作为预测结果。而对于回归问题,KNN算法会将这K个训练数据点的输出值的平均值作为预测结果。

在KNN算法中,K的取值是一个超参数,需要根据数据集的特点和算法的性能进行选择。通常情况下,较小的K值可以使模型更复杂,更容易受到噪声的影响,而较大的K值可以使模型更简单、更稳定,但可能会导致模型的欠拟合。因此,选择合适的K值对于KNN算法的性能至关重要。
在这里插入图片描述

二·算法思想

KNN(K-最近邻)算法是一种基于实例的分类方法,通过计算不同特征值之间的距离来进行分类

1️⃣其核心思想是
如果一个样本在特征空间中的k个最邻近的样本中的大多数属于某一个类别,则该样本也划分为这个类别。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。

2️⃣ KNN算法的主要步骤如下

  1. 确定k值,即选取多少个最近邻居参与投票。
  2. 计算待分类样本与已知分类样本之间的距离,通常使用欧氏距离作为距离度量。
  3. 对距离进行排序,找出最近的k个邻居。
  4. 统计这k个邻居中各个类别的数量,将数量最多的类别作为待分类样本的类别。

3️⃣KNN算法涉及3个主要因素
实例集、距离或相似的衡量、k的大小。实例集是指已知分类的样本集合;距离或相似的衡量是指计算样本之间距离的方法,如欧氏距离;k的大小是指选取多少个最近邻居参与投票,k值的选择会影响分类结果的准确性。

一个实例的最近邻是根据标准欧氏距离定义的。更精确地讲,把任意的实例x表示为下面的特征向量:
在这里插入图片描述

其中ar(x)表示实例x的第r个属性值。那么两个实例xi和xj间的距离定义为d(xi,xj),其中:

在这里插入图片描述

在这里插入图片描述

2.1 KNN的优缺点

1️⃣K-最近邻算法(KNN)的优点

简单易懂:KNN算法的原理和实现都非常简单,容易理解和掌握。
非参数化:KNN是一种非参数化算法,不需要对数据分布做任何假设。
对异常值不敏感:KNN能够有效处理包含异常值的数据。
多用途:适用于分类和回归问题。
高维数据处理:可以处理高维特征空间的数据。
非线性问题处理:能够适应非线性的数据分布。
高度可解释性:结果直观,易于解释。

2️⃣KNN算法的缺点

效率低:在大型数据集上计算距离时效率较低,尤其是在高维数据中。
对噪声敏感:训练数据中的噪声可能影响最近邻的选择,导致预测结果不准确。
K值选择:K值的选择对算法性能有很大影响,需要通过实验来确定最佳值。
距离度量:选择合适的距离度量方法对算法性能至关重要。
特征缩放敏感:需要对特征进行归一化或标准化,否则可能导致某些特征过于主导。
缺失值处理:处理缺失值较为困难,需要采取特定策略来应对。
解释性差:由于是基于实例的预测,相对于其他模型来说解释性较差。

三·实例演示

3.1电影分类

1.导入数据分析三剑客

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

2.导入KNN算法

# 谷歌的机器学习库 
from sklearn.neighbors import KNeighborsClassifier

3.导入warnings模块,并设置警告过滤器为忽略所有警告

import warnings
warnings.filterwarnings(action='ignore')

4.使用电影数据

movies = pd.read_excel('../data/movies.xlsx',sheet_name=1)
movies

在这里插入图片描述

#  有标签的:有监督学习# 训练数据
# x_train,y_train # 测试数据
# x_test,y_test# data  : x特征数据
# target :y标签数据
data = movies[['武打镜头','接吻镜头']]
data # 二维target = movies.分类情况
target  # 一维

在这里插入图片描述

KNN模型
1.创建模型

# n_neighbors=5, k值  k = 5
# p = 2 距离算法,p=2表示欧氏距离 ,p = 1 表示曼哈顿距离
# 
knn = KNeighborsClassifier(n_neighbors=5,p=2)

2.训练

knn.fit(data,target)

3.预测

# 自己提供测试数据,训练数据和测试数据列得相同,行可以不同x_test=np.array([[20,1],[0,20],[10,10],[33,2],[2,13]])
x_test = pd.DataFrame(x_test,columns= data.columns)
y_test = np.array(['动作片','爱情片','爱情片','动作片','爱情片'])
y_pred = knn.predict(x_test)
y_pred

在这里插入图片描述
4.得分 ,准确率
在这里插入图片描述

3.2使用KNN算法预测 鸢(yuan)尾花 的种类

在这里插入图片描述

1.导入数据分析三剑客

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

2.导入KNN算法

# 谷歌的机器学习库 
from sklearn.neighbors import KNeighborsClassifier

3.导入warnings模块,并设置警告过滤器为忽略所有警告

import warnings
warnings.filterwarnings(action='ignore')

4.得到鸢尾花数据

from sklearn.datasets import load_iris
# return_X_y=True  只返回data和target
#  data,target = load_iris(return_X_y=True)

5.使用sklearn库中的load_iris()函数加载鸢尾花数据集,并将数据集分为数据(data)、目标(target)、目标名称(target_names)、特征名称(feature_names)四个部分。

iris = load_iris()
data = iris['data']
target = iris['target']
target_names = iris['target_names']
feature_names = iris['feature_names']
df = pd.DataFrame(data,columns=feature_names)
df

在这里插入图片描述

6.拆分数据集
把data和target取一部分作为测试数据,剩下的作为训练数据
从sklearn库的model_selection模块中导入train_test_split函数,该函数用于将数据集划分为训练集和测试集。

from sklearn.model_selection import train_test_split 
# test_size
# 整数:测试数据的数量
# 小数:测试数据的占比,一般比较小,0.2,0.3x_train, x_test, y_train, y_test = train_test_split(data,target,test_size=0.2)
x_train.shape, x_test.shape
# y_test 表示测试数据的真实结果
# y_pred:表示测试数据的预测结果

7.使用KNN算法

knn = KNeighborsClassifier()
knn.fit(x_train, y_train)
knn.score(x_test,y_test)
#0.33 
#0.7以上:得分正常
#0.8以上:比较好
#0.9以上:非常好

在这里插入图片描述

3.3 预测年收入是否大于50K美元

1.导入数据分析三剑客

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

2.导入KNN算法

# 谷歌的机器学习库 
from sklearn.neighbors import KNeighborsClassifier

3.导入warnings模块,并设置警告过滤器为忽略所有警告

import warnings
warnings.filterwarnings(action='ignore')读取adults.csv文件,最后一列是年收入,并使用KNN算法训练模型,然后使用模型预测一个人的年收入是否大于50```python
adults = pd.read_csv('../data/adults.csv')
adults

在这里插入图片描述

4.获取年龄age、教育程度education、职位workclass、每周工作时间hours_per_week 作为机器学习数据 获取薪水作为对应结果

data = adults[['age','education','workclass','hours_per_week']].copy()
target = adults['salary']

5.数据转换,将String/Object类型数据转换为int,用0,1,2,3…表示
使用factorize()函数

data['education'] = data['education'].factorize()[0]
data['workclass'] = data['workclass'].factorize()[0]
data

在这里插入图片描述
6.拆分数据集:训练数据和预测数据

x_train,x_test,y_train,y_test = train_test_split(data,target,test_size=0.2)
x_train

在这里插入图片描述

7.使用KNN算法

knn = KNeighborsClassifier()
knn.fit(x_train,y_train)
knn.score(x_test,y_test)

在这里插入图片描述

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

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

相关文章

flink部署模式介绍

在一些应用场景中,对于集群资源分配和占用的方式,可能会有特定的需求。Flink 为各种场景提供了不同的部署模式,主要有以下三种,它们的区别主要在于: 集群的生命周期以及资源的分配方式;应用的 main 方法到…

XXL-Job的搭建接入Springboot项目(详细)

一、XXL-Job介绍 XXL-Job 是一款开源的分布式任务调度平台,由 Xuxueli(徐雪里)开发。它基于 Java 技术栈,提供了一套简单易用、高可靠性的任务调度解决方案。 XXL-Job 的主要作用是帮助开发者实现定时任务的调度和执行。它可以用…

2024年轻人返乡创业潮,外卖平台市场需求是怎么样的?

目前,县域经济正面临着几大利好。“返乡就业、返乡创业和告老还乡”现象越发普遍,这不仅在小县城中有所体现,同样在乡镇中也呈现出同样的趋势。一些产业链和工厂纷纷下沉到乡镇,带来了更多的就业机会。这不仅能够吸引年轻人回乡就…

Spring Boot 4.0:构建云原生Java应用的前沿工具

目录 前言 Spring Boot简介 Spring Boot 的新特性 1. 支持JDK 17 2. 集成云原生组件 3. 响应式编程支持 4. 更强大的安全性 5. 更简化的配置 Spring Boot 的应用场景 1. 云原生应用开发 2. 响应式应用程序 3. 安全性要求高的应用 4. JDK 17的应用 总结 作…

CRM系统--盘点五大CRM客户管理系统

在当今市场经济中,销售工作的重要性日益凸显,有效的客户管理成为了提升销售业绩的关键因素。面对日新月异的市场环境和客户需求的多样化,销售人员通常会面临以下问题: 接到了新的销售任务,该如何选择和确定目标客户&am…

API协议设计的十种技术

文章目录 前言一、REST二、GraphQL三、gRPC(google Remote Procedure Calls)四、Webhooks五、服务端的事件发送——SSE(Server-sent Events)六、EDI(Electronic Data Interchange)七、面向API 的事件驱动设…

Visual Studio2022实用使用技巧集

前言 对于.NET开发者而言Visual Studio是我们日常工作中比较常用的开发工具,掌握一些Visual Studio实用的搜索、查找、替换技巧可以帮助我们大大提高工作效率从而避免996。 Visual Studio更多实用技巧 https://github.com/YSGStudyHards/DotNetGuide 代码和功能搜…

Verilog基础:强度建模与net型信号的多驱动问题(三)

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 四、一般情况下的net型信号的线与组合(线网多驱动) 在Verilog基础:强度建模与net型信号的多驱动问题(二&#xff0…

如何在Linux部署JumpServer堡垒机并实现远程访问本地服务

文章目录 前言1. 安装Jump server2. 本地访问jump server3. 安装 cpolar内网穿透软件4. 配置Jump server公网访问地址5. 公网远程访问Jump server6. 固定Jump server公网地址 前言 JumpServer 是广受欢迎的开源堡垒机,是符合 4A 规范的专业运维安全审计系统。JumpS…

如何使用支付宝沙箱环境本地配置模拟支付并结合内网穿透远程调试

文章目录 前言1. 下载当面付demo2. 修改配置文件3. 打包成web服务4. 局域网测试5. 内网穿透6. 测试公网访问7. 配置二级子域名8. 测试使用固定二级子域名访问 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂&#xff…

如何自己实现一个Spring Boot Starter

现在很多开源的组件都会提供对应的 springboot-starter 包给我们去用,要做一个 starter 包并不难。参照Spring内置的实现就好了: 1、在工程里引入 starter 打包相关的依赖。 2、在我们工程内建 spring.factories 文件,编写我们配置类的全限类…

ubuntu源码安装MySQL

mysql下载路径 创建新数组 mysql sudo groupadd mysql# 创建用户 mysql ,指定属组为 mysql,禁止其登录 # --no-create-home选项,创建用户时不会自动创建主目录 sudo adduser --system --no-create-home --ingroup mysql --shell /sbin/nologin mysql创…

安卓Spinner文字看不清

Holo主题安卓13的Spinner文字看不清&#xff0c;明明已经解决了&#xff0c;又忘记了。 spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {TextView textV…

基于CLIP4Clip的DRL的WTI模块实现

关于DRL的WTI模块&#xff1a; Weighted Token-wise Interaction&#xff1a; 直觉上&#xff0c;并非所有的单词和视频帧都同等重要。我们提供一种自适应方法&#xff0c;来调整每个标记的权重大小&#xff1a; 注&#xff1a;其中两个f函数都是MLP和softmax构成。 WTI的算…

网络安全的信息收集方法有哪些?

网络安全攻击中的信息收集是攻击者为了了解目标系统的弱点、配置、环境和潜在的防御措施而进行的活动。以下是一些常见的信息收集手段&#xff1a; 开放网络资源查询&#xff1a; 使用搜索引擎查找关于目标组织的信息&#xff0c;包括新闻稿、社交媒体帖子、官方网站等。通过W…

140:vue+leaflet加载here地图(v2软件多种形式)

第140个 点击查看专栏目录 本示例介绍如何在vue+leaflet中添加HERE地图(v2版本的软件),并且含多种的表现形式。包括地图类型,文字标记的设置、语言的选择、PPI的设定。 v3版本和v2版本有很大的区别,关键是引用方法上,请参考文章尾部的API链接。 直接复制下面的 vue+leaf…

【华为 ICT HCIA eNSP 习题汇总】——题目集7

1、一台 PC 的 MAC 地址是 5489-98FB-65D8 &#xff0c;管理员希望该 PC 从 DHCP 服务器获得指定的 IP 地址为192.168.1.11/24&#xff0c;以下命令配置正确的是&#xff08;&#xff09;。 A、dhcp static-bind ip-address 192.168.1.11 24 mac- address 5489-98FB-65D8 B、dh…

Kafka-服务端-日志存储

基本概念 首先需要了解的是&#xff0c;Kafka使用日志文件的方式保存生产者发送的消息。每条消息都有一个offset值来表示它在分区中的偏移量&#xff0c;这个offset值是逻辑值&#xff0c;并不是消息实际存放的物理地址。 offset值类似于数据库表中的主键&#xff0c;主键唯一…

亚马逊KYC审核的重要性,所需提交的文件有哪些?—站斧浏览器

亚马逊KYC审核的重要性有哪些&#xff1f; KYC审核是亚马逊对卖家身份的一种验证&#xff0c;确保卖家遵守相关法规。只有通过审核的卖家才能在欧洲平台进行销售。因此&#xff0c;正确理解和应对KYC审核对于卖家来说至关重要。 注册完成后立即触发&#xff1a;新注册的卖家可…

华为欧拉操作系统结合内网穿透实现固定公网地址SSH远程连接

文章目录 1. 本地SSH连接测试2. openEuler安装Cpolar3. 配置 SSH公网地址4. 公网远程SSH连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 欧拉操作系统(openEuler, 简称“欧拉”)是面向数字基础设施的操作系统,支持服务器、云计算、边缘openEuler是面向数字基础设施的操作系…