一个简单的KNN实现方法

对于许多离散问题,经过神经网络解决再通过softmax之后每一个值在[0,1]之间的连续变量,想要将其离散化,即离散化到每个元素都是 binary-variable,即 0-1 ,这时可以用KNN方法,其实就是找到与这个向量的方差最小的K个临近向量。

做个简单的示例如下:

import itertools
import  numpy as np

def knn(x,N, k=4):
    k_nn = np.array(list(map(list, itertools.product([0, 1], repeat=N))))          
#这句话的意思是生成2^N个 0,1组成的向量,即穷尽探索空间。

    # the 2-norm
    sqd = ((k_nn - x) ** 2).sum(1)  #计算方差
    idx = np.argsort(sqd)           #对方差进行排序
    return k_nn[idx[:k]]            #取方差最小的K个

if __name__ == '__main__':

    x = [0.1, 0.3, 0.6, 0.9]   #一个连续向量                   
    N =len(x)                  #x的元素个数
    k_neighbor= knn(x,N)       #执行knn,用来保存K-neighbors
    print(x)
    print(k_neighbor)

k_nn = np.array(list(map(list, itertools.product([0, 1], repeat=N))))          
#这句话的意思是生成2^N个 0,1组成的向量,即穷尽探索空间。例如例子中 N =4, 那么k_nn是一个 2^4 = 16 行的 np.array.

结果示例:

一个简单的KNN实现方法_第1张图片

你可能感兴趣的:(Python,python,开发语言)