K近邻算法(python)

2019-07-21  本文已影响0人  desperado_wen

1,距离的度量


这个图是从别的博客中截过来的,但是我忘了是哪一个博客了,怎么办......

2,k近邻就是在列表中找到与自己距离最小的前k个,统计他们的属性值,出现最多的属性认为是自己的属性。
第一步,计算距离,默认为欧式距离。

import numpy as np
def Calculate_distance(x:np.array,y:np.array,ty=2)->np.array:
    #计算距离 ty=2 欧式距离 ty=1 曼哈顿距离 ty>2闵科夫斯基距离
    if x.shape != y.shape:
        raise Exception('length is not equal !')
    return np.sum(np.abs(x-y)**ty,axis=1)**(1/ty)

第二步,预测向量的属性值。

from collections import Counter
def classify(inp:np.array,dataSet:np.array,label:list,k:int,ty=2):
#k 近邻分类器 inp 为输入需要预测的向量,dataset为训练数据框,
#label 为训练数据框的结果 k为取最近的数的个数 ty为计算距离方式。
#inp.shape=(n,),dataSet.shape=(m,n),len(label)=m
    if (inp.shape[0]!=dataSet.shape[1] or dataSet.shape[0] != len(label)):
        raise Exception('length is not equal !')
    source=np.tile(inp,(dataSet.shape[0],1))
    distances=Calculate_distance(source,dataSet,ty=ty)
    index=distances.argsort(kind='quicksort')#快速升序排序,返回索引列表。
    d=Counter([label[i] for i in index[:k]])
    return max(d,key=d.get)

3,应用和结果展示。
这里我就把转录组作业放上来了。
下载基因芯片数据,然后分别用双样本t检验,SVM_RFE,pca对基因芯片打分后排序,再用svm和knn算法对结果进行留一法检验。
https://github.com/wenyuhaokikika/ml/blob/master/07.ipynb

上一篇下一篇

猜你喜欢

热点阅读