• 机器学习之KNN---k最近邻算法-机器学习


    KNN算法是机器学习中入门级算法,属于监督性学习算法。SupervisedLearning.

    通过Plinko游戏来介绍该算法。

    就是随机在上面投球,然后球进下面的哪个地方就得多少分。

    然后在规定得投次数得到最高得分数,应该怎么投?

    然后预测每次投能得到多少分?

    首先应该通过训练数据集,看看在每个位置投得点,能得到多少分,然后预测点距离每次点得距离,然后排序,那么预测点周围出现次数最多得就是大概率得到得分数。

    1,通过训练得数据集,提取特征值和标签,特征值就是距离左侧得距离。标签就是投下去得到得分数。

    2,选择预测点,和K个距离近得数。计算每个点得距离。

    3.排序,前K个点得出现最多次标签得就是得分得大概率值。

    #KNN算法是寻找K个距离最近的邻居,然后根据已知的邻居label,出现次数最多的,推断出测试点的类别。
    # polinko 模拟
    import numpy as np
    import collections as c
    
    def KNN(k,predictPoint,feature,label):
        # 先求出预测点与周围点的距离,然后排序,找出距离最近的k个点,出现最多的次数,就是预测结果。
        # map内置函数(func,iterable)
        distance = list(map(lambda x: abs(200 - x), feature))
        # np.sort()是直接排序,而我们需要feature和labell联系一起
        # print(np.sort(distance))
        # 所以应该使用np.argsort()可以得到排序的后的index,可以与label关联
        sort_index = np.argsort(distance)
        # 通过切片找出K个最邻近的点
        return c.Counter(label[sort_index][:k]).most_common(1)[0][0] # 返回的是(4,2),表示在k的最邻近元素,4出现最多次数为2
    
    
    if __name__ == '__main__':
        data = np.array([
            [120, 3],
            [140, 3],
            [160, 3],
            [40, 2],
            [70, 2],
            [200, 4],
            [250, 4],
            [100, 3]
        ])
        feature = data[:,0]
        label = data[:,-1]
        k = 5
        predictPoint = 170
        print(KNN(k,predictPoint,feature,label))
    

     预测结果:

    3 

    代码中给出的数据集是随机写的,不一定准。

    现在选择真实的数据集,通过numpy中loadtext()读取csv文本数据集。

    np.loadtxt("data01.csv",delimiter=",")这个第一个参数文件名称,第二个delimiter是数据分割符.
    然后就和后面一样,提取特征值和标签值,计算k个局里近的距离。
    但是和真实的还有有差距,这个是怎么回事。
    所以造成结果不正确的原因有这些:
    还需要
    1.调整参数,简称调参。
    2.可能还有其他维度特征会影响结果,但是现在只给了一种特征值。

     缺点:对于数据量很大得训练集合,耗费内存。对硬件要求较高。

  • 相关阅读:
    填坑总结:python内存泄漏排查小技巧
    springMVC注解中@RequestMapping中常用参数value params 以及@RequestParam 详解
    springMVC 自定义类型转换器
    为什么Java需要lambda 表达式? 上帝爱吃苹果
    利器| Cypress 强大全新的 Web UI 测试框架应用尝鲜
    缺少锻炼面试的机会?城市群之北上广杭一起来了!
    实战 | 基于JMeter 完成典型电商场景(首页浏览)的性能压测
    一文搞定 pytest 自动化测试框架(一)
    测试面试 | Java 经典面试题汇总
    软件测试工程师成长痛点和职业发展建议
  • 原文地址:https://www.cnblogs.com/hamish26/p/11044230.html
Copyright © 2020-2023  润新知