使用Matlab编写Knn算法
时间: 2024-02-06 21:12:05 浏览: 89
以下是使用Matlab编写KNN算法的示例代码:
假设我们有一个包含n个样本和m个特征的训练数据集X_train(n×m)和对应的标签y_train(n×1),以及一个测试数据集X_test(k×m)。
1. 计算测试样本与所有训练样本的距离
```matlab
dist = pdist2(X_test, X_train);
```
这里使用了Matlab自带的pdist2函数,它可以计算两组数据之间的距离。dist是一个k×n的矩阵,其中第i行第j列表示第i个测试样本与第j个训练样本的距离。
2. 对距离进行排序
```matlab
[~, idx] = sort(dist, 2);
```
sort函数可以对矩阵的每一行进行排序,idx是一个k×n的矩阵,其中第i行表示第i个测试样本距离最近的k个训练样本在X_train中的索引。
3. 统计最近的k个样本的标签
```matlab
k = 5; % 假设k=5
y_pred = mode(y_train(idx(:, 1:k)), 2);
```
mode函数可以统计矩阵每一行中出现次数最多的元素,y_pred是一个k×1的向量,其中第i个元素表示第i个测试样本的预测标签。
完整的KNN函数如下:
```matlab
function y_pred = knn(X_train, y_train, X_test, k)
% X_train: 训练数据集,n×m
% y_train: 训练标签,n×1
% X_test: 测试数据集,k×m
% k: 最近邻个数
% y_pred: 预测标签,k×1
dist = pdist2(X_test, X_train);
[~, idx] = sort(dist, 2);
y_pred = mode(y_train(idx(:, 1:k)), 2);
end
```
使用示例:
```matlab
X_train = [1, 2; 2, 3; 3, 1];
y_train = [1; 2; 2];
X_test = [1.5, 2.5; 3, 2];
y_pred = knn(X_train, y_train, X_test, 2);
disp(y_pred);
```
输出结果:
```
2
2
```
阅读全文