Chapter2 KNNpython
格式:tile(A,reps)
* A:array_like
* 输入的array
* reps:array_like
* A沿各个维度重复的次数算法
举例:A=[1,2]
1. tile(A,2)
结果:[1,2,1,2]
2. tile(A,(2,3))
结果:[[1,2,1,2,1,2], [1,2,1,2,1,2]]
3. tile(A,(2,2,3))
结果:[[[1,2,1,2,1,2], [1,2,1,2,1,2]],
[[1,2,1,2,1,2], [1,2,1,2,1,2]]]数组
reps的数字从后往前分别对应A的第N个维度的重复次数。函数
2.numpy.shape函数测试
shape函数是numpy.core.fromnumeric中的函数,它的功能是读取矩阵的形状,好比shape[0]就是读取矩阵第一维度的长度。ui
3.numpy.sum函数(axis=)spa
python内建函数的sum应该是默认的axis=0 就是普通的相加,当加入axis=1之后就是将一个矩阵的每一行向量相加。code
例如:blog
c = np.array([[0, 2, 1], [3, 5, 6], [0, 1, 1]]) print c.sum() print c.sum(axis=0) print c.sum(axis=1) 结果分别是:19, [3 8 8], [ 3 14 2] #axis=0, 表示列。 #axis=1, 表示行。
4.字典的get方法排序
dict.get(key, "NO")
若是key在字典中不存在,返回第二个参数的值,例如这里返回"NO"
5.numpy.argsort函数
array.argsort()返回的是array数组中的值的从小到大的索引
例如x = [2,4,3,1]
注意这里numpy的数组要用它本身的array函数来定义,不能直接定义数组
6. sorted函数
a = {'math':98, 'english':100, 'PE':77} b = sorted(a.iteritems(), key=operator.itemgetter(1), reverse=True)
iteritems是循环迭代字典a中的每个key-value对,itemgetter(1)表示排序是根据value的值排序(0则是key),reverse=True表明降序
横轴:每一年飞行里程数 纵轴:玩电子游戏时间
绿色:不具魅力 蓝色:魅力通常 红色:极具魅力
Helen女士的择偶标准挺不错0.0
7.numpy.min() numpy.max()
numpy里的min(0)、max(0) 参数0表示列中取得最小值,而不是选取当前行的最小值,这也是用来处理矩阵的
8.使用open(filename)函数时出现错误:
File "/Users/qcy/PycharmProjects/MachineLearning/KNN.py", line 109, in img2vector
fr = open(filename)
TypeError: function takes at least 2 arguments (1 given)
这是因为在from os import * 时,把os.open()函数引入了,从而覆盖了python的built-in的open()函数,这两个open()函数使用的方法是不同的。因此只import须要使用的函数就行,改为from os import listdir
总结:KNN这个算法其实挺笨的,它并无真正的使用训练集训练出一个模型,而是在测试时直接把测试的矩阵扩大到训练矩阵的规模,而后作一个距离的计算,取前K个,哪一个类别的归类多就归到哪类。这种分类方式准确率还行,可是它运行的时间和占用的空间可能太过庞大了。 经过这一章也熟悉了使用numpy库对矩阵进行操做。“KNN另外一个缺陷时它没法给出任何数据的基础结构信息,所以咱们也没法知晓平均实例样本和典型实例样本具备什么特征。” (???)