美文网首页数据分析
机器学习2——KNN算法之实现

机器学习2——KNN算法之实现

作者: valiant_xin | 来源:发表于2020-11-10 18:10 被阅读0次

    KNN算法的思路类似于有n多个点(xi,yi),我想要知道一个新点(x0,y0)应该属于哪个分类,计算的方式就是对(xi-x0)^2 + (yi-y0)^2的和开平方根,得到对应的距离值。然后将所有值从小到大排序,根据指定的k个数,找到距离最小的那k个点,然后根据它们哪种特征多,我的(x0,y0)就属于哪个特征。

    1.KNN算法实现大概有几个步骤:

    1.确定一个参数k
    2.依次计算所有其他样本点到我们测试样本点到距离
    3.对所有样本点到距离进行排序
    4.找出距离测试点最近对k个样本点
    5.对这k个样本点所属的类别进行投票,哪个类别多,就将该点预测成哪个类别
    

    2.下面进行实现:

    1.设置近邻k

    # 确定一个参数k,最近邻个数
    k = 3
    

    2.提取前两列数据

    # 提取前两列
    X = wine_data.iloc[:,:2]
    X
    

    3.矢量化运算

    # 矢量化运算
    X - new_data
    

    4.数学运算

    #默认同一列相加运算,这里设置axis=1,让他同一行运算
    d = np.sqrt(np.sum((X - new_data)**2, axis=1))
    d
    

    5.将数据从小到大排序,取前三个的索引

    # 最近的三个点
    topK = d.sort_values().iloc[:3].index #从小到大排序,取前三个索引
    topK
    

    6.开始投票取值

    #对这k个样本点所属的类别进行投票,哪个类别多,就将该点预测成哪个类别
    wine_data.loc[topK, '品种']
    # 投票
    wine_data.loc[topK, '品种'].value_counts()
    

    或者通过下面方式直接获取最多的投票值

    wine_data.loc[topK, '品种'].value_counts().index[0]
    

    3.尝试封装成一个方法

    def mknn(k, raw_data, new_data):
        """"功能:KNN分类器
        k:相邻个数
        raw_data:原始数据
        new_data: 查询数据"""
    
        X = raw_data.iloc[:,:2]
        d = np.sqrt(np.sum((X - new_data)**2, axis=1))
        topK = d.sort_values().iloc[:k].index #从小到大排序
        return wine_data.loc[topK, '品种'].value_counts().index[0]
    
    mknn(3, wine_data, new_data)
    

    相关文章

      网友评论

        本文标题:机器学习2——KNN算法之实现

        本文链接:https://www.haomeiwen.com/subject/vxijbktx.html