【机器学习】knn邻近算法解决实际问题

采用kNN算法回答红色字体提出的问题。要求写出算法过程和预测结果。

KNN原理

KNN(K-最近邻)算法是一个简单直观的分类方法。它的核心思想是“物以类聚”,即一个样本的类别通常由其周围最近的几个邻居决定。这里的“最近”是通过计算样本间的距离来确定的。


原理简述:

1. 距离测量:确定一个距离度量,以评估样本之间的相似性。常用的距离度量包括欧氏距离和曼哈顿距离。

2. 邻居选择:选择一个正整数K,表示最近邻居的数量。对于每个需要分类的样本点,算法会找出训练集中与它最近的K个样本点。

3. 多数投票:这K个样本点的多数类别将被赋予给测试样本。如果K=1,那么测试样本的类别就是那一个最近邻居的类别。


 解这道题需要涉及的知识点:

1. 数据预处理:将所有的特征转换为数值型数据,因为KNN算法在计算距离时需要数值型数据。

2. 标签编码:将类别型特征(如“晴朗”、“多云”、“下雨”等)转换为数值,这样可以在算法中使用。

3. 选择K值:选择合适的K值对算法的性能影响很大。K值太小会使得噪声数据的影响增大,而K值太大又会使分类器过于简化。

4. 距离计算:理解并能够计算样本点之间的距离,通常使用欧氏距离公式。

欧氏距离是最常用来衡量两个点在多维空间中的真实距离的一种方法。

假设我们有两个点,P 和 Q,在一个n维空间中,它们的坐标分别为

那么点 P 和点Q 之间的欧氏距离d可以通过下面的公式计算:

或者更简洁地写为:

在二维空间中,这个公式可以简化为我们熟悉的勾股定理形式,计算两点间直线距离:

如果用欧氏距离来计算每个样本点之间的距离,需要将每个类别特征转换为数值,并且可能需要对这些数值进行规范化处理,以确保每个特征在距离计算中的权重是均等的。

5. 分类决策规则:一旦找到最近的K个邻居,就需要根据这些邻居的类别通过投票的方式来确定新样本的类别。


解题思路

1. 数据准备:
   - 首先,需要收集并准备好训练数据,它包括了特征集和标签。在你的案例中,特征集是Outlook、Temperature、Humidity和Windy,而标签是Class。

2. 特征处理:
   - 因为KNN是一种基于距离的算法,所以所有的特征都需要是数值型的。如果特征是分类数据(如文字),需要使用编码方法(如标签编码)将其转换为数值。

3. 选择合适的K值:
   - K值的选择对KNN算法的结果有很大影响。如果K值太小,模型可能会对噪声数据过于敏感;如果K值太大,邻居中可能会包含太多其他类别的数据点。通常通过交叉验证来选择一个较好的K值。

4. 计算距离:
   - 对于新的观测点,计算它与训练集中每个点之间的距离。可以使用不同的距离度量标准,最常用的是欧氏距离。

5. 找到最近的邻居:
   - 排序所有的训练实例,根据选择的K值,挑选出距离最近的K个实例作为最近邻居。

6. 多数投票规则:
   - 根据这K个邻居的类别,使用多数投票的方式来预测新观测点的类别。具体来说,新观测点将被分配到邻居中最常见的类别。

7. 执行预测:
   - 使用KNN模型进行预测。这涉及到将新的数据点输入模型,并根据模型的逻辑输出一个预测结果。

8. 评估模型:
   - 如果有可用的测试数据,评估模型的准确性,这通过比较预测结果和实际结果来完成。

import pandas as pd
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import LabelEncoder# 数据准备
data = {'Outlook': ['sunny', 'sunny', 'overcast', 'rain', 'rain', 'rain', 'overcast','sunny', 'sunny', 'rain', 'sunny', 'overcast', 'overcast', 'rain'],'Temperature': ['hot', 'hot', 'hot', 'mild', 'cool', 'cool', 'cool', 'mild', 'cool', 'mild', 'mild', 'mild', 'hot', 'mild'],'Humidity': ['high', 'high', 'high', 'high', 'normal', 'normal', 'normal', 'high', 'normal', 'normal', 'normal', 'high', 'normal', 'high'],'Windy': ['false', 'true', 'false', 'false', 'false', 'true', 'true', 'false', 'false', 'false', 'true', 'true', 'false', 'true'],'Class': ['N', 'N', 'P', 'P', 'P', 'N', 'P', 'N', 'P', 'P', 'P', 'P', 'P', 'N']
}
df = pd.DataFrame(data)# 编码类别数据
le = LabelEncoder()
df_encoded = df.apply(le.fit_transform)# 分离特征和目标变量
X = df_encoded.drop('Class', axis=1)
y = df_encoded['Class']# 创建KNN分类器,设置K值为3
knn = KNeighborsClassifier(n_neighbors=3)# 训练模型
knn.fit(X, y)# 准备新的观测数据
new_data = pd.DataFrame([['rain', 'hot', 'high', 'false']], columns=['Outlook', 'Temperature', 'Humidity', 'Windy'])# 编码新实例
new_data_encoded = new_data.apply(lambda col: le.fit(df[col.name]).transform(new_data[col.name]))# 预测新数据的类别
prediction = knn.predict(new_data_encoded)# 解码预测结果
decoded_prediction = le.inverse_transform(prediction)# 输出预测结果
print(f'预测结果: {"遇见" if decoded_prediction[0] == "P" else "不遇见"}')

