首页 > 编程语言 > 详细

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

时间:2019-06-18 11:43:09      阅读:184      评论:0      收藏:0      [点我收藏+]

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 

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

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

原文:https://www.cnblogs.com/hamish26/p/11044230.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!