2020年末coding复习之 KNN及变种实验记录

import numpy as np

def euclidean_metric(x,y):
    return np.sqrt(((x-y)**2).dot(np.ones_like(x)))

def KNN(train_x,train_y,test_x,k=3,Lambda=euclidean_metric):
    train = np.array(sorted({Lambda(train_x[i],test_x):train_y[i] for i in range(train_y.shape[0])}.items(),key = lambda kv:(kv[0], kv[1]))[:k])
    class_y , counter = np.unique(train[:,-1],return_counts=True)
    index_ = counter==counter.max()
    return (class_y[index_],counter[index_])

KNN(train_x,train_y,test_x,k=3)

一种变种对高维空间可能性求解

import numpy as np

def norm(vector,p=2):
    '''
    向量的范数
    '''
    return (vector**p).dot(np.ones_like(vec1))**(1/p)

def difference_in_norms(vector1, vector2, p=3):
    """
    闵氏距离
    当p=1时,就是曼哈顿距离
    当p=2时,就是欧氏距离
    当p→∞时,就是切比雪夫距离
    :param vec1:
    :param vec2:
    :param p:
    :return
    """
    #print(np.linalg.norm(vec1 - vec2, ord=p))
    return norm(vector1-vector2,p)
def KNN(train_x,train_y,test_x,k=3,p=False):
    train = np.array(sorted({difference_in_norms(train_x[i],test_x,p):train_y[i] for i in range(train_y.shape[0])}.items(),key = lambda kv:(kv[0], kv[1]))[:k])
    class_y , counter = np.unique(train[:,-1],return_counts=True)
    index_ = counter==counter.max()
    return (class_y[index_],counter[index_])



for j in range(1,len(train_x)+1):
    for i in range(100):
        print(j,i,KNN(train_x,train_y,test_x,j,i))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值