机器学习K-近邻算法

机器学习K-近邻算法(KNN)

概念

如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

来源:KNN算法最早是由Cover和Hart提出的一种分类算法

距离公式

两个样本的距离可以通过如下公式计算,又叫欧式距离
在这里插入图片描述
在这里插入图片描述

距离公式的基本性质

在机器学习过程中,对于函数 dist(., .)dist(.,.),若它是一"距离度量" (distance measure),则需满足一些基本性质:

  • 非负性:dist(X_i,X_j) >= 0dist(X​i​​ ,X​j​​ )>=0 ;

  • 同一性:dist(x_i,x_j)=0dist(x​i​​ ,x​j​​ )=0。当且仅当 X_i = X_j X​i​​ =X​j​​ ;

  • 对称性:dist(x_i,x_j)=dist(x_j,x_i)dist(x​i​​ ,x​j​​ )=dist(x​j​​ ,x​i​​ );

  • 直递性: dist(x_i,x_j) <= dist(x_i,x_k) +dist(x_k,x_j)dist(x​i​​ ,x​j​​ )<=dist(x​i​​ ,x​k​​ )+dist(x​k​​ ,x​j​​ )

KNN算法流程

  1. 计算已知类别数据集中的点与当前点之间的距离
  2. 按距离递增次序排序
  3. 选取与当前点距离最小的k个点
  4. 统计前k个点所在的类别出现的频率
  5. 返回前k个点出现频率最高的类别作为当前点的预测分类

计算电影类型

别计算每个电影和被预测电影的距离(搞笑镜头、拥抱镜头、打斗镜头相减后的欧式距离)
在这里插入图片描述
k=5,取距离最近的5部中出现频率最高的类别,即为被预测电影类别。

sklearn实现


from sklearn.neighbors import KNeighborsClassifier

# 1.构造数据
x = [[1], [2], [3], [4]]
y = [0, 0, 1, 1]

# 2.训练模型
# 2.1 实例化一个估计器对象
estimator = KNeighborsClassifier(n_neighbors=3)

# 2.2 调用fit方法,进行训练
estimator.fit(x, y)

# 3.数据预测
ret = estimator.predict([[2.51]])
print(ret)
# 可以这样理解, x是特征值, 是dataframe形式理解为二维的[[]],
# y表示的目标值, 可以表示为series, 表示为一维数组[]
ret1 = estimator.predict([[2.52]])
print(ret1)

K值选择

K-近邻算法中K 的选取一般称为“超参数”的确定,一般都是通过实验值或者经验确定。

K值选择

李航博士的一书「统计学习方法」上所说:

  • 选择较小的K值,就相当于用较小的领域中的训练实例进行预测,
    • “学习”近似误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带来的问题是“学习”的估计误差会增大,
    • K值的减小就意味着整体模型变得复杂,容易发生过拟合
  • 选择较大的K值,就相当于用较大领域中的训练实例进行预测,
    • 优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。
    • 与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误。
      且K值的增大就意味着整体的模型变得简单。
  • K=N(N为训练样本个数),则完全不足取。因为此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的类,模型过于简单,忽略了训练实例中大量有用信息。

在实际应用中,K值一般取一个比较小的数值,例如采用交叉验证法(简单来说,就是把训练数据在分成两组:训练集验证集)来选择最优的K值。

误差说明

  • 近似误差:
  1. 对现有训练集的训练误差,关注训练集
  2. 如果近似误差过小可能会出现过拟合的现象,对现有的训练集能有很好的预测,但是对未知的测试样本将会出现较大偏差的预测。
  3. 模型本身不是最接近最佳模型
  • 估计误差:
  1. 可以理解为对测试集的测试误差,关注测试集
  2. 估计误差小说明对未知数据的预测能力好,
  3. 模型本身最接近最佳模型。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值