[机器学习] K近邻算法

K近邻算法 (KNN)

KNN 的原理

存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签, 即我们知道样本集中每一数据与所属分类的对应关系。 输入没有标签的新数据之后 (测试集), 将新数据的每个特征与样本集中数据对应的特征进行比较, 然后算法提取样本集中特征最相近(最近邻)的分类标签。 一般来说, 我们只选择样本数据集中前k个最相近的数据, 这就是k-近邻算法中k的出处, 通常k是不大于20的整数。最后选择k个最相似数据中出现次数最多的分类, 作为新数据的分类。

KNN工作步骤

  1. 假设有一个带有标签的样本数据集(训练样本集),其中包含每条数据与所属分类的对应关系。
  2. 输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较。
    1. 计算新数据与样本数据集中每条数据的距离。
    2. 对求得的所有距离进行排序(从小到大,越小表示越相似)。
    3. 取前 k (k 一般小于等于 20 )个样本数据对应的分类标签。
  3. 求 k 个数据中出现次数最多的分类标签作为新数据的分类。

KNN开发流程

  • 收集数据:任何方法
  • 准备数据:距离计算所需要的数值,最好是结构化的数据格式
  • 分析数据:任何方法
  • 训练算法:此步骤不适用于 k-近邻算法
  • 测试算法:计算错误率
  • 使用算法:输入样本数据和结构化的输出结果,然后运行 k-近邻算法判断输入数据分类属于哪个分类,最后对计算出的分类执行后续处理

KNN算法特点

  • 优点:精度高、对异常值不敏感、无数据输入假定
  • 缺点:计算复杂度高、空间复杂度高
  • 适用数据范围:数值型和标称型

近似误差,估计误差

近似误差:可以理解为对现有训练集的训练误差。
最小化近似误差,即为使估计值尽量接近真实值,但是这个接近只是对训练样本(当前问题)而言,模型本身并不是最接近真实分布。换一组样本,可能就不近似了。这种只管眼前不顾未来预测的行为,即为过拟合。

估计误差:可以理解为对测试集的测试误差。
最小化估计误差,即为使估计系数尽量接近真实系数,但是此时对训练样本(当前问题)得到的估计值不一定是最接近真实值的估计值;但是对模型本身来说,它能适应更多的问题(测试样本)

小结

K值小的时候,近似误差小,估计误差大。只有与输入实例较近的(相似的)训练实例才会对预测结果起作用,预测结果会对近邻的实例点非常敏感。如果邻近的实例点恰巧是噪声,预测就会出错。k 值的减小就意味着整体模型变得复杂,容易发生过拟合。

K值大的时候,近似误差大,估计误差小。就相当于用较大的邻域中的训练实例进行预测。其优点是可以减少学习的估计误差。但缺点是学习的近似误差会增大。这时与输入实例较远的(不相似的)训练实例也会对预测起作用,使预测发生错误。 k 值的增大就意味着整体的模型变得简单。

KNN项目实例

参考

机器学习实战

猜你喜欢

转载自blog.csdn.net/siyue0211/article/details/80345890