机器学习系列07:一个懒惰的学习算法——kNN

kNN 是 k-Nearest Neighor(k近邻)算法简称,它和我们已经见到的逻辑回归、SVM 和决策树算法不同。kNN 是一种懒惰学习器(lazy learner),之所以说它“懒惰”不是因为它本身很简单,而是因为它不从训练数据集中学得任何判别数据模型的函数,它仅仅将记住了训练数据集中的数据。

参数化模型 VS 非参数化模型

机器学习算法可以分为参数化模型(parametric model)和非参数化模型(non-parametric model)。

使用参数化模型,我们从训练数据集中估计参数,以学习一个可以对新数据点进行分类的函数,而无需再使用原始训练数据集。典型的参数化模型有感知机、逻辑回归和线性 SVM。

相比之下,非参数化模型不能用一组固定的参数来表征,参数的数量会随着训练数据量的变化而变化。像我们之前已经学习过的决策树/随机森林和核 SVM 就属于非参数化模型。

kNN 属于非参数化模型的一个子类别,它是一种基于实例(instance based)的学习。基于实例学习的模型的特点是记忆训练数据集,而懒惰学习是基于实例的学习的一种特例,在学习过程中没有(零)成本。

kNN 算法

kNN 算法非常简单直接:

  1. 选择一个数字 k 和一个衡量样本距离的度量指标。

  2. 寻找到与我们要分类的样本的最近的 k 个邻居。

  3. 通过多数表决原则确定待分类样本的类别。

根据我们选择的样本间距度量指标,kNN 算法选择离新的样本最近的 k(下图 k = 5)个样本,然后在这 k 个样本中以多数表决的投票规则确定新样本的类别。

图片

基于记忆的算法的优缺点

这种基于记忆的方法的主要优点是,当我们收集新的训练数据时,分类器会立即适应。然而,不利的一面是,在最坏的情况下,对新样本进行分类的计算复杂性会随着训练数据集中的样本数量而线性增长,除非数据集的维度(特征)非常少,并且算法已使用高效的数据结构(比如 k-d 树,ball tree)实现,以便更有效地查询训练数据。

此外,除了查询数据的计算成本外,大型数据集也可能在存储容量有限方面存在问题。

然而,在许多情况下,当我们使用相对中小型的数据集时,基于内存的方法可以提供良好的预测和计算性能,因此是解决许多实际问题的不错选择。

kNN 算法实践

我们通过 scikit-learn 实现了一个 k = 5,且采用欧几里得距离来度量样本之间距离的 kNN 模型。

图片

从上图可以看到决策边界是比较平滑的。

scikit-learn 实现的 kNN 算法将优先选择与要分类的样本距离最近的邻居作为预测类别。如果邻居的距离相似,则算法将选择训练数据集中排在第一位的类标签。

k 值的选择

k 值对于在过拟合和欠拟合之间找到良好的平衡至关重要。我们还必须确保选择适合数据集的样本距离度量标准。

如果你的数据集中样本的属性值都是实数,比如前面分类的 Iris 数据集,那么我建议选择欧几里得距离作为样本直接的距离度量指标。

不过选择欧氏距离的话,一定要对特征做标准化!不然假设一个特征 A 取值范围在 [0,1] 另一个特征 B 取值范围在 [0, 100],要是不进行标准化,那么 A 在距离里的贡献完全会被 B 掩盖。

上面的 kNN 分类器中,我选择了 minkowski 度量指标:

图片

它是欧式距离和曼哈顿距离的折中,我通过 p=2 来指定使用欧式距离。如果 p=1,那么就是曼哈顿距离。

处理过拟合

最后,值得一提的是,由于维度诅咒(curse of dimensionality),KNN非常容易过拟合。维度诅咒指的是对于固定大小的训练数据集,随着维度的增加,特征空间变得越来越稀疏。我们可以认为,即使是最近的邻居,在高维空间中也太远了,无法给出一个很好的估计。

虽然可以用正则化来避免过拟合。然而,在正则化不适用的模型中,例如决策树和 KNN,我们可以使用特征选择和降维技术来帮助我们避免维数的诅咒。这将在接下来我们要学习的内容。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值