昇思25天学习打卡营第14天|基于MindSpore的红酒分类实验

news2024/7/30 19:35:37

背景介绍

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

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

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

数据集

数据准备

Wine数据集是模式识别最著名的数据集之一,Wine数据集的官网:Wine Data Set。这些数据是对来自意大利同一地区但来自三个不同品种的葡萄酒进行化学分析的结果。数据集分析了三种葡萄酒中每种所含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数据集官网下载wine.data文件。
  • 方式二:从华为云OBS中下载wine.data文件。
KeyValueKeyValue
Data Set Characteristics:MultivariateNumber of Instances:178
Attribute Characteristics:Integer, RealNumber of Attributes:13
Associated Tasks:ClassificationMissing Values?No

代码示例:

from download import download

# 下载红酒数据集
url = "https://ascend-professional-construction-dataset.obs.cn-north-4.myhuaweicloud.com:443/MachineLearning/wine.zip"  
path = download(url, "./", kind="zip", replace=True)

数据读取与处理

代码示例:

%matplotlib inline
import os
import csv
import numpy as np
import matplotlib.pyplot as plt

import mindspore as ms
from mindspore import nn, ops

ms.set_context(device_target="CPU")

# 读取Wine数据集并查看部分数据
with open('wine.data') as csv_file:
    data = list(csv.reader(csv_file, delimiter=','))
print(data[56:62]+data[130:133])

# 取三类样本(共178条),将数据集的13个属性作为自变量X。将数据集的3个类别作为因变量Y
X = np.array([[float(x) for x in s[1:]] for s in data[:178]], np.float32)
Y = np.array([s[0] for s in data[:178]], np.int32)

# 将数据集按128:50划分为训练集(已知类别样本)和验证集(待验证样本)
train_idx = np.random.choice(178, 128, replace=False)
test_idx = np.array(list(set(range(178)) - set(train_idx)))
X_train, Y_train = X[train_idx], Y[train_idx]
X_test, Y_test = X[test_idx], Y[test_idx]

# 取样本的某两个属性进行2维可视化,可以看到在某两个属性上样本的分布情况以及可分性
attrs = ['Alcohol', 'Malic acid', 'Ash', 'Alcalinity of ash', 'Magnesium', 'Total phenols',
         'Flavanoids', 'Nonflavanoid phenols', 'Proanthocyanins', 'Color intensity', 'Hue',
         'OD280/OD315 of diluted wines', 'Proline']
plt.figure(figsize=(10, 8))
for i in range(0, 4):
    plt.subplot(2, 2, i+1)
    a1, a2 = 2 * i, 2 * i + 1
    plt.scatter(X[:59, a1], X[:59, a2], label='1')
    plt.scatter(X[59:130, a1], X[59:130, a2], label='2')
    plt.scatter(X[130:, a1], X[130:, a2], label='3')
    plt.xlabel(attrs[a1])
    plt.ylabel(attrs[a2])
    plt.legend()
plt.show()

运行结果:
运行结果

模型构建

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

代码示例:

class KnnNet(nn.Cell):
    def __init__(self, k):
        super(KnnNet, self).__init__()
        self.k = k

    def construct(self, x, X_train):
        #平铺输入x以匹配X_train中的样本数
        x_tile = ops.tile(x, (128, 1))
        square_diff = ops.square(x_tile - X_train)
        square_dist = ops.sum(square_diff, 1)
        dist = ops.sqrt(square_dist)
        #-dist表示值越大,样本就越接近
        values, indices = ops.topk(-dist, self.k)
        return indices

def knn(knn_net, x, X_train, Y_train):
    x, X_train = ms.Tensor(x), ms.Tensor(X_train)
    indices = knn_net(x, X_train)
    topk_cls = [0]*len(indices.asnumpy())
    for idx in indices.asnumpy():
        topk_cls[Y_train[idx]] += 1
    cls = np.argmax(topk_cls)
    return cls

模型预测

在验证集上验证KNN算法的有效性,取 𝑘=5 ,验证精度接近80%,说明KNN算法在该3分类任务上有效,能根据酒的13种属性判断出酒的品种。
代码示例:

acc = 0
knn_net = KnnNet(5)
for x, y in zip(X_test, Y_test):
    pred = knn(knn_net, x, X_train, Y_train)
    acc += (pred == y)
    print('label: %d, prediction: %s' % (y, pred))
print('Validation accuracy is %f' % (acc/len(Y_test)))

运行结果:
运行结果

截图时间
截图时间

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

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

相关文章

IPv4到IPv6的转换

为何要向IPv6过渡: 随着互联网的飞速发展,越来越多的设备接入网络,IPv4地址资源日益匮乏,已无法满足不断增长的需求。 IP地址定位:IP数据云 - 免费IP地址查询 - 全球IP地址定位平台 IPv6的出现为解决这一问题提供了…

基于OOB的NFTL设计

Nand flash设备存储结构示例 上图是一个1056Mb的存储设备。页面用户数据 空间是2KB,OOB是64字节,每个块 包含64个页面,一共 1024个块。用户数据 空间是128MB,OOB空间是4MB。 每个页面的OOB保留一个字节 用于坏块 标识 &#xff0c…

Elasticsearch 更新指定字段

Elasticsearch 更新指定字段 准备条件查询数据更新指定字段更新子级字段 准备条件 以下查询操作都基于索引crm_clue来操作,索引已经建过了,本文主要讲Elasticsearch更新指定字段语句,下面开始写更新语句执行更新啦! 查询数据 查…

Flat Ads:金融科技应用的全球化趋势与发展前景

