一、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]?需要我们判断是恶性还是良性。
?
?
kNN的思想是:我算出这个蓝色球距离每一个球的距离,distances=[]?
?
然后按照从近到远进行排序(按照索引),将最近的k个点的y坐标求出来(即这几个点都是0还是1),然后进行对1和0的频次统计。如果1多则恶性可能性大,0多则良性可能性大。
二、kNN过程
求出x点距离其他点的距离 存入到distances数组中
求出离这点新点最近的点的索引排序
假设k=6 求出最近的6个点相应的y的值
求出topK_y最终为
[1, 1, 1, 1, 1, 0] 对其统计
结果:Counter({1: 5, 0: 1}) votes.most_common(1)#找出票数最多的元素,即频次最大
结果:[(1, 5)]
votes.most_common(1)[0] #取出频次最大的一组的第一个元素 ,即1 恶性
结果:(1, 5)
三、使用sklearn中的kNN
?
标签:kNN,机器,一组,恶性,良性,频次,算法,求出 来源: https://www.cnblogs.com/touziqin/p/11000468.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。