knn算法原理与实现(1)

一、算法原理与模型

knn算法即最近邻算法,其原理非常简单即根据给定的数据集,计算数据集中点的特征到待分类数据的欧氏距离,然后选择距离最近的k个作为判断依据,这k个数据中出现类别最多的作为新输入数据的label。模型用公式表示如下:

二、python代码实现

__author__ = 'Gujun(Bill)'
#knn code
#2018/03/07
import numpy as np
import random as rd

def countDistance(x1,x2):#计算欧氏 距离
    dim = len(x1)
    distance = 0
    for i in range(dim):
        distance += (x1[i]-x2[i])*(x1[i]-x2[i])
    return np.sqrt(distance)
def do_predict(dataMax,sortedDistanceIndex,k):
    temp = dict()#用字典存储对应的标签出现的次数
    for i in range(k) :
            temp[dataMax[sortedDistanceIndex[i]][-1]] += 1
    return max(temp, key=temp.get) #出现频率最高的那个键的名字
def predict(dataMax,inputVec,k):
    vec_num = dataMax.shape[0]
    distances = vec_num*[0]
    for i in range(vec_num):
        distances[i] = countDistance(vec_num[i][:,-1])
    sortedDistanceIndex = np.argsort(distances)
    class_lable = do_prodict(dataMax,sortedDistanceIndex,k)
    print("分类结果:",class_lable)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值