KNN(K近邻算法)

算法概述:

       简单来说,KNN通过测量不同特征值之间的距离进行分类。KNN不需要训练模型,其输入是带标签的特征数据集,每一个数据是由其不同的属性构成的向量。对于未知标签的待分类数据,将其特征与训练数据集中的每一个数据进行相似性度量,然后获得最相近的K个特征数据的标签,其中出现最多的标签作为待分类数据的可能标签。


算法思路:

1)计算已知类别数据集中的点与当前点之间的距离;

2)按照距离递增次序排序;

3)选取与当前点距离最小的k个点;

4)确定前k个点所在类别的出现频率;

5)返回前k个点出现频率最高的类型作为当前点的预测分类;


算法程序:

def classify(inX, dataSet, labels, k):##inX:待分类数据,dataSet:训练数据, labels:训练数据标签, k:最近邻数据个数
    dataSetSize = dataSet.shape[0]
    diffMat = tile(inX, (dataSetSize, 1)) - dataSet;
    sqDiffMat = diffMat**2;
    sqDistances = sqDiffMat.sum(axis=1)
    distances = sqDistances**0.5;
    sortedDistIndicies = distances.argsort()
    classCount = {}
    for i in range(k):
        voteIlabel = labels[sortedDistIndicies[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
    sortedClassCount = sorted(classCount.items(), 
                              key = operator.itemgetter(1), reverse = True)
    return sortedClassCount[0][0]
算法存在的问题:

1)无法scale到大数据集上,时间和空间要求都很高;

2)不能知道数据存在的特征,仅仅是利用数据之间的相似性来进行分类度量的;



(以上均为MLinA的整理)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值