《统计学习方法》李航_学习笔记_第3章_k近邻法

k近邻法

《统计学习方法》李航 第3章 k近邻法
《机器学习》周志华 第10章 降维与度量学习

k近邻法(k-nearest neighbor,k-NN)是一种基本分类与回归方法
输入:实例的特征向量
输出:实例的类别
k近邻法假设给定一个训练数据集,其中的实例类别已定,分类时,对新的实例,根据其k个最近邻的训练实例的类别,通过多数表决等方式进行预测。
即:给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该输入实例分类到这个类中
实质:利用训练数据集对特征向量空间进行划分,并作为其分类的模型
懒惰学习(lazy learning):没有显示的训练过程,训练时间开销为零,待收到测试样本后再进行处理

k近邻法三要素:
k值的选择、距离度量、分类决策规则

  • 3.1 k近邻算法

  • 3.2 k近邻模型
    1.距离度量:一般使用欧氏距离,不同的距离度量所确定的最近邻点不同
    2.k值的选择:
    k值小,近似误差会减小,只有与输入实例较近的训练实例才会对预测结果起作用
    缺点:“学习”的估计误差增大,预测结果会对近邻的实例点非常敏感,k值的减小意味着整体模型变得复杂,易发生过拟合。
    k值大,估计误差会减小
    缺点:“学习”的近似误差增大,k值增大意味着整体的模型变得简单
    k值一般取一个较小值,通常采用交叉验证法选取最优k值。
    3.分类决策规则:
    多数表决规则(等价于 经验风险最小化)

  • 3.3 k近邻法的实现:kd树
    1.构造kd树
    2.搜索kd树

MOOC 北京理工大学 Python机器学习应用

sklearn中的k近邻分类器
在sklearn库中,可以使用sklearn.neighbors.KNeighborsClassifier 创建一个k近邻分类器,主要参数有:

  1. n_neighbors:指定k的大小,默认为5
  2. weights:k个点对分类结果影响的权重
    (1)uniform:平均权重(默认)
    (2)distance:越近的点权重越大
    (3)传入自己编写的以距离为参数的权重计算函数
  3. algorithm:计算近邻点的方法
    (1)auto:根据训练数据自动选择(默认)
    (2)ball_tree
    (3)kd_tree
    (4)brute
  4. metric:距离度量
    (1)euclidean:欧式距离(默认)
    (2)manhattan:曼哈顿距离
    (3)chebyshev:切比雪夫距离

e.g.
创建一组数据X和它对应的标签y
X=[[0],[1],[2],[3]] y=[0,0,1,1]
使用import语句导入k近邻分类器
from sklearn.neighbors import KNeighborsClassifier

将创建好的实例赋给变量neigh
neigh=KNeighborClassifier(n_neighbors=3)
调用fit()函数,将训练数据X和标签y送入分类器进行学习
neigh.fit(X,y)
调用predict()函数,对未知分类样本[1.1]进行分类,可以直接将需要分类的数据构造为数组形式作为参数传入,得到的分类标签是返回值
print(neigh.predict([[1.1]]))

import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier

X=[[0],[1],[2],[3]]
y=[0,0,1,1]
neigh=KNeighborsClassifier(n_neighbors = 3)
neigh.fit(X, y)
print(neigh.predict([[1],[5]]))

输出为:
[0 1]

实际使用
(1)创建数据特征X和标签y,将数据划分为训练集和测试集
(2)使用fit()函数对训练集进行训练
(3)利用predict()函数获得测试集数据的分类结果

k的取值
若k值较小,可能导致过拟合
一般倾向选取较小的k值,使用交叉验证法选取最优k值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值