knn近邻算法matlab代码
时间: 2023-09-24 22:10:39 浏览: 337
基于MATLAB的KNN算法实现多分类.rar
5星 · 资源好评率100%
KNN(K-Nearest Neighbors)近邻算法的MATLAB代码可以按照以下步骤实现:
1. 定义一个距离矩阵,初始化为全零矩阵。
2. 定义训练数据集和测试数据集的长度。
3. 对每个测试样本,计算与训练样本的距离,并存储在距离矩阵中。
4. 使用选择排序的方法,对距离矩阵进行排序,找出最小的前K个距离对应的训练样本。
5. 统计这K个样本中最常出现的类别,作为测试样本的预测类别。
6. 返回测试样本的预测类别。
具体的MATLAB代码如下:
```matlab
function predicted_labels = knn(train_data, train_labels, test_data, K)
train_length = size(train_data, 1);
test_length = size(test_data, 1);
distance = zeros(train_length, 1);
predicted_labels = zeros(test_length, 1);
for i = 1:test_length
for j = 1:train_length
distance(j) = calculate_distance(test_data(i,:), train_data(j,:));
end
% 使用选择排序的方法对距离矩阵进行排序,并得到最小的前K个距离对应的标签
for g = 1:K
ma = distance(g);
tmp = 1;
label_ma = 0;
for j = g+1:train_length
if distance(j) < ma
ma = distance(j);
label_ma = train_labels(j);
tmp = j;
end
end
distance(tmp) = distance(g);
distance(g) = ma;
train_labels(tmp) = train_labels(g);
train_labels(g) = label_ma;
end
% 统计最小的前K个样本中最常出现的类别,作为测试样本的预测类别
unique_labels = unique(train_labels(1:K));
counts = histc(train_labels(1:K), unique_labels);
[~, max_idx = max(counts);
predicted_labels(i) = unique_labels(max_idx);
end
end
function distance = calculate_distance(x1, x2)
% 计算两个样本之间的距离(这里可以根据具体问题选择不同的距离度量方法)
distance = sqrt(sum((x1 - x2).^2));
end
```
这是一个基本的KNN近邻算法的MATLAB实现,你可以将训练数据集、训练标签、测试数据集和K值作为输入,然后得到测试样本的预测类别。
阅读全文