近年来,全球金融应用市场遭遇了重大严峻考验与深刻变革,但即便在全球经济承受重压、市场波动加剧的背景下,金融科技应用仍展现出了强大的韧性与蓬勃的增长动力。相关机构预计,2023 年全球金融应用市场的总收入达到 15.5亿美元的新高,实现了同比19%的显著增长,而到2027年,这一数…

【源码+文档+调试讲解】超市进销存管理系统

摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存…

探索 ASTRA.AI:打造低代码多模态 AI 应用的开源平台

声网(Agora)研发的 ASTRA 平台,作为一款面向大语言模型应用开发的开源解决方案,无疑为 AI 领域注入了新的活力。它巧妙地结合了 BaaS(后端即服务)概念与大型语言模型的运营,使得创建高性能的生成…

开发情绪识别人工智能时的道德考量

情绪调节人工智能是机器学习领域的最新技术进步之一。尽管它显示出巨大的潜力,但道德问题将影响其采用率和寿命。人工智能开发人员能克服这些问题吗? 什么是情绪识别人工智能? 情绪识别人工智能是一种机器学习模型。它通常依赖于计算机视觉…

AI算力中心研究分析

中国 AI 算力中心研究报告 算力产业稳健发展,算力创新能力持续增强,推动我国数字经济量质齐升。 2022 年我国算力规模稳步扩张,算力发展为拉动我国 GDP 增长做出突出贡献,在 2016-2022 年期间,我国算力规模平均每年增…

基于springboot+vue的文件管理系统

一、系统架构 前端:vue2 | element-ui 后端:springboot | mybatis-plus 环境:jdk1.8 | mysql | maven | node 二、代码及数据库 三、功能介绍 01. 注册 02. 登录 03. 管理员-首页 04. 管理员-个人中心-修改密码 05. …

Idea 2023 使用GitLab提交代码提示输入Token

项目场景: 今天电脑换硬盘了,安装了 IDEA2023 款的社区版开发工具,下载代码后,提交并推送代码到远程服务器的时候,提示输入Token,并不是用户名和密码。 问题描述 推送代码到远程GitLab本地仓库的时候&…

通用代码生成器模板体系,域对象,枚举和动词算子

通用代码生成器模板体系,域对象,枚举和动词算子 通用代码生成器或者叫动词算子式通用目的代码生成器是一组使用Java编写的通用代码生成器。它们的原理基于动词算子和域对象的笛卡尔积。它们没有使用FreeMarker和或者Velocity等现成的文件式模板引擎。而…

php快速入门

前言 php是一门脚本语言,可以访问服务器,对数据库增删查改(后台/后端语言) 后台语言:php,java,c,c,python等等 注意:php是操作服务器,不能直接在…

曝宝马汽车门店亏损严重价格战带来的伤害太大了

今年以来不仅餐饮行业难,就连一些车企都陷入困境当中,多家车企选择打价 格战。只不过日前的时候媒体爆料称,宝马汽车门店因为打价格战,最终亏损严 重,为了避免亏损再度出现,因此宝马7月将会开始降量保价。文章来源于:股城网www.gucheng.com 实际上,进入2024年…

分享语音音浪的自制动态特效

主要使用小程序实现的&#xff1a; <!-- wxml --> <view class"audio"><view class"audio-item" wx:for"{{list}}" wx:key"index" style"{{item}}"></view> </view> //js list: [animation…

Sentieon Arm版本:进一步降低基因组计算成本

前不久&#xff0c;Arm在其社区的HPC blog上发布了一篇Sentieon在低通量全基因组&#xff08;LP-WGS&#xff09;的应用案例。 图1 伴随着大规模基因组学的需求持续增长&#xff0c;基因测序成本的降低使得研究和分析更加广泛。而在基因组学的每一个应用背后,都有一系列计算密…

C++对顶堆(求第k大、k小数)+P1801题解

这里借鉴了一些别人题解的思路&#xff0c;仅供自己收藏使用。 题目大意&#xff1a;动态修改数组&#xff0c;求第k小的数。 from&#xff1a;7KByte P1801题解 对此&#xff0c;POISONN大佬发表了他的意见&#xff1a;楼主写法应该是让大根堆里有k-1个元素&#xff0c;然后…

如何从硬盘恢复已删除的视频

您是否想知道是否可以恢复已删除的视频&#xff1f; 幸运的是&#xff0c;您可以使用照片恢复从硬盘、SD 卡和 USB 闪存驱动器恢复已删除的视频文件。 您是否曾发生过这样的情况&#xff1a;当您随机删除文件以释放空间时&#xff0c;您不小心按下了一些重要视频的删除按钮并…

捷配生产笔记-细间距芯片的表面处理工艺:OSP与沉金工艺的重要性

在现代电子制造领域&#xff0c;随着技术的进步&#xff0c;电子设备变得越来越小型化和高性能化。细间距芯片作为实现这一目标的关键组件&#xff0c;其制造工艺要求极为严格。在这些要求中&#xff0c;表面处理工艺尤为关键&#xff0c;因为它直接影响到芯片的焊接质量和长期…

教你如何快速输入公式——Mathpix

概述 相信各位博主在撰写技术性博客时&#xff0c;都遇到在markdown编辑器中输入公式的问题&#xff0c;自己慢慢输入公式太过麻烦&#xff0c;想要直接复制文献中的又显示异常&#xff0c;是在叫人为难。这里&#xff0c;教大家使用一个只用截图&#xff0c;就能自动生成公式…

宁盾单点登录厂商-快速实现统一身份认证、单点登录SSO、MFA多因素认证

在当今数字化时代&#xff0c;企业的IT基础设施日益复杂&#xff0c;多系统、多设备的应用场景使得统一身份认证和单点登录&#xff08;SSO&#xff09;成为企业提升安全性和业务效率的关键需求。宁盾&#xff0c;作为数字身份基础设施提供商&#xff0c;凭借其单点登录&#x…