用matlab编写互近邻的相对距离进行样本分类
时间: 2024-02-25 17:54:26 浏览: 27
互近邻算法(K-Nearest Neighbor, KNN)是一种常见的分类算法,它的基本思想是给定一个未知样本,找出训练集中距离该样本最近的 K 个样本,然后将这 K 个样本中出现最多的类别作为该未知样本的类别。
在 Matlab 中,可以使用 pdist2() 函数来计算样本之间的距离,然后使用 knnsearch() 函数来寻找距离最近的 K 个样本。以下是一个示例代码:
```matlab
% 定义训练数据集和测试数据集
trainData = [1, 1; 1, 2; 2, 2; 2, 3; 3, 3; 4, 4; 5, 4; 5, 5];
testData = [2, 1; 3, 2; 4, 3];
% 定义 K 的值
K = 3;
% 计算训练数据集和测试数据集之间的距离
distances = pdist2(trainData, testData);
% 寻找距离最近的 K 个样本
[~, idx] = sort(distances);
nearestNeighbors = idx(1:K, :);
% 统计 K 个样本中出现最多的类别
labels = [1, 1, 1, 1, 2, 2, 2, 2];
nearestLabels = labels(nearestNeighbors);
result = mode(nearestLabels);
disp(result);
```
在上面的示例代码中,我们首先定义了训练数据集和测试数据集,然后定义了 K 的值。接着,我们使用 pdist2() 函数计算训练数据集和测试数据集之间的距离,并使用 knnsearch() 函数找出距离最近的 K 个样本。最后,我们统计 K 个样本中出现最多的类别,并输出结果。
需要注意的是,knnsearch() 函数返回的是距离最近的 K 个样本的索引,而不是距离值。因此,在上面的示例代码中,我们使用 [~, idx] = sort(distances) 将距离按照从小到大的顺序排列,并使用 idx(1:K, :) 取出前 K 个样本的索引。