【学习笔记】K近邻归类算法
admin
2023-08-03 06:00:12
0
# -*- coding:utf-8 -*-
__author__ = 'Ghostviper'
"""
K近邻归类算法
"""
from numpy import *
import operator
def createDataset():
    group = array([
        [1.0, 1.1],
        [1.0, 1.0],
        [0, 0],
        [0, 0.1]
    ])
    labels = ['A', 'A', 'B', 'B']
    return group, labels
def classify0(inX, dataSet, labels, k):
    # shape获得数据集中数组的大小
    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.iteritems(), key=operator.itemgetter(1), reverse=True)
    return sortedClassCount[0][0]
if __name__ == "__main__":
    group, labels = createDataset()
    print classify0([1, 1], group, labels, 3)

注:计算两个向量点xA和xB之间的距离利用欧式距离公式:

【学习笔记】K近邻归类算法

算法步骤:

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

  2. 按照距离递增排序

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

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

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

算法适用范围:数值型和标称型

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

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

相关内容

热门资讯

加拿大多伦多音乐节发生枪击事件... 当地时间7月11日,加拿大多伦多警方称,该市一音乐节发生大规模枪击事件,造成2人死亡,6人受伤,嫌犯...
南非国脚亚当斯世界杯赛回国后去... 【环球网报道 记者 索炎琦】据英国广播公司(BBC)等媒体报道,对于南非国脚杰登·亚当斯在参加202...
芬兰:解除核禁令不代表已决定部... 据凤凰卫视报道,芬兰议会于6月中通过核能法修正案,并在7月1日正式生效,取消了过去数十年禁止核武入境...
建设银行获得发明专利授权:“一... 证券之星消息,根据天眼查APP数据显示建设银行(601939)新获得一项发明专利授权,专利名为“一种...
原创 中... 文/王新喜 7月10号,商务部官网挂出一条一百多字的公告,字不多,劲儿够大:对氦气实施临时禁止出口管...
沃东天骏申请系统监控方法及装置... 国家知识产权局信息显示,北京沃东天骏信息技术有限公司申请一项名为“系统监控方法及装置、计算机程序产品...
火锅店老板回收“口水油”给客人... 近日,四川省成都高新技术产业开发区人民法院审结一起生产、销售有毒、有害食品罪刑事附带民事公益诉讼案。...
加快推进人工智能在人社领域应用... 本报北京7月10日电(记者李婕)人工智能正全方位赋能千行百业,其在人社领域如何发挥作用?近日,人力资...
长征十号乙火箭从天而降:实现海... 【本文仅在今日头条发布,请勿转载】 在7月10日,我国的航天事业进入了一个新时代!长征十号乙火箭成功...
经纬度:“百团百项”工程,何以... 来源:澎湃新闻 7月6日,一场围绕科学智能前沿趋势、科研范式变革等话题的科学智能“百团百项”研讨会在...