kNN - k邻近算法

k邻近算法就解释完了,按照惯例,还是应该给出k邻近算法的官方定义,我从百度百科上拷贝过来了

K近邻算法:在特征空间中,如果一个样本附近的k个最近(即特征空间中最邻近)样本的大多数属于某一个类别,则该样本也属于这个类别。

下面在Jupyter Notebook中一步一步实现k邻近算法

可在我的github下载notebook文件

https://github.com/CodingSoldier/python-learn/blob/master/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/notebook/04-knn-k%E8%BF%91%E9%82%BB%E7%AE%97%E6%B3%95/01-knn%E5%AE%9E%E7%8E%B0-%E6%95%99%E7%A8%8B.ipynb

knn.py的代码如下:

# -*- coding: utf-8 -*-

import numpy as np
from math import sqrt
from collections import Counter

def knn_classify(k, X_train, y_train, x):

    assert 1 <= k <= X_train.shape[0], "k要大于等于1,小于等于数组X_train第一维大小"
    assert X_train.shape[0] == y_train.shape[0], "数组X_train第一维大小要等于数组y_train第一维大小"
    assert X_train.shape[1] == x.shape[0], "数组X_train第二维大小要等于预测点x第一维大小"

    distances = [sqrt(np.sum((dot -x)**2)) for dot in X_train]
    nearest = np.argsort(distances)

    top_k_y = [y_train[i] for i in nearest[:k]]
    votes = Counter(top_k_y)

    return votes.most_common(1)[0][0]

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值