预测结果

当k值为3时,预测结果为不遇见


结果分析

首先,我们需要理解模型是如何根据输入的数据点(新的天气条件)和训练集中的数据点来做出决策的。

  • “不遇见”的原因:
    1. 数据特征与类别关系:预测结果受输入特征与类别标签的关系影响。如果大多数与新输入相似(基于设定的特征:雨天、温度热、湿度高、无风)的数据点在训练集中都标记为“N”,KNN将倾向于预测“不遇见”。
    2. K值的选取:如果选择的K值不适合当前数据的分布,可能会导致误判。例如,如果K值过大,并且数据类别不均衡,那么多数类别可能会对结果产生过大影响。
    3. 训练数据的分布:如果类别“P”(遇见)的样本在特征空间中离新的观测点较远,而类别“N”(不遇见)的样本更接近新的观测点,那么预测结果自然会倾向于“不遇见”。

  • 如何尝试得到“遇见”的结果:
  • 1. 调整K值:可以尝试减小K值,这样模型将更加依赖于与新观测点最接近的少数邻居的标签。这可能有助于捕捉到少数但更相关的邻居数据点的影响。

2. 数据重采样:如果“P”类的样本数量较少,可以尝试对其进行上采样,以平衡类别分布。这样,类别“P”的影响力会增加,可能会改变预测结果。
3. 特征工程:检查是否所有的特征都有助于模型的预测能力。有时候,删除一些不相关或噪声特征可能会提高模型的表现。也可以尝试引入新的特征或转换现有特征。
4. 改变距离度量方式:如果默认的欧氏距离不适合问题的特性,可以尝试其他距离度量方式,如曼哈顿距离或切比雪夫距离。
5. 模型调优和交叉验证:使用交叉验证来找到最优的K值和其他模型参数。这可以通过网格搜索等方法来实现。

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

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

相关文章

智能零售:引领购物新时代

智能零售通过整合人工智能、物联网、大数据和机器学习等技术,正在彻底改变传统的购物模式,为消费者和零售商提供前所未有的效率和个性化体验。 智能零售利用消费者数据分析来提供个性化的购物推荐。无论是在线平台或是实体店内,智能系统都能…

RabbitMQ - Spring boot 整合 RabbitMQ

一、RabbitMQ 1、RabbitMQ 使用场景 1.1、服务解耦 假设有这样一个场景, 服务A产生数据, 而服务B,C,D需要这些数据, 那么我们可以在A服务中直接调用B,C,D服务,把数据传递到下游服务即可 但是,随着我们的应用规模不断扩大,会有更多的服务需要A的数据,如果有几十甚至几百个下…

Gitea是一个开源、轻量级的自托管Git解决方案

Gitea介绍 Gitea是一个由Go语言编写的、轻量级的、自托管的Git解决方案,类似于GitHub、GitLab等平台。它是用Go语言编写的开源软件,提供了Git版本控制系统的基本功能,包括代码托管、问题跟踪、代码审查、Wiki等。Gitea的设计目标是简单易用、…

