参考此链接,侵删
pytorch官方的init详解
1. 均匀分布
torch.nn.init.uniform_(tensor, a=0, b=1) # 服从~U(a,b)
2. 正态分布
torch.nn.init.normal_(tensor, mean=0, std=1) # 服从~N(mean,std)N(mean, std)N(mean,std)
3. 初始化为常数
torch.nn.init.constant_(tensor, val) # 初始化整个矩阵为常数val
4. Xavier
基本思想是通过网络层时,输入和输出的方差相同,包括前向传播和后向传播。
初始化会出现的问题:
对于Xavier初始化方式,pytorch提供了uniform和normal两种:
torch.nn.init.xavier_uniform_(tensor, gain=1) 均匀分布 ~ U(−a,a)
torch.nn.init.xavier_normal_(tensor, gain=1) 正态分布~N(0,std)
5. kaiming (He initialization)
pytorch也提供了两个版本:
torch.nn.init.kaiming_uniform_(tensor, a=0, mode=‘fan_in’, nonlinearity=‘leaky_relu’), 均匀分布 ~ U(−bound,bound)
torch.nn.init.kaiming_normal_(tensor, a=0, mode=‘fan_in’, nonlinearity=‘leaky_relu’), 正态分布~ N(0,std)
两函数的参数:
6. 正交初始化(Orthogonal Initialization)
主要用以解决深度网络下的梯度消失、梯度爆炸问题,在RNN中经常使用的参数初始化方法。
torch.nn.init.orthogonal_(tensor, gain=1) # 使得tensor是正交的
7. 单位矩阵初始化
torch.nn.init.eye_(tensor) # 将二维tensor初始化为单位矩阵(the identity matrix)
8. 稀疏初始化
torch.nn.init.sparse_(tensor, sparsity, std=0.01)
- 从正态分布N~(0. std)中进行稀疏化,使每一个column有一部分为0
- sparsity- 每一个column稀疏的比例,即为0的比例
将训练集中某一列数值特征(假设是第i列)的值缩放到0和1之间。
将训练集中某一列数值特征(假设是第i列)的值缩放成均值为0,方差为1的状态。如下所示:
标准化之后,数据的范围并不一定是0-1之间,数据不一定是标准正态分布,因为标准化之后数据的分布并不会改变,如果数据本身是正态分布,那进行标准化之后就是标准正态分布。
进一步明确二者含义归一化和标准化的相同点都是对某个特征(column)进行缩放(scaling)而不是对某个样本的特征向量(row)进行缩放。对特征向量进行缩放是毫无意义的(暗坑1) 比如三列特征:身高、体重、血压。每一条样本(row)就是三个这样的值,对这个row无论是进行标准化还是归一化都是好笑的,因为你不能将身高、体重和血压混到一起去!
在线性代数中,将一个向量除以向量的长度,也被称为标准化,不过这里的标准化是将向量变为长度为1的单位向量,它和我们这里的标准化不是一回事儿,不要搞混哦(暗坑2)。
好处
在机器学习中,标准化是更常用的手段,归一化的应用场景是有限的。
如果你不用正则,那么,标准化并不是必须的,如果你用正则,那么标准化是必须的。
PCA链接,侵删
知乎大佬讲解,侵删
侵删
将多个弱分类器进行合理的结合,使其成为一个强分类器。
大佬链接,侵删
在pytorch附带的模型中我们可以选择预训练模型。预训练模型即模型中的权重参数都被训练好了,在构造模型后读取模型权重即可。
但是有些东西需要注意:
平常输入的图像大部分都是三通道RGB彩色图像,数据范围大部分都是[0-255],也就是通常意义上的24-bit图(RGB三通道各8位)。
在pytorch的官方介绍中也提到了,pytorch使用的预训练模型搭配的数据必须是:
格式化(Normalization)
在一组图中,每个图像的像素点首先减去所有图像均值的像素点,然后再除以标准差。这样可以保证所有的图像分布都相似,也就是在训练的时候更容易收敛,也就是训练的更快更好了。
这个函数强调的是把数据的方差和均值调整为1和0,具体数据落在哪个区间不重要,因为to tesor已经把数据落在0、1区间了,我试验了一下,在0、1区间内,任意调整数据,标准差是1和均值是0,最终数据都在-2~2之间。
有一个例子可以看一下,侵删
这种编码方式实现了两个重要目标:
1.任何一个字符编码,都不是其他字符编码的前缀。
2.信息编码的总长度最小。
总结:
参考链接
ROC (Receiver Operating Characteristic) 曲线和 AUC (Area Under the Curve)(Area Under theCurve) 值常被用来评价一个二值分类器 (binary classifier) 的优劣。
几乎我所知道的所有评价指标,都是建立在混淆矩阵基础上的,包括准确率、精准率、召回率、F1-score,当然也包括AUC。
对于某个二分类分类器来说,输出结果标签(0还是1)往往取决于输出的概率以及预定的概率阈值。
实际上,这种阈值的选取也一定程度上反映了分类器的分类能力。我们当然希望无论选取多大的阈值,分类都能尽可能地正确,也就是希望该分类器的分类能力越强越好,一定程度上可以理解成一种鲁棒能力吧。
为了形象地衡量这种分类能力,ROC曲线横空出世
横轴:False Positive Rate(假阳率,FPR)
假阳率,简单通俗来理解就是预测为正样本但是预测错了的可能性,显然,我们不希望该指标太高。
纵轴:True Positive Rate(真阳率,TPR)
真阳率,则是代表预测为正样本但是预测对了的可能性,当然,我们希望真阳率越高越好。
ROC曲线的横纵坐标都在[0,1]之间
特性
于是,我们可以得到基本的结论:ROC曲线在斜对角线以下,则表示该分类器效果差于随机分类器,反之,效果好于随机分类器,当然,我们希望ROC曲线尽量除于斜对角线以上,也就是向左上角(0,1)凸。
ROC曲线一定程度上可以反映分类器的分类效果,但是不够直观,我们希望有这么一个指标,如果这个指标越大越好,越小越差,于是,就有了AUC。AUC实际上就是ROC曲线下的面积。AUC直观地反映了ROC曲线表达的分类能力。
转自该网站,侵删
这个比较简单,侵删
集成学习:
集成学习是一种机器学习范式。在集成学习中,我们会训练多个模型(通常称为「弱学习器」)解决相同的问题,并将它们结合起来以获得更好的结果。最重要的假设是:当弱模型被正确组合时,我们可以得到更精确和/或更鲁棒的模型。
集成方法的思想是通过将这些弱学习器的偏置和/或方差结合起来,从而创建一个「强学习器」(或「集成模型」),从而获得更好的性能。
在集成学习理论中,我们将弱学习器(或基础模型)称为「模型」,这些模型可用作设计更复杂模型的构件。在大多数情况下**,这些基本模型本身的性能并不是非常好,这要么是因为它们具有较高的偏置(例如,低自由度模型),要么是因为他们的方差太大导致鲁棒性不强(例如,高自由度模型)。**
集成方法的思想是通过将这些弱学习器的偏置和/或方差结合起来,从而创建一个「强学习器」(或「集成模型」),从而获得更好的性能。
非常粗略地说,我们可以说 bagging 的重点在于获得一个方差比其组成部分更小的集成模型,而 boosting 和 stacking 则将主要生成偏置比其组成部分更低的强模型(即使方差也可以被减小)。
集成学习的分类:
Boosting
Boosting原理:Boosting是一族可将弱学习器提升为强学习器的算法,先用初始训练集训练出一个基分类器,然后,重新对所有样本的权重进行调整,使得当前基分类器分错的样本格外收到关注,根据当前基分类器的预测误差设置当前基分类器的权重。然后,将权重调整后的样本重新训练基分类器,逐步重复上述过程,直到达到指定次数,最终将多个基分类器的预测结果加权结合。
Bagging
Bagging是并行式集成学习方法的代表。该方法采用bootstrap随机重采样方法构成若干训练子集,对每个训练子集构建基分类器,再将这些基分类器的输出结果采用简单投票法进行结合。
这个更简单,侵删