KNN算法介绍及代码实现matlab
时间: 2023-07-26 11:15:57 浏览: 112
KNN算法是一种基于实例的学习算法,它的基本思想是将样本集中与待分类样本最近的K个样本作为参考,根据这K个样本的类别来判断待分类样本的类别。KNN算法的优点是简单易懂,不需要建立模型,分类效果较好,但是由于其计算量较大,对于大规模数据集不太适用。
以下是KNN算法的matlab代码实现:
1. 加载数据集
假设我们有一个数据集,其中包含3个样本,每个样本有2个特征。我们可以将数据集表示为一个3行2列的矩阵。
```matlab
data = [1 2; 2 1; 3 4];
```
2. 定义待分类样本
我们定义一个待分类样本,它有2个特征。
```matlab
testData = [2 3];
```
3. 计算距离
我们使用欧氏距离来计算每个样本与待分类样本之间的距离,距离计算公式为:
$$d(x,y)=\sqrt{\sum_{i=1}^{n}(x_i-y_i)^2}$$
```matlab
dist = sqrt(sum((data - repmat(testData,size(data,1),1)).^2,2));
```
其中,`repmat(testData,size(data,1),1)`表示将待分类样本重复3次,然后与数据集相减,再对每个样本进行求和,最后取平方根,即可得到每个样本与待分类样本之间的距离。
4. 选择K个最近的样本
我们选择距离最小的K个样本作为参考,这里我们选择K=2。
```matlab
k = 2;
[~, idx] = sort(dist);
kIdx = idx(1:k);
```
其中,`[~, idx] = sort(dist)`表示将距离从小到大排序,`kIdx = idx(1:k)`表示选择前K个最近的样本。
5. 统计K个最近样本的类别
我们统计K个最近样本的类别,并选择出现次数最多的类别作为待分类样本的类别。
```matlab
labels = [1 1 2];
testLabel = mode(labels(kIdx));
```
其中,`labels`表示每个样本的类别,这里我们假设有2个类别,分别为1和2,`mode`函数表示选择出现次数最多的元素。
完整代码如下:
```matlab
data = [1 2; 2 1; 3 4];
testData = [2 3];
dist = sqrt(sum((data - repmat(testData,size(data,1),1)).^2,2));
k = 2;
[~, idx] = sort(dist);
kIdx = idx(1:k);
labels = [1 1 2];
testLabel = mode(labels(kIdx));
```
以上就是KNN算法的matlab代码实现。
阅读全文