uniapp 当前系统没有安装苹果根证书,是否打开证书目录(打开后依次安装证书

当你遇到这类问题时,说明你也极其的困惑!这就是为啥大抵国内这些货色搞的东西总是不尽人意!连开发者生态都搞不好,就急着吹嘘。 这是官方给的技术说明方案: 恭喜你,当你按照这个搞之后,你的问题…

海外媒体如何发布软文通稿

大舍传媒-带您了解海外发布新潮流 随着全球化的不断深入,越来越多的中国企业开始关注海外市场。为了在国际舞台上树立品牌形象,企业纷纷寻求与海外媒体合作,通过发布软文通稿的方式,传递正面信息,提升品牌知名度。作为…

【ElasticSearch】安装(bug篇)

以下解决办法参考自网友们的分享 1. JDK绑定问题 但其实这样也没有问题,因为内嵌的jdk版本与当前的es版本是适配的 但是,如果内嵌的jdk与当前es不适配,那就要修改配置文件 / 添加环境变量,让es启动的时候能扫描到我们本地的jdk …

2024蓝桥杯每日一题(组合计数)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一:计算系数 试题二:求组合数1 试题三:求组合数2 试题四:杨辉三角形 试题一:计算系数 【题目描述】 给定一个多项式 (axby)k,请…

Linux内核之aligned用法实例(四十七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

2024 NTFS读写工具Tuxera NTFS for Mac 是如何进行下载、安装、激活的

本篇将为各位小伙伴们集中讲解一下NTFS读写工具Tuxera NTFS for Mac 是如何进行下载、安装、激活与换机的。 在数字化时代,数据交换和共享变得日益重要。然而,对于Mac用户来说,与Windows系统之间的文件交换可能会遇到一些挑战。这是因为Mac …

一个开源的全自动视频生成软件MoneyPrinterTurbo

只需提供一个视频 主题 或 关键词 ,就可以全自动生成视频文案、视频素材、视频字幕、视频背景音乐,然后合成一个高清的短视频。 一:功能特性 完整的 MVC架构,代码 结构清晰,易于维护,支持 API 和 Web界面…

【安装部署】Apache SeaTunnel 和 Web快速安装详解

版本说明 由于作者目前接触当前最新版本为2.3.4 但是官方提供的web版本未1.0.0,不兼容2.3.4,因此这里仍然使用2.3.3版本。 可以自定义兼容处理,官方提供了文档:https://mp.weixin.qq.com/s/Al1VmBoOKu2P02sBOTB6DQ 因为大部分用…

Backend - DRF 序列化(django-rest-framework)

目录 一、restful 、django-rest-framework 、swagger 三者的关系 (一)restful API(REST API) 1. rest 2. restful 3. api 4. restfulAPI (二)django-rest-framework(简称DRF&#xff09…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十三 简单去除图片水印效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十三 简单去除图片水印效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十三 简单去除图片水印效果 一、简单介绍 二、简单去除图片水印效果实现原理 三、简单去除图片水印效果案例…

IP协议如何进行地址管理?

如今,IP协议有两个版本,分别是IPv4和IPv6,IPv4是目前主要应用的版本。IPv4的IP地址是以4个字节的数字来表示的,比如 127.0.0.1。因此,IPv4所能表示IP地址的个数是2^32次方,也就是42亿多个,看起来…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之十二 简单人脸识别

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之十二 简单人脸识别 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之十二 简单人脸识别 一、简单介绍 二、简单人脸识别实现原理 三、简单人脸识别案例实现简…

Android GridLayoutManager Glide批量加载Bitmap绘制Canvas画在RecyclerView,Kotlin(a)

Android GridLayoutManager Glide批量加载Bitmap绘制Canvas画在RecyclerView&#xff0c;Kotlin&#xff08;a&#xff09; <uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name"android.permi…

IDEA: Unable to resolve table ‘xxx‘

描述&#xff1a; 在 IDEA 连接到数据库后&#xff0c;SQL 语句提示 Unable to resolve table 表名&#xff0c;且其它字段也飘红报错。 解决&#xff1a; 右键点击数据库&#xff0c;选择 Tools -> Manage Shown Schemas... 勾选你所使用的数据库即可&#xff1a; 1、2、3…

FreeRTOS时间管理

FreeRTOS时间管理 主要要了解延时函数&#xff1a; 相对延时&#xff1a;指每次延时都是从执行函数vTaskDelay()开始&#xff0c;直到延时指定的时间结束。 绝对延时&#xff1a;指将整个任务的运行周期看成一个整体&#xff0c;适用于需要按照一定频率运行的任务。 函数 vTa…

软件杯 深度学习图像修复算法 - opencv python 机器视觉

文章目录 0 前言2 什么是图像内容填充修复3 原理分析3.1 第一步&#xff1a;将图像理解为一个概率分布的样本3.2 补全图像 3.3 快速生成假图像3.4 生成对抗网络(Generative Adversarial Net, GAN) 的架构3.5 使用G(z)生成伪图像 4 在Tensorflow上构建DCGANs最后 0 前言 &#…

vagrant 安装虚拟机,docker, k8s

第一步&#xff1a;安装虚拟机 1、安装 vagrant 本机是 mac, 但是这一步不影响&#xff0c;找对应操作系统的安装方式就行了。 vagrant 下载地址 brew install vagrant 2、下载 VirtualBox 虚拟机 VirtualBox 下载地址 找到对应系统下载&#xff0c;安装就可以。 尽量把…