栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

KNN-K近邻算法(K-Nearest Neighbors)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

KNN-K近邻算法(K-Nearest Neighbors)

机器学习之KNN-K近邻算法(K-Nearest Neighbors) 本算法用以实现输入一个新来的病患数据,可以根据以往的数据训练集来判断肿瘤恶化的程度


图1 上图横轴表示患者肿瘤大小,竖轴表示发现肿瘤的时间,图中红色点代表良性肿瘤,蓝色点代表恶心肿瘤。


如果现在新来了一个病人,这个病人在特征空间中的位置如上图中绿色点的位置,那么我们如何通过K近邻算法判断出这位患者是恶性肿瘤还是良性肿瘤,看图是很容易知道的,但是怎么用代码和算法实现呢?

我们的方法是这样的,给定一个K=6,这个K值你可以把他想像成是机器学习的使用者根据经验取得了一个经验上的最好值,这个K就是6。
对于新来的数据点,用K近邻算法,算出这个新来的数据点离它最近的6个点的距离,然后看这6个点在红点和蓝点的比例,比如算出的最近的6个点的距离中,其中红点:蓝点=5:1,也就是红点数量大于蓝点数量,则新来的患者判断为良性肿瘤,反之,红点数小于蓝点数,则判断为恶性肿瘤。
具体实现代码和算法如下;
下面展示一些 内联代码片。

以下代码是通过在Jupyter Notebook中测试通过。
import numpy as np
import matplotlib.pyplot as plt
raw_data_x =[[3.393533211, 2.331273381], //各个数据点在特征空间中的坐标
 [3.110073483, 1.781539638],
 [1.343808831, 3.368360954],
 [3.582294042, 4.67917911],
 [2.280362439, 2.866990263],
 [7.423436942, 4.696522875],
 [5.745051997, 3.533989803],
 [9.172168622, 2.511101045],
 [7.792783481, 3.424088941],
 [7.939820817, 0.791637231]]
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.093607318,3.365731514])  //这是新来的患者数据在特征空间中的坐标
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.scatter(x[0],x[1],color='b') //将新来的患者坐标在二维坐标中画出来便于观看
plt.show()`
//KNN过程
from math import sqrt
distances = []
for xi in x_train:
    d = sqrt(np.sum((xi - x)**2))
    distances.append(d)  
   // 或者直接用python的方法 distances = [ sqrt(np.sum( ( x_train - x)**2 ) ) for x_train in x_train]
   np.argsort(distances)
   nearest = np.argsort(distances)
   k = 6
   topk_y = [y_train[i] for i in nearest[:k]]
   from collections import Counter
  Counter(topk_y)
  votes = Counter(topk_y)
  votes.most_common(1)
  votes.most_common(1)[0][0]
  predict_y = votes.most_common(1)[0][0]
  predict_y  //这里执行后输出为1,代表为恶性肿瘤。如果输出为0,则代表为良性。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/308526.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号