昇思MindSpore25天学习打卡Day17:K近邻算法实现红酒聚类

昇思MindSpore25天学习打卡Day17:K近邻算法实现红酒聚类

  • 1 实验目地
  • 2 K近邻算法(KNN)原理介绍
    • 2.1 分类问题
    • 2.2 回归问题
    • 2.3 距离的定义
  • 3 实验环境
  • 4 数据处理
    • 4.1 数据准备
    • 4.2 数据读取与处理
      • 4.2.1 导入MindSpore模块和辅助模块
  • 5 模型构建--计算距离
  • 6 模型预测 及 打上训练标签和时间
  • 7 实验小结

本实验主要介绍使用MindSpore在部分wine数据集上进行KNN实验.

1 实验目地

  • 了解KNN的基本概念;
  • 了解如何使用MindSpore进行KNN实验。

2 K近邻算法(KNN)原理介绍

K近邻算法(K-Nearest-Neighbor, KNN)是一种用于分类和回归的非参数统计方法,最初由 Cover和Hart于1968年提出(Cover等人,1967),是机器学习最基础的算法之一。它正是基于以上思想:要确定一个样本的类别,可以计算它与所有训练样本的距离,然后找出和该样本最接近的k个样本,统计出这些样本的类别并进行投票,票数最多的那个类就是分类的结果。KNN的三个基本要素:

  • K值,一个样本的分类是由K个邻居的"多数表决“确定的。K值越小,容易受噪声影响,反之,会使类别之间的界限变得模糊。
  • 距离度量,反映了特征空间中两个样本间的相似度,距离越小,越相似。常用的有Lp距离(p=2时,即为欧式距离)、曼哈顿距离、海明距离等。
  • 分类决策规则,通常是多数表决,或者基于距离加权的多数表决(权值与距离成反比)。

2.1 分类问题

预测算法(分类)的流程如下:
(1) 在训练样本集中找出距离待测样本x_test最近的k个样本,并保存至集合N中;
(2) 统计集合N中每一类样本的个数 C i , i = 1 , 2 , 3 , . . . , c C_i,i= 1,2,3,...,c Ci,i=1,2,3,...,c;
(3) 最终的分类结果为 a r g m a x C i argmaxC_i argmaxCi;(最大的对应的 C i C_i Ci;)那个类.
在上述实现过程中,K的取值尤为重要。它可以根据问题和数据特点来确定。在具体实现时,可以考虑样本的权重,即每个样本有不同的投票权重,这种方法称为带权重的k近邻算法,它是一种变种的k近邻算法。

2.2 回归问题

假设离测试样本最近的k个训练样本的标签值为,则对样本的回归预测输出值为:
y ˆ = ( ∑ i = 1 n y i ) / k \^{y}=(\sum_{i=1}^ny_i)/k yˆ=(i=1nyi)/k
即为所有邻居的标签均值。
带样本权重的回归预测函数为:
y ˆ = ( ∑ i = 1 n w i y i ) / k \^{y}=(\sum_{i=1}^nw_iy_i)/k yˆ=(i=1nwiyi)/k

其中 w i w_i wi为第个 i i i样本的权重。

2.3 距离的定义

KNN算法的实现依赖于样本之间的距离,其中最常用的距离函数就是欧氏距离(欧几里得距离)。 R n \R^n Rn空间中的两点 x x x y y y,它们之间的欧氏距离定义为:
d ( x , y ) = ∑ i = 1 n ( x i − y i ) n d(x,y)=\sqrt{\sum_{i=1}^n(x_i-y_i)^n} d(x,y)=i=1n(xiyi)n
需要特别注意的是,使用欧氏距离时,应将特征向量的每个分量归一化,以减少因为特征值的尺度范围不同所带来的干扰,否则数值小的特征分量会被数值大的特征分量淹没。
其它的距离计算方式还有Mahalanobis距离、Bhattacharyya距离等。

3 实验环境

预备知识:

  • 熟练使用Python。.
  • 具备一定的机器学习理论知识,如KNN、无监督学习、 欧式距离等.

实验环境:

  • Mindspore 2.0(MindSpore版本会定期更新,本指导也会定期刷新,与版本配套);
  • 本案例支持win_x86和Linux系统,CPU/GPU/Ascend均可运行:
  • 如果在本地运行此实验,请参考《Mindspore环境搭建实验手册》在本地安装MindSpore。

4 数据处理

4.1 数据准备

Wine数据集是模式识别最著名的数据集之一,Wine数据集的官网:LineWine Data Set。这些数据是对来自意大利同一地区但来自三个不同品种的葡萄酒进行化学分析的结果。数据集分析了三种葡萄酒中每种所含13种成分的量。这些13种属性是

  1. Alcohol,酒精
  2. Malic acid,苹果酸
  3. Ash,灰
  4. Alcalinity of ash,灰的碱度
  5. Magnesium,镁
  6. Total phenols,总酚
  7. Flavanoids,类黄酮
  8. Nonflavanoid phenols,非黄酮酚
  9. Proanthocyanins,原花青素
  10. Color intensity,色彩强度
  11. Hue,色调
  12. OD280/OD315 of diluted wines,稀释酒的OD280/OD315
  13. Proline,脯氨酸
  • 方式一,从Wine数据集官网下载Linkwine.data文件:
  • 方式二,从华为云OBS中下载wine.data文件
