机器学习之KNN

KNN主要应用于文本分类、聚类分析、预测分析、降维等
中心思想是采用测量不同特征值之间的距离方法进行分类
算法非常简单,不过这是一个监督算法,训练数据需要经过人工标记。算法中心思想是:计算候选样本到所有训练样本之间的距离,选取k个最近距离数据中出现次数最多的分类作为新样本的类别。

from numpy import *
import operator
def classify0(sample,dataSet,labels,k):
    samplearray=tile(sample,(dataSet.shape[0],1))
    distance=sum((samplearray-dataSet)**2,1)
    s=np.argsort(distance)
    counter={}
    for i in arange(k):
        key=labels[s[i]]
        if key in counter:
            counter[key]=counter[key]+1
        else:
            counter[key]=1
    c=sorted(counter.items(),key=operator.itemgetter(1),reverse=True)
    return c[0][0];

归一化

计算距离时,不同的特征的数据范围不一样。例如:样本特征包括身高、体重、飞行里程。其中飞行里程的数值相对身高和体重范围很大。计算样本之间距离时,飞行里程的差值会起到决定性作用,而一般认为所有的特征应该是同样重要,需要将数值归一化到0到1之间:

Vn=VoVmaxVmin

def autoNorm(dataSet):
    datarange=dataSet.max(axis=0)-dataSet.min(axis=0)
    dataSet=dataSet/tile(datarange,(dataSet.shape[0],1))
    return dataSet

优化

KNN算法简单有效,但存在缺点:

  1. 计算量大,每次需要计算待分类样本和全体已知样本的距离,才能求取K个最近领域点,计算量大。因此,一般需要对已知样本点进行剪辑(只对容量大的情况,且去除分类作用不大的样本)。另外也有使用K决策树,减少计算量和存储空间。
  2. 训练样本集中某些类的样本数量大,其他类的数量小。因此,需要采用加权方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值