ML中Python的零落知识点
目录
库的选择
使用numpy而不要使用math,因为math中的函数对向量不支持,而机器学习中大多是对向量进行操作
numpy.tile(A,B)
numpy.tile([1,2],3) #在一维方向上复制3次,即[1,2,1,2,1,2]
numpy.tile([1,2],(2,3)) #在二位空间上复制2行3列,即[[1,2,1,2,1,2],[1,2,1,2,1,2]]
numpy.argsort(A)
a = np.array([2,6,4,1])
a.argsort() #返回排序后列表的下标索引,在此例中即[3,0,2,1]
{字典}.get(A,B)
classCount.get(voteIlabel,0) #返回字典classCount中voteIlabel元素对应的值,若无,则进行初始化
#参数A为字典,B为初始化的值,返回为A的键值,若没有A则初始化键A并将其初始化为B
sorted(iterable, key=None, reverse=False)
# iterable -- 可迭代对象。
# key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
# reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
# classCount为字典,key限定了按照字典的值来排序,而不是按照其键来排,operator.itemgetter(index)为获取第index+1项
其与list.sort()的区别为sort()方法只为list列表定义,而sorted()函数可以接收任何的iterable可迭代对象。
一维矩阵的定义
定义一维矩阵最好为(1,n)或(n,1),不要定义成(n,)或(,n),即一维矩阵也要定义成二维矩阵,故要np.random.rand(1,3)而不是np.random.rand(3)
reshape(2,-1)中参数-1的含义
reshape()后新数组元素数量与原数组元素数量要相等,一个参数为-1时,那么reshape函数会根据另一个参数的维度计算出数组的另外一个shape属性值。即若将一个A(2,4)的矩阵转换成4行的矩阵,则无需手动计算要分多少列,A.reshape(4,-1)会自动计算出分多少列
np.std()求标准差
numpy.std() 求标准差的时候默认是除以 n 的,即是有偏的,np.std无偏样本标准差方式为加入参数 ddof = 1
pandas.std() 默认是除以n-1 的,即是无偏的,如果想求有偏,需要加上参数ddof=0 ,即pandas.std(ddof=0)
计时
import time
tic = time.process_time() # 返回当前进程执行CPU的总时间 time.time()返回的时间是当前系统时间
# 要测试的代码....
toc = time.process_time()
print(str(1000*(toc-tic)) + "毫秒")
np.squeeze()维度压缩
将矩阵中维度为1的维度去掉,如A为(10,1)的矩阵,压缩后为(10,)的列表
再如B为(2,1,3)的矩阵,压缩后为(2,3)的矩阵
函数中变量a与self.a的区别
def test():
a = 1; # 局部变量
self.a = 2; # 全局变量