机器学习实战-1-K近邻

**陌生函数总结:

1.np.tile(array,(行重复次数,列重复次数))

a=np.array([1,2,3])
b=np.tile(a,(2,3))
b= [[1 2 3 1 2 3 1 2 3]
 [1 2 3 1 2 3 1 2 3]]

2.array.sum(axis=0/1)
0:每列求和
1:没行求和

3.array.argsort()
将矩阵每行从小到大排序,返回其排序后的原始index组成的矩阵
so, a.shape=b.shape

4.向字典中添加元素(字典是无序的)
dict[‘key’]=dict.get(‘key’, default=None)
key – 字典中要查找的键。
default – 如果指定键的值不存在时,返回该默认值。

5.sorted 排序:
对所有可迭代的对象进行排序操作。返回类型为list
sorted(iterable, key=None, reverse=False)
iterable – 可迭代对象。
key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

6.dict.items()
字典 items() 方法:用列表返回可遍历的(键, 值) 元组数组。返回类型为元组样式的列表

dict = {'Name': 'Runoob', 'Age': 7}
print ("Value : %s" %  dict.items())

Value : dict_items([('Age', 7), ('Name', 'Runoob')])

7.对字典进行排序
list2=sorted(dict.items(),key=operator.itemgetter(0/1/2/3),reverse=True)
返回的是元组形式的列表
ture:倒叙
false:正序

import operator
dict_1={'a':(1,0,6),'c':(0,45,8),'b':(2,34,10)} 
list_1=sorted(dict_1.items(),key=operator.itemgetter(0),reverse=True)
print(list_1)

[('c', (0, 45, 8)), ('b', (2, 34, 10)), ('a', (1, 0, 6))]

实现KNN

目标:
对新输入的数据进行分类,选取与新数据距离最近的K个点,投票选出新数据的类型
步骤:
1.计算新数据与每个已有数据的距离
2.将距离进行排序
3.选出最近的K个训练数据
4.读取K个训练数据的label,并加和相同的label,对label加和列表进行排序,返回最大的label
输入:
<1>新数据的特征向量
<2>N个训练数据(m维特征)的特征向量矩阵(Nm)
<3>N个训练数据对应Label(N
1)
<4>K数值
输出:
经KNN分类后,新数据的类别

from numpy import *
import operator


def createDataSet():
    group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    labels=['A','A','B','B']
    return group,labels


def classify0(inX, dataSet, labels, k):
    datasetSize = dataSet.shape[0]
    diffMat=tile(inX,(datasetSize,1))-dataSet
    sqdiffMat=diffMat**2
    sqDistance=sqdiffMat.sum(axis=1)
    distance=sqDistance**0.5
    sortedDistIndicies=distance.argsort()
    classCount={}
    for i in range(k):
        voteILabel=labels[sortedDistIndicies[i]]
        classCount[voteILabel]=classCount.get(voteILabel,0)+1
    sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
    print(sortedClassCount)
    return sortedClassCount[0][0]

参考资料:菜鸟教程,机器学习实战

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值