KNN
assignment1 KNN讲解参见:
https://blog.csdn.net/u014485485/article/details/79433514?utm_source=blogxgwz5
np. flatnonzero(a) 返回a的展平版本中非零的索引。
a1 = np.random.choice(a=5, size=3, replace=False, p=None) 参数分别从a 中以概率p,随机选择3个, p没有指定的时候相当于是一致的分布。replacement的意思是抽样之后还放不放回去,如果是False的话,那么出来的三个数都不一样,如果是True的话, 有可能会出现重复的,因为前面抽的放回去了。
subplot(nrows, ncols, plot_number) 作用是把一个绘图区域(可以理解成画布)分成多个小区域,用来绘制多个子图。nrows和ncols表示将画布分成(nrows*ncols)个小区域,每个小区域可以单独绘制图形;plot_number表示将图绘制在第plot_number个子区域。举例: createPlot = subplot(222),表示画布分成(2*2=4)个小区域,并将图createPlot绘制在画布中的第二个子区域,也就是右上角位置。
imshow():https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.imshow
astype('uint8'): 把图像数据类型转换为无符号八位整型,范围是0-255。如果输入图像是无符号八位整型的,返回的图像和源图像相同。
plt.axis('off') 不显示坐标尺寸,区别见下图:
numpy.reshape(a, newshape, order='C'):
a:array_like。要重新形成的数组。
newshape:int或tuple的整数。新的形状应该与原始形状兼容。如果是整数,则结果将是该长度的1-D数组。一个形状维度可以是-1。在这种情况下,从数组的长度和其余维度推断该值。
order:{'C','F','A'}可选。使用此索引顺序读取a的元素,并使用此索引顺序将元素放置到重新形成的数组中。'C'意味着使用C样索引顺序读取/写入元素,最后一个轴索引变化最快,回到第一个轴索引变化最慢。'F'意味着使用Fortran样索引顺序读取/写入元素,第一个索引变化最快,最后一个索引变化最慢。注意,'C'和'F'选项不考虑底层数组的内存布局,而只是参考索引的顺序。'A'意味着在Fortran类索引顺序中读/写元素,如果a 是Fortran 在内存中连续的,否则为C样顺序。
欧式距离(对应L2范数):最常见的两点之间或多点之间的距离表示法,又称之为欧几里得度量,它定义于欧几里得空间中。n维空间中两个点x1(x11,x12,…,x1n)与 x2(x21,x22,…,x2n)间的欧氏距离:
np.bincount():它大致说bin的数量比x中的最大值大1,每个bin给出了它的索引值在x中出现的次数。下面,我举个例子让大家更好的理解一下:x中最大的数为7,因此bin的数量为8,那么它的索引值为0->7
x = np.array([0, 1, 1, 3, 2, 1, 7])
索引0出现了1次,索引1出现了3次......索引5出现了0次......
np.bincount(x)
因此,输出结果为:array([1, 3, 1, 1, 0, 0, 0, 1])
np.argmax():取出a中元素最大值所对应的索引a = np.array([3, 1, 2, 4, 6, 1]),b=np.argmax(a) 此时最大值位6,其对应的位置索引值为4,(索引值默认从0开始)
np.argsort():将x中的元素从小到大排列,提取其对应的index(索引),然后输出到y。
KNN原理:找出距离最近的k个点对应的标签,然后找出出现次数最多的标签作为预测标签。
F范数:设A是mxn的矩阵,其F范数定义为:
numpy.split(ary, indices_or_sections, axis=0):Split an array into multiple sub-arrays.
>>> x = np.arange(9.0) >>> np.split(x,3) [array([ 0., 1., 2.]), array([ 3., 4., 5.]), array([ 6., 7., 8.])]
SVM
代码参见:https://blog.csdn.net/lifewang/article/details/80790493
matplotlib.rcParams设置:
matplotlib.rcParams[‘figure.figsize’]#图片像素
plt.rcParams['image.interpolation'] = 'nearest' # interpolation style(插值方式)
plt.rcParams['image.cmap'] = 'gray' # 设置 颜色 style
%load_ext autoreload %autoreload 2自动重新加载更改的模块
cell 4:取range(49000,50000)为验证集,取range(0,49000)为训练集,在训练集中随机选择500张为dev集,以加快训练速度。
cell7:图像预处理,均值减法(Mean subtraction)是预处理最常用的形式。它对数据中每个独立特征减去平均值,从几何上可以理解为在每个维度上都将数据云的中心都迁移到原点。在numpy中,该操作可以通过代码X -= np.mean(X, axis=0)实现。这个结果是将49000张图片的像素矩阵做了一个平均,得到了一个像素平均值矩阵,对应一张平均图片。
plt.figure(figsize=(4,4)):设置尺寸大小。
hstack(tup) :参数tup可以是元组,列表,或者numpy数组,返回结果为numpy的数组。按列顺序把数组给堆叠起来,最低维自动排序。
import numpy as np a=[1,2,3] b=[4,5,6] print(np.hstack((a,b)))
输出:[1 2 3 4 5 6 ]
import numpy as np a=[[1],[2],[3]] b=[[1],[2],[3]] c=[[1],[2],[3]] d=[[1],[2],[3]] print(np.hstack((a,b,c,d))) 输出: [[1 1 1 1] [2 2 2 2] [3 3 3 3]]
svm_loss_naive(W, X, y, reg):W为权重,X为图片数据,y为标签,reg为正则化强度(regularization strength),返回值中gradient是梯度值,形状与W相同。
cell 16:利用验证集去调节超参数(正则化参数和学习率)。
SVM梯度计算理解:
对上式求导dL/dw,j=yi时前面一项不存在了,j的规定中没有这一项,所以后一项对wyi求导剩下-xi,j≠yi时,对wj求导就是xi。
Softmax
Softmax梯度计算理解:
参见:https://blog.csdn.net/pjia_1008/article/details/66972060#commentsedit
参见:https://blog.csdn.net/yc461515457/article/details/51924604
其中第一个博客,当j!=yi时,分子应为exp(fj)。
Neural Network
思路参见:https://blog.csdn.net/lhppom/article/details/79595868
np.arange():
一个参数 默认起点0,步长为1。a = np.arange(3) 输出:[0 1 2]。
grads['b2'] = np.sum(dscores, axis = 0)/N:
这里的除于N和上式W2的除于N是因为最后的损失是各个损失的和除于N,有求导项1/N