很简单的一个分类算法:
根据不同特征值之间的距离方法进行分类
优点:输入高,对异常值不敏感,无数据输入假定
缺点:计算复杂度高,空间复杂度高
适用数据范围:数值型 和 标称型
代码实现:
"""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)) - datasetsqDiffMat = diffMat ** 2sumSqDiffMat = 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) + 1sortclasscount = 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)输出结果:BProcess finished with exit code 0
更多推荐
近邻,算法,python
发布评论