Python语言与信息数据获取和机器学习

机器学习实战 2.1 KNN

2017-10-27  本文已影响12人  夹小欣

knn的思想是:分别计算每一个测试样本和所有训练样本的特征距离,选取k个最近的训练样本,对他们的分类进行投票,k个样本中所属类别最多的,作为测试样本的类别
numpy tile函数:A重复B次

tile([1,2,3],(m,n)) #[1,2,3]重复m行n列
ipdb> tile([1,2,3],(2,1))
array([[1, 2, 3],
       [1, 2, 3]])

python argsort()函数返回排序后的索引
python dict.get(key, default=None),若不存在则返回default值
python sorted可以自定义比较函数、多列比较,参考博客
python operate.itemgetter(1,4) 返回值是函数,表示先比较第2列,再比较第5列
np.array 的加减乘除是在元素一级

#每次只能输入一个待测数据
#多个待测数据只能用循环
def knn(testX, trainX, labels, k):
#距离用欧式距离
    x0_x1 = tile(testX,(trainX.shape[0],1))-trainX
    x0_x1_2 = x0_x1 ** 2
    x0_x1_2_sqrt = x0_x1_2 **0.5
#选出最近的k个,从小到大排序的前k个
    k_index = x0_x1_2_sqrt.argsort()
#投票机制,计算前k个中出现的labels次数,将当前值分类到label最多的当中。
    dic = {}
    for i in range(k):
        dic[lables[i]]=dic.get(lables[i],0)+1
    sortlables =  sorted(dic.iteritems(),key=operator.itemgetter(1),reverse=True)
return sortlables[0][0]
上一篇下一篇

猜你喜欢

热点阅读