昇思25天学习打卡营第9天 |昇思MindSpore K近邻算法实现红酒聚类

一、介绍

本次实验主要运用 MindSpore 在部分 wine 数据集上开展 KNN 实验,旨在深入理解 KNN 算法的原理与应用,并通过实际操作掌握其在数据分类中的具体实现。

二、K 近邻算法原理

要素描述
K 值决定分类结果的邻居数量,过小易受噪声影响,过大则类别界限模糊。
距离度量反映样本相似度,常用欧式距离、曼哈顿距离、海明距离等。
分类决策规则通常为多数表决或基于距离加权的多数表决。
  1. 分类问题

    • 流程:找出待测样本的最近 k 个样本,统计各类别样本个数,取最多数类别为结果。
    • 带权重的 k 近邻算法:考虑样本投票权重。
  2. 回归问题

    • 无权重:预测值为最近 k 个训练样本标签均值。
    • 带权重:预测值为加权后的标签均值。
  3. 距离定义

    • 欧氏距离:常用于 KNN 算法,使用时需对特征向量各分量归一化。
    • 其他距离:如 Mahalanobis 距离、Bhattacharyya 距离等。

三、数据处理

步骤描述
数据准备可从 Wine 数据集官网或华为云 OBS 下载 wine.data 文件。
数据读取与处理导入所需模块,配置运行信息,读取并处理 Wine 数据集,将数据分为自变量 X 和因变量 Y,对样本的某些属性进行二维可视化,观察样本分布和可分性,划分训练集和验证集。

四、数据集的作用

作用说明
提供数据基础Wine 数据集包含不同种类葡萄酒的各种特征值,为算法提供分析和学习素材。
验证算法效果通过对已知类别的样本学习和预测,评估 K 近邻算法在该数据集上的准确性和有效性。
探索特征关系帮助了解不同葡萄酒特征之间的内在联系,及特征如何影响分类结果。

以下是读取和处理数据集的代码示例:

import os
import csv
import numpy as np

# 读取数据集
with open('wine.data') as csv_file:
    data = list(csv.reader(csv_file, delimiter=','))

# 提取自变量和因变量
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)

五、模型构建与预测

  1. 计算距离
    • 构建 KnnNet 类,利用 MindSpore 算子计算输入样本与训练样本的距离,并获取 top k 近邻。
class KnnNet(nn.Cell):
    def __init__(self, k):
        super(KnnNet, self).__init__()
        self.k = k

    def construct(self, 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)
        values, indices = ops.topk(-dist, self.k)
        return indices
  1. 预测函数
    • 定义 knn 函数,根据近邻样本类别进行预测。
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
  1. 模型预测
    • 在验证集上进行预测,k 取 5,验证精度约 80%,表明 KNN 算法在该三分类任务上有效。

六、可用于 K 近邻算法聚类实验的其他数据集

数据集描述
Iris 数据集包含鸢尾花的花瓣长度、宽度等特征,用于花卉种类的分类。
MNIST 数据集手写数字图像数据集,可用于数字分类任务。
20 Newsgroups 数据集文本分类数据集,可通过提取文本特征进行分类。

七、KNN 算法中距离度量的作用

距离度量在 KNN 算法中起着至关重要的作用:

  1. 确定样本相似性:通过计算距离来衡量两个样本之间的相似程度。距离越小,表明样本越相似;距离越大,相似性越低。
  2. 选择近邻样本:KNN 算法的核心是找到距离待测样本最近的 k 个样本。距离度量的准确性直接影响到近邻样本的选择。
  3. 影响分类结果:不同的距离度量方式可能会导致选择不同的近邻样本,从而影响最终的分类决策。

例如,在欧式距离中,它对各维度上的差异同等对待。而在曼哈顿距离中,更侧重于考虑坐标差值的绝对值之和。

八、实验小结

本实验运用 MindSpore 实现 KNN 算法,对 wine 数据集的三类样本进行分类,验证了算法能依据酒的 13 种属性判别酒的品种。

通过本次实验,对 KNN 算法的原理和实践有了更深入的理解,为进一步应用和优化算法奠定了基础。未来可探索更多复杂数据集和改进算法,提升分类效果和泛化能力。

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值