分类算法 -- KNN算法 (理论与python实现)

分类算法 – KNN算法

KNN(K-Nearest Neighbor)是一个分类算法,属于有监督学习。
KNN思想的核心在于:近朱者赤,近墨者黑,根据新样本的k个最近邻居来判定其类别。

1. 理论说明

1.1 算法概论

假设我们已知n个样本的特征和标签(即所属分类),并以此作为样本集A。

当输入一个没有标签的样本b时,我们可以通过比较新样本b与样本集A中的数据对应的特征,然后提取出最为相似的k个数据。

最后我们选取k个最相似的数据中出现次数最多的分类,作为新数据的分类。

1.2 算法步骤

Step 1:计算已知类别的样本集A中的所有样本与新样本b之间的距离
Step 2:按照距离的递增次序,对样本集A中的样本进行排序
Step 3:选取与当前样本b距离最近的k个样本
Step 4:确定这k个样本所在类别的出现频率
Step 5:返回这k个样本中出现频率最高的类别作为当前样本b的预测分类

1.3 算法优劣

优势:精度高、对异常值不敏感、算法思想简单、比较适合多分类问题
劣势:计算成本高,中间步骤的储存成本高,对大规模数据不是很友好

1.4 详细问题
①k的选择

和聚类分析中的K-means算法相同,k的选择也是KNN方法的难点所在。

若k很小,结果容易受到噪声和极端值的影响;若k很大,则在选取的近邻中又包含很多无关的点,增加计算量的同时也影响计算结果。
根据经验,我们一般会让k小于样本集A中样本数量的平方根

②距离的度量

在算法中,我们明确说明了要计算已知类别的样本集A中的所有样本与新样本b之间的距离。那我们需要选择哪种距离呢?

当样本特征的单位相同、方差差距不大时,此时选择欧式距离是合理的;
当样本特征的单位不同,并且方差差距较大时,选择欧式距离会更加关注方差大的特征而忽视方差较小的特征,所以此时选取马氏距离效果较好。


2.python实现

2.1 KNN函数(不调包)

此处,python实现KNN算法,不使用python包sklearn
使用的是欧式距离,并且各个样本权重均相同

import pandas as pd
import numpy as np
from collections import Counter

#导入数据
data = pd.read_excel('........xlsx')

train_X = data[
  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值