【机器学习笔记】k近邻

K近邻算法(K-Nearest Neighbors,简称KNN)是一种基本的监督学习算法,用于分类和回归问题。它的工作原理很简单,基于实例之间的距离度量,将新样本的类别标签预测为其K个最近邻居中最常见的类别。

如果K = 3,少数从属于多数,基于统计的方法,判定?的这个待分类点属于-的三角形一类。

如果K = 5,还是少数从属于多数,基于统计的方法,判定?的这个待分类点属于+的正方形一类。

K 值的选择,距离度量和分类决策规则是该算法的三个基本要素。K值的选择一般低于样本数据的平方根,一般是不大于20的整数。距离度量常用的有欧式距离,曼哈顿距离,余弦距离等,一般使用欧氏距离,对于文本分类,常用余弦距离。分类决策就是“少数服从多数”的策略。
 

KNN算法的基本步骤如下:

1. 准备训练数据:收集带有类别标签的训练样本,其中每个样本包含多个特征。

2. 选择K值:确定用于预测的最近邻居的数量K。

3. 计算距离:对于要预测的新样本,计算其与训练集中每个样本之间的距离。常用的距离度量包括欧氏距离、曼哈顿距离、余弦相似度等。

4. 选择最近邻:从训练集中选择K个与新样本最近的样本作为最近邻。

5. 预测分类:根据K个最近邻的类别标签,确定新样本的类别。在分类问题中,可以采用多数表决的方式,即选择K个最近邻中最常见的类别作为预测结果。在回归问题中,可以采用平均值的方式,即选择K个最近邻的平均值作为预测结果。

 

以下是使用MATLAB实现K近邻算法的简单示例:

假设我们有一个包含两个特征(x1和x2)和对应类别标签(y)的训练数据集,我们想要使用K近邻算法对新样本进行分类。

% 训练数据
X_train = [1 1; 1 2; 2 2; 4 4; 5 5; 4 5]; % 特征矩阵
y_train = [1; 1; 1; 2; 2; 2]; % 类别标签

% 新样本
X_test = [3 3]; % 特征矩阵

% K近邻算法
K = 3; % 设置K值

% 计算距离
distances = sqrt(sum((X_train - X_test).^2, 2));

% 选择K个最近邻的索引
[~, indices] = mink(distances, K);

% 统计K个最近邻的类别标签
nearest_labels = y_train(indices);

% 多数表决,确定预测结果
prediction = mode(nearest_labels);

 

在上述示例,我们定义了训练数据集 `X_train` 和对应的类别标签 `y_train`。然后,我们定义了要预测的新样本 `X_test`。接下来,我们通过计算新样本与训练数据集中每个样本之间的距离,选择最近的K个样本。然后,我们统计这K个样本的类别标签,并使用多数表决的方式确定预测结果。

上述示例仅是K近邻算法的基本实现,实际应用中可能需要进行更多的数据预处理、参数调优和模型评估。此外,MATLAB还提供了更多强大的机器学习工具箱和函数,可以更方便地实现K近邻算法和其他机器学习算法。

KNN算法的优点包括简单易理解、无需训练过程、适用于多分类和回归问题。然而,它也有一些缺点,如计算复杂度高、对于高维数据和样本不平衡的情况效果可能较差。

在应用KNN算法时,需要注意选择合适的K值、合适的距离度量和适当的数据预处理(如归一化)。此外,KNN算法对于数据集的分布和特征之间的关系敏感,因此在使用之前应对数据进行探索性分析和特征工程。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值