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

news/2024/10/5 23:38:50/

昇思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种属性判断出酒的品种。


http://www.ppmy.cn/news/1473562.html

相关文章

Kylin多维数据仓库架构解析:释放大数据潜能的秘诀

Kylin多维数据仓库架构解析:释放大数据潜能的秘诀 Apache Kylin是一款开源的分布式多维数据仓库架构,旨在为超大规模数据集提供快速的SQL查询能力。与传统的数据仓库解决方案相比,Kylin的多维数据仓库架构具有独特的特点和优势。本文将深入探…

C#编程命名笔记

1.变量名的命名规则->要求用“匈牙利法则” 变量类型特征位数命名规则例子bool 用b开头bUpdatesbyte有符号8位用sby开头sbyTypebyte无符号8位用by开头byTypeshort有符号16位用n开头nStepCountushort无符号16位用un开头unCountint有符号32位用i开头iCountuint(WO…

python conda查看源,修改源

查看源 conda config --show-sources 修改源 可以直接vim .condarc修改源,

入门机器视觉的正确打开方式——徒手撸一个python+opencv实现的机器视觉简易调试工具(下)

目录 1.引言2.框架思路3.图像处理流程化的实现3.1如何解析图像流程数据结构3.2 使用networkx网络图库3.3 python实现 4.结论5.python源码PS.扩展阅读ps1.六自由度机器人相关文章资源ps2.四轴机器相关文章资源ps3.移动小车相关文章资源 1.引言 在当今AI时代,关于视觉…

Go 语言入门(一)

Go Modules依赖包查找机制 下载的第三方的依赖存储在 $GOPATH/pkg/mod 下go install 生成的可执行文件存储在 $GOPATH/bin下依赖查找顺序: 工作目录$GOPATH/pkg/mod$GOPATH/src 一、Go语言基础 1.标识符与关键字 1.1 命名方式 ​ go变量、常量、自定义类型、包…

算法训练 | 图论Part4 | 107. 寻找存在的路径

目录 107. 寻找存在的路径 并查集法 107. 寻找存在的路径 题目链接&#xff1a;107. 寻找存在的路径 文章讲解&#xff1a;代码随想录 并查集法 代码一&#xff1a;并查集 #include <iostream> #include <vector> using namespace std;int n; // 节点数量 v…

pycharm如何使用jupyter

目录 配置jupyter新建jupyter文件别人写的方法&#xff08;在pycharm种安装&#xff0c;在网页中使用&#xff09; pycharm专业版 配置jupyter 在pycharm终端启动一个conda虚拟环境&#xff0c;输入 conda install jupyter会有很多前置包需要安装&#xff1a; 新建jupyter…

Canary,三种优雅姿势绕过

Canary&#xff08;金丝雀&#xff09;&#xff0c;栈溢出保护 canary保护是防止栈溢出的一种措施&#xff0c;其在调用函数时&#xff0c;在栈帧的上方放入一个随机值 &#xff0c;绕过canary时首先需要泄漏这个随机值&#xff0c;然后再钩爪ROP链时将其作为垃圾数据写入&…