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.hqwc.cn/news/422638.html

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

相关文章

InnoDB的Buffer Pool

前置概念:一个数据页16KB,一个数据页可能有多个记录,即使我们只需要访问一条记录,需要把整个数据页加载到内存中,加载到内存后不是直接释放,而是缓存到内存当中(当然对于buffer pool的缓存是在存…

自己构建webpack+vue3+ts

先看看我的目录结构(我全局使用TS): 一、安装配置webpack打包 安装esno npm install esnoesno 是基于 esbuild 的 TS/ESNext node 运行时,有了它,就可以直接通过esno *.ts的方式启动脚本,package.json中添加 type:…

Quartus II使用小技巧

工程结构: 在建立完某项设计的文件后,依次在其里面新建四个文件夹,分别为:rtl、qprj、msim、doc。 rtl文件夹用于存放设计的源文件。 doc文件夹用于存放设计的一些文档性的资料。 qprj文件夹用于存放quaruts 工程以及quartus生…

SAP CDS VIEW实现行列转换

需求: 销售订单上的业务伙伴数据都在VBPA存储,根据PARVW来区分是售达方或者是送达方等等,有时候一些报表取数时有一些条件,比如售达方等于xxxxx并且送达方等于xxxxx,这时候就不是简单的一条sql就能搞定的事了&#xf…

C++学习笔记——指针

1,指针的基本概念 指针的作用:可以通过指针间接访问内存 内存的编号是从0开始记录的,一般用十六进制数字表示可以利用指针变量保存地址 上图中的p就是a变量的指针,也可以记作*a 2,指针变量的定义和使用 指针变量定…

漫漫数学之旅009

文章目录 经典格言数学习题古今评注拓展学习(一)大数定理(二)伯努利级数 经典格言 真正的问题,不在于机器是否思考,而在于人们是否思考。——BF斯金纳(B. F. Skinner) BF斯金纳&…

力扣hot100 相交链表 超全注释 满级表达

Problem: 160. 相交链表 文章目录 思路复杂度💖 Ac Code 思路 👨‍🏫 参考题解 👩‍🏫 参考图解 复杂度 时间复杂度: O ( n m ) O(nm) O(nm) 空间复杂度: 添加空间复杂度, 示例: O ( 1 ) O(1) O(…

宠物空气净化器推荐哪个好?实惠的猫用猫用净化器牌子测评

作为宠物主人,我们深知养宠物的乐趣和责任,但同时也面临着一些挑战,比如宠物掉毛、异味和空气质量等问题。这就是为什么越来越多的家庭选择宠物空气净化器,为我们创造一个清新、健康的室内环境。 无论我们多么爱我们的毛茸茸伙伴…

uniapp中uview组件库TopTips 顶部提示使用方法

目录 #平台差异说明 #基本使用 #自定义导航栏使用本组件的问题 #主题设置 #显示时间设置 #API #Methods #Props 该组件一般用于页面顶部向下滑出一个提示,尔后自动收起的场景。 #平台差异说明 AppH5微信小程序支付宝小程序百度小程序头条小程序QQ小程序√…

优维全面可观测产品能力分解①:架构可观测

2023年,基于客户需求的洞察,历经1年的潜心优化,优维在第四季度推出集大成产品——「全面可观测解决方案」,涵盖架构可观测、故障可观测、变更可观测、用户可观测、应用服可观测、资源可观测、运维状态可观测等不同场景的可观测能力…

Linux开发工具

Linux开发工具 我们在Linux下 编写代码:vim编译代码:gcc/g调试代码:gdb运行或者自动化构建程序:make/makefile Linux编辑器 vim 编辑器 – 只负责写代码 打开vim时是命令模式(默认打开的模式)&#xf…

【 CSS 】基础1

“坚持就是胜利。” - 温斯顿丘吉尔 【 CSS 】基础 1 CSS 简介 CSS 是层叠样式表 ( Cascading Style Sheets ) 的简称.有时我们也会称之为 CSS 样式表或级联样式表。CSS 也是一种标记语言CSS 主要用于设置 HTML 页面中的文本内容(字体、大小、对齐方式等&#xff…