KeyValueKeyValue
Data Set Characteristice: :MultivariateNumber of Instances:178
Attribute Characteristics:Integer,RealNumber of Attributes:13
Associated Tasks:ClassificationMissing Values?No

在这里插入图片描述

4.2 数据读取与处理

导入Mindspore模块和辅助模块在生成数据之前,导入需要的Python库。
目前使用到os库,为方便理解,其他需要的库,我们在具体使用到时再说明。
详细的Mindspore的模块说明,可以在Mindspore APl页面中搜索查询。
可以通过context.set_context来配置运行需要的信息,譬如运行模式、后端信息、硬件等信息。
导入context模块,配置运行需要的信息。

4.2.1 导入MindSpore模块和辅助模块

在这里插入图片描述
读取Wine数据集 wine.data,并查看部分数据.
在这里插入图片描述
取三类样本(共178条),将数据集的13个属性作为自变量 X X X。将数据集的3个类别作为因变量 Y Y Y
在这里插入图片描述
取样本的某两个属性进行2维可视化,可以看到在某两个属性上样本的分布情况以及可分性。
在这里插入图片描述


将数据集按128:50划分为训练集(已知类别样本)和验证集(待验证样本):
在这里插入图片描述

5 模型构建–计算距离

利用MindSpore提供的 tile,square, ReduceSum, sqrt,TopK 等算子,通过矩阵运算的方式同时计算输入样本x和已明确分类的其他样本X_train的距离,并计算出top k近邻
在这里插入图片描述

6 模型预测 及 打上训练标签和时间

在验证集上验证KNN算法的有效性,取 k = 5 k=5 k=5,验证精度接近80%,说明KNN算法在该3分类任务上有效,能根据酒的13种属性判断出酒的品种。
在这里插入图片描述
在这里插入图片描述

7 实验小结

本实验使用MindSpore实现了KNN算法,用来解决3分类问题,取wine数据集上的3类样本,分为已知类别样本和待验证样本,从验证结果可以看出KNN算法在该任务上有效,能根据酒的13种属性判断出酒的品种。

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

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

相关文章

java算法day9

232.用栈实现队列 用队列实现栈 有效的括号 删除字符串中的所有相邻重复项 逆波兰表达式求值 解决栈和队列的基本数据结构 Queue(队列) 在java中是一个接口。定义的方法: //boolean add(E e): 将指定的元素插入此队列(如果…

软考高级里《系统架构设计师》容易考吗?

我还是22年通过的架构考试。系统架构设计师属于软考高级科目,难度比初级和中级都要大,往年的通过率也比较低,一般在10-20%左右。从总体来说,这门科目确实是不好过的,大家如果想要备考系统架构设计师的话,还…

【界面态】霍尔效应表征氮化对SiC/SiO2界面陷阱的影响

引言 引言主要介绍了硅碳化物(SiC)金属-氧化物-半导体场效应晶体管(MOSFETs)作为新一代高压、低损耗功率器件的商业化背景。SiC MOSFETs因其优越的电气特性,在高电压和高温应用领域具有巨大的潜力。然而,尽…

Leedcode刷题——7 滑动窗口 双指针

注&#xff1a;以下代码均为c 1. 两数之和2&#xff08;输入有序数组&#xff09; // 法1&#xff1a;暴力 vector<int> twoSum1(vector<int>& numbers, int target) {vector<int> ans(2);int n numbers.size();for(int i 0; i < n-1; i){if(i ! 0…

预算有限?如何挑选经济适用的安全管理系统?

如今&#xff0c;无论是信息安全、生产安全还是人员安全&#xff0c;都直接关系到企业的稳定运营和长远发展。然而&#xff0c;对于许多中小企业而言&#xff0c;高昂的安全管理系统投入往往成为一大难题。那么&#xff0c;在预算有限的情况下&#xff0c;如何挑选一款既经济适…

Camera Raw:常规工具

在 Camera Raw 窗口右下角提供了四个常用的工具&#xff0c;它们分别是&#xff1a;缩放工具、抓手工具、切换取样器叠加以及切换网格叠加工具。 ◆ ◆ ◆ 缩放工具 Zoom Tool 用于放大或缩小预览图像&#xff0c;便于查看和编辑细节。 快捷键&#xff1a;Z 1、双击“缩放工具…

瓦罗兰特游戏帧数低怎么办 瓦罗兰特游戏帧率提不上去怎么解决

瓦罗兰特是一款由拳头游戏&#xff08;Riot Games&#xff09;开发的5v5英雄射击游戏。结合了MOBA元素&#xff0c;每个角色都拥有四个独特的技能&#xff1b;提供了多种游戏模式&#xff0c;如5V5战术射击等&#xff1b;角色和皮肤设计丰富。游戏中&#xff0c;玩家将扮演各具…

