0x000 算法基础知识前言
在看机器学习实战pytho实现的时候,有些代码看不懂,特此总结一下,下面分别介绍。
0x0001 K-近邻算法算法Python的Numpy库基础知识
numpy中的eye
numpy.eye(N,M=None, k=0, dtype=)
N,M参数:输出方阵(行数=列数)的规模,即行数或列数
K参数:默认情况下输出的是对角线全“1”,其余全“0”的方阵,如果k为正整数,则在右上方第k条对角线全“1”其余全“0”,k为负整数则在左下方第k条对角线全“1”其余全“0”。
创建一个eye.py文件代码如下:
from numpy import *
e = eye(3)
e1 = eye(3,k=1)
在shell里输入下面代码:
>>> e
#e的结果
array([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.]])
>>> e1
#e1的结果
array([[ 0., 1., 0.], [ 0., 0., 1.], [ 0., 0., 0.]])
numpy中的shape
根据上面创建的对角矩阵的基础上,我们继续在shell中输入一下代码,并且附带结果:
>>> e
array([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.]])
>>> e.shape
(3, 3)
>>> e.shape[0]
3
>>> e.shape[1]
3
通过shape我们可以来查看一个矩阵的行列长度。而这组例子并不好分辨shape[0]和shape[1]分别代表的是什么,接下来我们在来创建一组例子:
a = array([[0,2,2], [3,1,0], [1,2,7], [9,5,9]])
shell输入:
>>> a
array([[0, 2, 2], [3, 1, 0], [1, 2, 7], [9, 5, 9]])
>>> a.shape
(4, 3)
>>> a.shape[0]
4
>>> a.shape[1]
3
这样就很清晰的看出来shape[0]=4,shape[1]=3,也就是说shape[0]代表的是矩阵的行数,shape[1]代表的是列数。
numpy中的tile
tile(a,(m,n))的含义:将a数组复制n次暂时储存到一个临时变量里,在通过这个临时变量复制m次得到的结果就是tile(a,(m,n));
更简单的来说其实m就是代表结果中矩阵最后的m行数,而n代表的是每行矩阵中复制a的次数
例如下面:
创建一个tile.py文件,代码如下:
from numpy import *
a = [0,1,2]
shell中:
#将2复制一次
>>> b = tile(2,(2,1))
>>> b
array([[2], [2]])
>>> c = tile(a,(3,2))
>>> c
array([[0, 1, 2, 0, 1, 2], [0, 1, 2, 0, 1, 2], [0, 1, 2, 0, 1, 2]])
>>> d = tile(a,(4))
>>> d
array([0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2])
numpy中的sum(axis=0,1)
创建一个sum.py的文件,代码如下:
from numpy import *
a = [0,1,2]
b = [2,1,3]
分别输入以下代码:
#分别设置sum的后缀axis参数,为0,1,无
>>>c = sum([a,b],axis=0)
>>>d = sum([a,b],axis=1)
>>>e = sum([a,b])
#下面是IDLE输出的结果
>>>c
array([2, 2, 5])
>>>d
array([3, 6])
>>>e
9
通过上面的结果我们可以知道:
①当axis=0时,是把两个数组以列来相加,也就是[0+2,1+1,2+3]=[2,2,5]
②当axis=1时,是把两个数组以行来相加,也就是[0+1+2,2+1+3]=[3,6]
③当没有参数时,默认将所有相加:0+1+2+2+1+3=9
numpy中的argsort()
argsort(a, axis=-1, kind=’quicksort’, order=None)
argsort函数返回的是数组值从小到大的索引值
One dimensional array:一维数组
>>> x = np.array([3, 1, 2])
>>> np.argsort(x)
array([1, 2, 0])
Two-dimensional array:二维数组
>>> x = np.array([[0, 3], [2, 2]])
>>> x
array([[0, 3], [2, 2]])
#按列排序
>>> np.argsort(x, axis=0)
array([[0, 1], [1, 0]])
#按行排序
>>> np.argsort(x, axis=1)
array([[0, 1], [0, 1]])
0x0002 K-近邻算法Python实现中的Python基础知识
幂的表示方法 ——– **
**:这个就代表了python中的幂次方,例如我们平时打字表示的时候2^2=4这个^在Python中的表示就是两个星号了。
sorted()
sort函数是list列表中的函数,而sorted可以对list或者iterator进行排序
如果用sort函数对列表排序时会影响列表本身,而sorted不会。
例子:
>>> a = [1,2,1,4,3,5]
>>> a.sort()
>>> a
[1, 1, 2, 3, 4, 5]
>>> a = [1,2,1,4,3,5]
>>> sorted(a)
[1, 1, 2, 3, 4, 5]
>>> a
[1, 2, 1, 4, 3, 5]
sorted(iterable,cmp,key,reverse)
参数:iterable可以是list或者iterator;
cmp是带两个参数的比较函数;
key 是带一个参数的函数;
reverse为False或者True,升序或者降序;
例:
#operator.py文件代码:
from numpy import *
import operator
a = [3,1,9]
#shell
>>>b = operator.itemgetter(0)
>>>b(a)
3
>>>b = operator.itemgetter(1)
>>>b(a)
1
>>>b = operator.itemgetter(2)
>>>b(a)
9
operator.itemgetter函数获取的不是值,而是定义了一个函数。
K-近邻算法基础总结
大概Python用到的基础知识就是这么多,大部分都是numpy下的知识点,先把基础知识掌握在开始机器学习day02的近邻算法总结