gpt4 book ai didi

matlab - 最近均值分类器的距离计算器

转载 作者:行者123 更新时间:2023-11-30 09:04:48 24 4
gpt4 key购买 nike

问候,

如何计算使用最近均值分类器对 IRIS 数据集进行分类需要执行多少次距离计算。

我知道 IRIS 数据集有 4 个特征,每条记录都根据 3 个不同的标签进行分类。

根据一些教科书,可以进行如下计算:

enter image description here

但是,我对这些不同的符号以及这个方程的含义感到困惑。例如,等式中的 s^2 是多少?

最佳答案

该表示法是大多数机器学习教科书的标准表示法。在这种情况下,s 是训练集的样本标准差。假设每个类别具有相同的标准差是很常见的,这就是为什么每个类别都被分配相同的值的原因。

但是你不应该关注这一点。最重要的一点是先验是否相等。这是一个公平的假设,意味着您期望数据集中每个类的分布大致相等。通过这样做,分类器简单地归结为找到从训练样本 x 到由其平均向量表示的每个其他类的最小距离。

如何计算这个非常简单。在您的训练集中,您有一组训练示例,每个示例都属于一个特定的类。对于 iris 数据集,您有三个类。您找到每个类的平均特征向量,它们将分别存储为 m1、m2m3。之后,要对新的特征向量进行分类,只需找到该向量到每个均值向量的最小距离即可。距离最小的一类就是您要分配的类别。

既然您选择了 MATLAB 作为语言,请允许我用实际的 iris 数据集进行演示。

load fisheriris; % Load iris dataset
[~,~,id] = unique(species); % Assign for each example a unique ID
means = zeros(3, 4); % Store the mean vectors for each class
for i = 1 : 3 % Find the mean vectors per class
means(i,:) = mean(meas(id == i, :), 1); % Find the mean vector for class 1
end

x = meas(10, :); % Choose a random row from the dataset

% Determine which class has the smallest distance and thus figure out the class
[~,c] = min(sum(bsxfun(@minus, x, means).^2, 2));

代码相当简单。加载数据集,由于标签位于元胞数组中,因此可以方便地创建一组新的标签(枚举为 1、2 和 3),以便轻松隔离每个类的训练示例并计算它们的平均向量。这就是 for 循环中发生的事情。完成后,我从训练集中选择一个随机数据点,然后计算从该点到每个平均向量的距离。我们选择距离最小的类别。

如果您想对整个数据集执行此操作,则可以,但这需要对维度进行一些排列才能实现。

data = permute(meas, [1 3 2]);
means_p = permute(means, [3 1 2]);
P = sum(bsxfun(@minus, data, means_p).^2, 3);
[~,c] = min(P, [], 2);

datameans_p 是以具有单一维度的 3D 矩阵的方式转换后的特征和均值向量。第三行代码计算矢量化的距离,以便最终生成一个二维矩阵,其中每行 i 计算从训练示例 i 到每个均值向量的距离。我们最终找到每个示例距离最小的类。

为了了解准确性,我们可以简单地计算正确分类的总次数的分数:

>> sum(c == id) / numel(id)

ans =

0.9267

使用这个简单的最近均值分类器,我们的准确率达到 92.67%...不错,但您可以做得更好。最后,要回答您的问题,您需要进行 K * d 距离计算,其中 K 是示例数量,d 是示例数量类。通过上面的逻辑和代码,你可以清楚地看到这是必需的。

关于matlab - 最近均值分类器的距离计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55310891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com