• 01 K近邻算法


    K近邻算法采用测量不同特征值之间的距离方法进行分类

    • 优点:精读高,对异常值不敏感,无数据输入假定
    • 缺点:计算算杂度高,空间复杂度高。适合数据范围:数值型和标称型

    K近邻算法是分类数据最简单最有效的算法。是基于实例的学习,使用算法时我们必须有接近实际数据的训练
    样本数据。K近邻算法必须保存全部数据集,如果训练数据集很大,必须使用大量的存储空间。
    由于必须对数据集中的每个数据计算距离值,实际使用时可能非常耗时。

    它无法给出任何数据的基础结构信息,因此,我们也无法知晓平均实例样本和典型实例样本具体有什么特征

    import numpy as np
    import operator
    
    
    def createDataSet():
        group = np.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: np.ndarray, labels: list, k: int) -> str:
        """
        k Nearest Neighbors -- 欧式距离
        :param inX: 输入向量
        :param dataSet: 输入的训练样本集
        :param labels: 标签向量
        :param k: 选择最近邻居的数目
        :return: 最受欢迎的标签
        """
        dataSetSize = dataSet.shape[0]
        # 距离计算
        # 行重复dataSetSize次,列1次
        diffMat = np.tile(inX, (dataSetSize, 1)) - dataSet
        # 平方和
        sqDiffMat = diffMat ** 2
        sqDistances = sqDiffMat.sum(axis=1)
        # 开方
        distances = sqDistances ** 0.5
        # 排序索引
        sortedDistIndicies = distances.argsort()
        classCount = {}
        # 选择距离最小的额k个点
        for i in range(k):
            voteIlabel = labels[sortedDistIndicies[i]]
            classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
        # 对第1维的元素进行降序排序
        sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
        return sortedClassCount[0][0]
    
    
    if __name__ == '__main__':
        group, labels = createDataSet()
        print(classify0([0, 0], group, labels, 3))
    
  • 相关阅读:
    JAVA web数据库登录界面
    JAVA web之相关名词大调查
    继承与多态课后
    第六周课后作业 02
    凯撒密文问题
    定义一个类,使用静态和构造随时知道定义了几个变量(第五周课后01)
    NAIPC2018
    [学习笔记]网络流
    Rikka with Prefix Sum
    Traffic Network in Numazu
  • 原文地址:https://www.cnblogs.com/fly-book/p/14183408.html
Copyright © 2020-2023  润新知