• K近邻算法-KNN


    一:KNN算法概念(K-Nearest Neighbor)

      举个栗子:现在有10个点,突然我们又加了一个点,然后我们计算该点到其它点的距离从小到大排序,然后取前K个,查看该K个属于哪一部分的较多,那么我们就可以大概率的确定该点属于那一类。

      

      图中蓝色点为我们新加的点,然后我们就是要确定这个蓝色的点属于哪一类的概率较大。

    二:计算两点间的公式

    欧式距离(常用):类似于亮点间的距离公式,但是我们的特征有可能多个,所以可以扩展到n维。

    曼哈顿距离:就是表示两个点在标准坐标系上的绝对轴距之和。

    三:案例分析

    有10个病人,得了肿瘤,但是有良性的有恶性的,0代表良性的1代表恶性的,然后我们现在又来了一个病人,想要预测他是良性还是恶性。这时我们就可以采取KNN算法来判断他属于哪一种。

    特征有两个,a和b,将其封装为向量。

    raw_data_X = [[1.232422,1.22324],
    [2.324232,1.3224],
    [2.3435353,2.3232342],
    [3.434353,3.434353],
    [4.54546,3.54544],
    [7.42422,6.764353],
    [6.42224534,7.533232],
    [8.435353,8.5433],
    [9.423534,9.422224],
    [8.544444,9.4564454]]
    标记,0和1,同样封装为向量。
    raw_data_y=[0,0,0,0,0,1,1,1,1,1]
    被预测的病人,给出两个特征。
    x = np.array([5.4323213,6.433534454])
    我们可以先看下10个样本的分布,红色是良性的,绿色是恶性的。
     

    第一张图的蓝色的就是我们新加点,然后我们要计算蓝色点到其他点的距离用欧式距离计算。

    x_train = np.array(raw_data_X)
    y_train = np.array(raw_data_y)
    distinces = [sqrt(np.sum(i-x)**2) for i in x_train]
    distince列表就是我们计算出到每个点的距离。
    然后我们取K个,K的大小先取5,后面讲解如何确定。
    k = 5

    near = np.argsort(distinces)

    topK = [y_train[i] for i in near[:k]]
    topK就是只包括0和1的列表。
    再计算0和1的个数,
    dic = Counter(topK)
    取最多的也就是第一个,
    final = dic.most_common(1)
    取预测值
    predict = final[0][0],结果不是1就是0,如果是1说明是恶性的,如果是0说明是良性的。

    四:完整代码
    import numpy as np
    import matplotlib.pyplot as plt
    from math import sqrt
    from collections import Counter
    
    
    raw_data_X = [[1.232422,1.22324],
                  [2.324232,1.3224],
                 [2.3435353,2.3232342],
                 [3.434353,3.434353],
                 [4.54546,3.54544],
                 [7.42422,6.764353],
                 [6.42224534,7.533232],
                 [8.435353,8.5433],
                 [9.423534,9.422224],
                 [8.544444,9.4564454]]
    
    raw_data_y=[0,0,0,0,0,1,1,1,1,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='red')
    plt.scatter(x_train[y_train==1,0],x_train[y_train==1,1],color='green')
    plt.show()
    
    x = np.array([5.4323213,6.433534454])
    plt.scatter(x_train[y_train==0,0],x_train[y_train==0,1],color='red')
    plt.scatter(x_train[y_train==1,0],x_train[y_train==1,1],color='green')
    plt.scatter(x[0],x[1],color='blue')
    plt.show()
    
    distinces = [sqrt(np.sum(i-x)**2) for i in x_train]
    
    k = 5
    
    near = np.argsort(distinces)
    
    topK = [y_train[i] for i in near[:k]]
    
    dic = Counter(topK)
    final = dic.most_common(1)
    predict = final[0][0]
    print(predict)
    

     

  • 相关阅读:
    [Selenium]Eclipse hangs at 57% in debug mode with TestNG tests
    [Selenium] CSS3 选择器
    [Selenium]如何实现上传本地文件
    [Selenium]显式等待 Explicit wait & 隐式等待 Implicit wait
    [Selenium]中使用css选择器进行元素定位
    [Selenium]验证点了某个Button之后无反应
    7. Debug on local machine
    6. Manage the driver for browser and the script for Hub
    4. Configure maven in Spring Tool Suite
    3. Install Spring-Tool-Suite & TestNG
  • 原文地址:https://www.cnblogs.com/lyr999736/p/10649782.html
Copyright © 2020-2023  润新知