uniapp 表格,动态表头表格封装渲染

1.接口表格数据&#xff1a; {"headers": [{"label": "实例名","name": "v1","order": 1,"hide": false,"dateTypeValue": null},{"label": "所属科室","name&quo…

MATLAB数据统计描述和分析

描述性统计就是搜集、整理、加工和分析统计数据&#xff0c; 使之系统化、条理化&#xff0c;以显示出数据资料的趋势、特征和数量关系。它是统计推断的基础&#xff0c;实用性较强&#xff0c;在数学建模的数据描述部分经常使用。 目录 1.频数表和直方图 2 .统计量 3.统计…

Tensorflow之损失函数与交叉熵

损失函数&#xff1a;预测值与已知答案之间的差距 NN优化目标&#xff1a;loss最小{mse&#xff0c; 自定义&#xff0c; ce) 均方误差tensorflow实现&#xff0c;loss_mse tf.reduce_mean(tf.sqrue(y_-y) 预测酸奶日销量&#xff0c;y&#xff0c;x1, x2是影响日销量的因素…

掌握三菱Q系列QD75运动控制模块

跟着资深三菱电气工程师严老师&#xff0c;一起来学习如何使用三菱QD75系列定位模块来完成各种运动控制需求&#xff0c;本课程专门讲解这个三菱QD75定位模块&#xff0c;如果你不知道如何使用QD75模块或者说对QD75模块背后的理论和使用方法不是很熟悉的话&#xff0c;一定要来…

数据高效交互丨DolphinDB Redis 插件使用指南

DolphinDB 是一个高性能的分布式数据库。通过 Redis 插件&#xff0c;DolphinDB 用户可以轻松地与 Redis 数据库进行交互。用户不仅可以从 DolphinDB 向 Redis 发送数据&#xff0c;实现高速的数据写入操作&#xff1b;还可以从 Redis 读取数据&#xff0c;将实时数据流集成到 …

android13 设置左右分屏修改为单屏幕,应用分屏改为单屏

1.前言 android13中,系统设置变成,左边是一级菜单,右侧是二级菜单, 这样跟我们以前android7/8/9的布局是不一样的,我们需要将它修改为一级菜单,点进去才是二级菜单这种。 效果如下 2.系统设置实现分析 它这里使用的是google新出的embedding activity, 相关的知识这里…

【福利】代码公开!咸鱼之王自动答题脚本

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 微信或QQ打开咸鱼之王小程序&#xff0c;进入答题界面&#xff0c;运行main.py。期间不要动鼠标。 可自行更改代码来适配自己的需求~ 可以按照示例图片…

欧拉部署nginx

1.下载nginx 下载地址&#xff1a;https://nginx.org/en/download.html 选择稳定版本 下的镜像文件进行下载 2.解压Nginx包 cd /root/nginx tar -zxvf nginx-1.26.0.tar.gz cd nginx-1.26.03.安装nginx相关依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl o…

数据结构(初阶2.顺序表)

文章目录 一、线性表 二、顺序表 2.1 概念和结构 2.2 分类 2.2.1 静态顺序表 2.2.2 动态顺序表 2.3动态顺序表的实现 1.SeqList.h 2.SeqList.c 打印顺序表 初始化 销毁 增容 尾插 头插 在指定位置之前插入数据 尾删 头删 在指定位置删除数据 3.test.c 一、线性表 线性表&#…

浏览器中js外挂脚本的执行方式

1、开发工具控制台交互执行 网页中按F12打开开发者工具&#xff0c;选择“控制台”&#xff0c;键入js脚本命令回车执行&#xff0c;适用于临时使用脚本逻辑简单的场景&#xff0c;实例如下&#xff1a; // 获取网页元素的文本脚本 var elem document.getElementById("…

开发个人Go-ChatGPT–6 OpenUI

开发个人Go-ChatGPT–6 OpenUI Open-webui Open WebUI 是一种可扩展、功能丰富且用户友好的自托管 WebUI&#xff0c;旨在完全离线运行。它支持各种 LLM 运行器&#xff0c;包括 Ollama 和 OpenAI 兼容的 API。 功能 由于总所周知的原由&#xff0c;OpenAI 的接口需要密钥才…

Zabbix Sia Zabbix 逻辑漏洞(CVE-2022-23134)

前言 CVE-2022-23134是一个中等严重度的漏洞&#xff0c;影响Zabbix Web前端。这个漏洞允许未经身份验证的用户访问setup.php文件的某些步骤&#xff0c;这些步骤通常只对超级管理员开放。利用这个漏洞&#xff0c;攻击者可以通过跳过某些步骤来重新配置Zabbix前端&#xff0c…

Qt 线程同步机制 互斥锁 信号量 条件变量 读写锁

qt线程同步 Qt提供了丰富的线程同步机制来帮助开发者更高效和安全地进行多线程编程。其主要包括: QMutex:为共享数据提供互斥访问能力,避免同时写入导致的数据冲突。利用lock()/unlock()方法实现锁定和解锁。 QReadWriteLock:读写锁,允许多个读线程同时访问,但写操作需要独占…