机器学习基础--kNN算法

匿名 (未验证) 提交于 2019-12-02 23:39:01

一、kNN算法介绍

首先先介绍下kNN算法,有这么一个场景给定了肿瘤块的大小和时间的一组数据,其中每一组数据对应一个结果数据,即恶性还是良性。这么一组数据:

    raw_data_x = [[3.39,2.33],    #特征
                            [3.11,1.78],
                            [1.34,3.37],
                            [3.58,4.68],
                            [2.28,2.87],
                            [7.42,4.7],
                            [5.75,3.53],
                            [9.17,2.51],
                            [7.79,3.42],
                            [7.94,0.79]
                          ]
    raw_data_y=[0,0,0,0,0,1,1,1,1,1] #0良性 1恶性

我们将肿瘤快大小作为横轴,时间作为纵轴,其中绿色代表良性,红色代表恶性,蓝色为给定[8.09,3.37] 需要我们判断是恶性还是良性。

import numpy as np import matplotlib.pyplot as plt  raw_data_x = [[3.39,2.33],    # 特征              [3.11,1.78],              [1.34,3.37],              [3.58,4.68],              [2.28,2.87],              [7.42,4.7],              [5.75,3.53],              [9.17,2.51],              [7.79,3.42],              [7.94,0.79]              ] raw_data_y=[0,0,0,0,0,1,1,1,1,1] #0良性 1恶性  x_train = np.array(raw_data_x) #训练 y_train = np.array(raw_data_y) #训练  plt.scatter(x_train[y_train==0,0],x_train[y_train==0,1],color='g') #绘制良性点 plt.scatter(x_train[y_train==1,0],x_train[y_train==1,1],color='r') #绘制恶性点 plt.show()

 

x=np.array([8.09,3.37])  #来了新点,预测属于红色 还是绿色??

 

kNN的思想是:我算出这个蓝色球距离每一个球的距离,distances=[] 

 

然后按照从近到远进行排序(按照索引),将最近的k个点的y坐标求出来(即这几个点都是0还是1),然后进行对1和0的频次统计。如果1多则恶性可能性大,0多则良性可能性大。

二、kNN过程

求出x点距离其他点的距离 存入到distances数组中

from math import sqrt distances=[]       for x_train in x_train:#对于每一个x_train 都求出距离     d =sqrt(np.sum((x_train - x)**2))    #欧拉距离  注意x_train x都是矩阵,是对每一个元素的操作     distances.append(d)

求出离这点新点最近的点的索引排序

nearest=np.argsort(distances) #求出离新点最近的点的索引排序

假设k=6 求出最近的6个点相应的y的值

topK_y = [y_train[i] for i in nearest[:k]] #将最近的6个点的相应的y坐标显示

求出topK_y最终为

[1, 1, 1, 1, 1, 0]   对其统计
from collections import Counter votes=Counter(topK_y) 
结果:Counter({1: 5, 0: 1})   votes.most_common(1)#找出票数最多的元素,即频次最大

结果:[(1, 5)]

votes.most_common(1)[0] #取出频次最大的一组的第一个元素 ,即1 恶性

结果:(1, 5)

三、使用sklearn中的kNN

 

转载请标明出处:机器学习基础--kNN算法
文章来源: https://blog.csdn.net/weixin_39043567/article/details/91397308
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!