python实现k近邻算法

很简单的一个分类算法:

根据不同特征值之间的距离方法进行分类

优点:输入高,对异常值不敏感,无数据输入假定

缺点:计算复杂度高,空间复杂度高

适用数据范围:数值型 和 标称型

代码实现:

"""K近邻算法"""
"""伪代码:
(1)计算已知数据集的点与当前点之间的欧式距离
(2)按照距离递增顺序进行排序
(3)选取与当前距离最小的K个点
(4)确定前K个点所属类别的出现频率
(5)返回前k个点出现频率最高的类别作为当前点的预测分类
"""
import numpy as np
import operator
"""创建数据集"""
def creatDataset():
    group = np.array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    label = ['A','A','B','B']
    return group,label
def classfy0(inX,dataset,labels,k):
    """
    input:
    inX——当前点
    dataset——数据集
    label——标签
    k——前K个点
    """
    diffMat = np.tile(inX,(len(dataset),1)) - dataset
    sqDiffMat = diffMat ** 2
    sumSqDiffMat = sqDiffMat.sum(axis=1)
    distance = sumSqDiffMat ** 0.5  #数据集的点与当前点之间的欧式距离
    sortDistance = distance.argsort()#按照距离递增顺序进行从小到大排序(输出为排序的索引)
    classcount = {}
    for i in range(k):
        votellabel = labels[sortDistance[i]]
        classcount[votellabel] = classcount.get(votellabel,0) + 1
    sortclasscount = sorted(classcount.items(),key=operator.itemgetter(1),reverse=True)
    return sortclasscount[0][0]

if __name__ == '__main__':
    dataset,labels = creatDataset()
    res = classfy0([0,0],dataset,labels,3)
    print(res)

输出结果:B

Process finished with exit code 0

猜你喜欢

转载自blog.csdn.net/qq_41853536/article/details/82961924