博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
K近邻分类算法
阅读量:5067 次
发布时间:2019-06-12

本文共 1417 字,大约阅读时间需要 4 分钟。

1、算法思路

  通过计算每个训练样例到待分类样品的距离,取和待分类样品距离最近的K个训练样例,K个样品中哪个类别的训练样品占比较多,则该分类样品就属于哪个类别。

2、算法步骤:

(1)初始化距离为最大值

(2)计算未知样本和每个训练样本的距离dist

(3)得到目前K各最临近样本中的最大距离maxdist

(4)如果dist小于maxdist,则将该样本作为K—最近邻样本

(5)重复步骤2/3/4,直到位置样本和所有训练样本的距离

(6)统计K—最近邻样本中每个类标号出现的次数

(7)选择出现频率最大的类标号作为未知样本的类标号

3、算法优缺点

优点:简单、易于理解和实现,无需估计参数,无需训练,是和赝本容量比较大的分类问题,特别适合多分类问题

缺点:懒惰算法,对测试样本分类时的计算量大,内存开销大,评分慢,可解释性较差,无法给出决策树那样的规则,对于样本量较小的分类问题,或产生误分

4、常见问题

(1)K设置多大合适:

K太小,分类结果容易受到噪声点影响,K太大,近邻中可能包含太多其他类别的点(对距离加权,可以降低K值设定的影响)

K值通常采用交叉检验来确定(以K=1为基准)  经验规则,K一般低于训练样本数的平方根

(2)类别如何判定合适

股票法没有考虑近邻的距离远近,距离更近的近邻也许更应该决定最终的分类,所以加权投票法更加恰当。

(3)如何选择合适的距离衡量

高维度对距离衡量的影响:众所周知变量数越多,欧式距离的区分能力越差;

变量值域对距离的影响:值越大的变量常常在距离的计算值占据主导作用,因此应先对变量进行标准化

(4)训练样本是否要一视同仁

在训练集中,有些样本可能是更值得依赖的,可以给不同的样本施加不同的权重,加强依赖样本的权重,降低不可信赖样本的影响

(5)性能问题

KNN是一种懒惰算法,平时不训练,直到实际分类时才临时去找K个近邻

懒惰的后果,构造模型简单,但是在对测试样本分类时系统开销大,因为要扫描全部的训练样本并计算距离

已经有的方法提高计算的效率:压缩训练样本量等

(6)能发大幅度减少训练样本量有保持分类精度

浓缩技术

编辑技术

(7)python实现电影分类

 

import numpy as np from sklearn import neighbors knn = neighbors.KNeighborsClassifier() #取得knn分类器 data = np.array([[3,104],[2,100],[1,81],[101,10],[99,5],[98,2]]) # data对应着打斗次数和接吻次数 labels = np.array([1,1,1,2,2,2]) #labels则是对应Romance和Action knn.fit(data,labels) #导入数据进行训练''' #Out:KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',         metric_params=None, n_jobs=1, n_neighbors=5, p=2,         weights='uniform') knn.predict([18,90])

 

转载于:https://www.cnblogs.com/RR-99/p/10451289.html

你可能感兴趣的文章
模运算
查看>>
Android-Activity启动流程
查看>>
[.net]webform 版本冲突
查看>>
Cookie
查看>>
[JDK]找不到或无法加载主类 java
查看>>
(寒假CF)Choosing Symbol Pairs
查看>>
Android studio启动后卡在refreshing gradle project
查看>>
[转]Android中dp,px,sp概念梳理以及如何做到屏幕适配
查看>>
android MotionEvent中getX()和getRawX()的区别
查看>>
生活小窍门
查看>>
SpringMVC请求处理流程
查看>>
timestamp与timedelta,管理信息系统概念与基础
查看>>
第三次个人作业—“K米”评测
查看>>
“毕设导师互选系统”项目产品宣传推广方案
查看>>
处理JS中数据失真问题-随笔
查看>>
python:how does subclass call baseclass's __init__()
查看>>
【转】时间序列分析——基于R,王燕
查看>>
暑假集训考试反思+其它乱写
查看>>
XAML实例教程系列 - 命名空间(NameSpace) 三
查看>>
Bootstrap学习之二:栅格化布局
查看>>