机器学习
目录
2. 协同过滤算法(Collaborative Filtering, CF)
线性回归和逻辑回归
https://blog.csdn.net/jiaoyangwm/article/details/81139362
线性回归
表达式:
向量形式:
损失函数(平方损失函数):
梯度下降更新参数:
添加正则化的损失函数:
逻辑回归
通过sigmoid函数映射线性回归函数结果:
用sigmoid函数原因:
① 可以将结果,映射到之间,作为概率。
② 可以将作为决策边界。
③ 数学特性好,求导容易。
损失函数:
梯度下降更新参数:
正则化:
逻辑回归用似然估计(对数似然函数)作为损失函数原因:
1. 逻辑回归的平方损失函数不是关于分布参数θ的凸函数,求解过程中,会得到局部最优,不容易求解全局最优θ。逻辑回归的对数似然函数是关于θ的凸函数,且有最大值。
2. 最小二乘法只是让预测值和观测值更拟合,而最大似然估计是保证计算出的特征值发生的概率正确率最大化,最大似然更满足逻辑回归。
为什么要用log:样本集中有很多样本,要求其概率连乘,概率为(0,1)间的数,连乘越来越小,利用log变换将其变为连加,不会溢出,不会超出计算精度。
若要求多元分类,就要把sigmoid换成大名鼎鼎的softmax了。
LR与SVM对比:
相同点:
1. 都是监督的分类算法;
2. 都是线性分类方法(不考虑核函数时);
3. 都是判别模型。
不同点:
1. 损失函数不同,LR是对数损失函数,SVM是hinge损失函数(合叶损失函数);
2. SVM不能产生概率,LR可以产生概率;
3. SVM自带结构风险最小化,LR则是经验风险最小化;
4. SVM只考虑分类面附近的局部点,即支持向量,LR则考虑所有的点,与分类面距离较远的点也起作用,虽然作用较小;
常见的激活函数
https://www.cnblogs.com/lliuye/p/9486500.html
sigmoid函数:输入为实数范围,通过非线性映射到0~1之间作为概率,1/2作为决策边界。
导数:
缺点:1. 输入非常大或非常小时,导数接近0,导致梯度消失;2. 输出不是以0为均值,不便于下层的计算。
tanh函数:输入为实数范围,通过非线性映射到-1~1之间,均值为0。
导数:
缺点:输入非常大或非常小时,导数接近0,导致梯度消失。
ReLU函数:又称修正线性单元,是一种分段线性函数,弥补了sigmoid函数梯度消失问题,计算速度快。
缺点:当输入为负时,梯度为0,产生梯度消失。
Leaky ReLU函数:又称PReLU函数,解决了ReLU函数在负值输入产生梯度消失问题。
Softmax函数:用于多分类问题,将多个神经元的输出映射到(0,1)区间内,并且这些值的累计和为1。
缺点:类与类之间是互斥的,无法分析出类之间的包含关系。
主成分分析(PCA)原理
https://blog.csdn.net/program_developer/article/details/80632779
降维目的:
- 使得数据集更易使用。
- 降低算法的计算开销。
- 去除噪声。
- 使得结果容易理解。
PCA算法两种实现方法
1. 基于特征值分解协方差矩阵实现PCA算法
1)去平均值(即去中心化),每个特征减去各自的平均值;
2)计算协方差矩阵;
3)用特征值分解方法求协方差矩阵的特征值与特征向量;
4)对特征值从大到小排序,选择其中最大的k个。然后对应的k个特征向量分别作为行向量组成特征向量矩阵P;
5)将数据转换到k个特征向量构建的新空间中,即。
2. 基于SVD分解协方差矩阵实现PCA算法
1)去平均值,即每个特征减去各自的平均值;
2)计算协方差矩阵;
3)通过SVD计算协方差矩阵的特征值与特征向量;
4)对特征值从大到小排序,选择其中最大的k个。然后对应的k个特征向量分别作为行向量组成特征向量矩阵;
5)将数据转换到k个特征向量构建的新空间中。
SVD好处:a. 不用求出协方差矩阵也能求右奇异矩阵,在样本量很大的时候更有效;SVD分解协方差矩阵实现PCA可以得到两个方向的PCA降维(即行和列两个方向)
线性判别分析(LDA)和PCA不同点:
1. 出发思想不同。PCA主要是从特征的协方差角度,去找到比较好的投影方式,即选择样本点投影具有最大方差的方向;而LDA则更多的是考虑了分类标签信息,寻求投影后不同类别之间数据点距离更大化以及同一类别数据点距离最小化,即选择分类性能最好的方向。
2. 学习模式不同。PCA属于无监督式学习,因此大多场景下只作为数据处理过程的一部分,需要与其他算法结合使用,例如将PCA与聚类、判别分析、回归分析等组合使用;LDA是一种监督式学习方法,本身除了可以降维外,还可以进行预测应用,因此既可以组合其他模型一起使用,也可以独立使用。
3. 降维后可用维度数量不同。LDA降维后最多可生成C-1维子空间(分类标签数-1),因此LDA与原始维度N数量无关,只有数据标签分类数量有关;而PCA最多有n维度可用,即最大可以选择全部可用维度。
LDA局限性
- 当样本数量远小于样本的特征维数,样本与样本之间的距离变大使得距离度量失效,使LDA算法中的类内、类间离散度矩阵奇异,不能得到最优的投影方向,在人脸识别领域中表现得尤为突出;
- LDA不适合对非高斯分布的样本进行降维;
- LDA在样本分类信息依赖方差而不是均值时,效果不好;
- LDA可能过度拟合数据;
坐标轴下降法
https://www.cnblogs.com/pinard/p/6018889.html
坐标轴下降法和梯度下降法比较:
a) 坐标轴下降法在每次迭代中在当前点处沿一个坐标方向进行一维搜索 ,固定其他的坐标方向,找到一个函数的局部极小值。而梯度下降总是沿着梯度的负方向求函数的局部最小值。
b) 坐标轴下降优化方法是一种非梯度优化算法。在整个过程中依次循环使用不同的坐标方向进行迭代,一个周期的一维搜索迭代过程相当于一个梯度下降的迭代。
c) 梯度下降是利用目标函数的导数来确定搜索方向的,该梯度方向可能不与任何坐标轴平行。而坐标轴下降法法是利用当前坐标方向进行搜索,不需要求目标函数的导数,只按照某一坐标方向进行搜索最小值。
d) 两者都是迭代方法,且每一轮迭代,都需要O(mn)的计算量(m为样本数,n为系数向量的维度)
标准方程法
https://blog.csdn.net/zoe9698/article/details/82419330?utm_source=blogxgwz8
梯度下降与正规方程的比较
梯度下降 | 正规方程 |
需要设置学习率 | 不需要学习率 |
需要多次迭代逼近最优解 | 一次运算得出最优解 |
当特征数量较大时也能较好适用 | 特征数量不宜过大 |
适合各种模型 | 只适用于线性模型 |
特征选择
https://blog.csdn.net/zhenaoxi1077/article/details/82791281
过滤法
按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。
方差选择法:计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。
相关系数法:计算特征对目标值的相关系数以及显著水平P值。先考虑P值越小越显著,然后再看相关系数越高两者关系越密切。
卡方检验:通过建立假设检验,计算观测值与期望值的差距,构建统计量。
互信息法:经典的互信息也是评价定性自变量对定性因变量的相关性的。
信息增益:在信息增益中,重要性的衡量标准就是看特征可以为分类系统带来多少信息,带来的信息越多,该特征越重要。
包装法
根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。
递归消除特征法:使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。
嵌入法
使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。
基于惩罚项的特征选择法:使用带惩罚项的基模型,除了筛选出特征外,同时也进行了降维。
基于树模型的特征选择法:树模型中GBDT也可用来作为基模型进行特征选择。
特征组合
特征组合是指两个或多个特征相乘形成的合成特征。特征的相乘组合可以提供超出这些特征单独能够提供的预测能力。
对非线性规律进行编码:特征组合是指通过将两个或多个输入特征相乘来对特征空间中的非线性规律进行编码的合成特征。
通过创建一个特征组合可以解决非线性问题。
组合独热矢量:将独热特征矢量的特征组合视为逻辑连接,根据多个特征构建特征组合,最终获得的预测能力将远远超过任一特征单独的预测能力。
过拟合常见解决方法
https://blog.csdn.net/weixin_37933986/article/details/69681671
过拟合产生原因:
1. 假设(模型)过于复杂 2. 数据存在很多噪音 3. 数据规模太小
解决过拟合的常用方法:
1. early stopping 2. 数据集扩增
3. 正则化
正则化可以控制权值的搜索范围,保证模型的稳定性。
4. Dropout
相当于bagging的思想,通过屏蔽某些神经元的方式构建出多个子网络,最后预测结果相当于基于投票策略得出。
5.BN(https://blog.csdn.net/wfei101/article/details/79997708)
BN使一个batch中的所有样本关联在一起,因此网络不会从某一个训练样本中生成确定的结果。同样一个样本不再仅仅取决于样本本身,也取决于同一个batch中的其他样本,同一个样本跟不同样本组成的不同batch,它的输出是不同的,相当于一种数据增强,缓解了过拟合现象。
常见的集成模型
https://blog.csdn.net/cqlboat/article/details/81072706
https://blog.csdn.net/moledyzhang/article/details/79498520
Bagging:首先,我们创建随机训练数据集样本(训练数据集的子集)。然后我们为每个样本建立分类器。最后,这些多分类器的结果将结合起来,使用平均或多数投票。Bagging有助于降低方差。
Boosting(AdaBoost): 首先对原始数据集进行分类,并给每个观测给予同样的权重。如果第一个学习模块错误预测了类,那么将会赋予错误分类观测较高的权重。这个过程将反复迭代,不断添加分类学习模块,直到达到模型数量或者某个准确度。Boosting有比Bagging更好的预测精准度,但它有时也会过度拟合训练数据。
Stacking: 是一种分层模型集成框架。以两层为例,第一层由多个基学习器组成,其输入为原始训练集,第二层的模型则是以第一层基学习器的输出作为训练集进行再训练,从而得到完整的stacking模型来降低泛化误差。
随机森林:随机选取特征和样本构建多个决策树模型。它能处理很高纬度的数据,并且不用做特征选择;在训练完后,它能够给出重要性较高的feature;可以进行可视化操作;容易做成并行化方法,速度比较快。在某些噪音较大的分类或回归问题上会出现过拟合现象,对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。
GBDT:
时间复杂度:(n表示样本数,m表示特征数,k表示树深度)
梯度提升树是依据损失函数选取最佳分裂点,然后利用损失函数的负梯度作为提升树算法中的残差的近似值,作为下一颗树的真实值,以此类推迭代训练得到最终学习器。
https://blog.csdn.net/zpalyq110/article/details/79527653
https://github.com/Freemanzxp/GBDT_Simple_Tutorial/blob/master/example.py
1) 初始化弱学习器:;
2) 计算负梯度,即残差:;
3) 将上步得到的残差作为样本新的真实值,并将数据作为下棵树的训练数据,得到一颗新的回归树其对应的叶子节点区域为;
4) 计算最佳拟合值:;
5) 更新强学习器:;
6) 最终学习器:。
XGBoost:
极端梯度提升由很多CART回归树集成,它是大规模并行boosted tree的工具,XGBoost 所应用的算法就是 GBDT的改进,既可以用于分类也可以用于回归问题。
https://www.cnblogs.com/zongfa/p/9324684.html
https://blog.csdn.net/han_xiaoyang/article/details/52665396 (参数调优)
损失函数:(K为树的总数,表示第k颗树,表示样本的预测结果)
正则项:
分裂策略和节点预测值的依据是误差函数二次最优化,损失函数通过泰勒展开,得到近似的二次函数。
泰勒展开式:
,,,
对求偏导:,,
(括号中分别为左子树分数、右子树分数、不分割分数)
XGBoost特点:
1. 是最优化求出来的; 2. 正则化防止过拟合; 3. 支持自定义loss function; 4. 支持并行化;
5. 具有针对稀疏数据的算法; 6. 可实现预剪枝; 7. shrinkage; 8. 支持设置样本权重。
stacking和blending区别:
https://blog.csdn.net/u010412858/article/details/80785429
1. Blending比stacking简单
2. 避开了一个信息泄露问题:generlizers和stacker使用了不一样的数据集
3. blending在团队建模过程中,不需要给队友分享自己的随机种子
4.blender可能会过拟合
5.stacking使用多次的CV会更稳健
bagging和boosting区别:
1)样本选择上:
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
2)样例权重:
Bagging:使用均匀取样,每个样例的权重相等
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
3)预测函数:
Bagging:所有预测函数的权重相等。
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
4)并行计算:
Bagging:各个预测函数可以并行生成,模型之间互不相关。
Boosting:各个预测函数只能串行生成,因为后一个模型参数需要前一轮模型的结果。
5)提高模型性能方式:
bagging是通过减少模型方差提高性能;boosting是通过减少模型偏差提高性能。
由于bagging各模型之间相似度高,方差和偏差基本相同。
偏差:
方差:
而boosting通过贪心法最小化损失函数,因此偏差会逐步下降。但由于模型之间是强相关的,因此方差无法得到显著改善。
偏差:
方差:
GBDT和adaboost区别:
它们都属于boosting提升方法,AdaBoost 是通过提升错分数据点的权重来定位模型的不足,而Gradient Boosting是通过计算负梯度来定位模型的不足。
随机森林和GBDT的区别:
1. 随机森林采用的bagging思想,而GBDT采用的boosting思想。Bagging采用有放回的均匀取样,而Boosting根据错误率来取样,因此Boosting的分类精度要优于Bagging。
2. Bagging的训练集的选择是随机的,各训练集之间相互独立,弱分类器可并行,而Boosting的训练集的选择与前一轮的学习结果有关,是串行的。
3. 对于最终的输出结果而言,随机森林采用多数投票等;而GBDT则是加权求和。
4. 随机森林对异常值不敏感;GBDT对异常值非常敏感。
5. 随机森林参数相对更容易调试,这是由于随着所包含的决策树的个数增加,其预测效果一般是单调的向好的方向变。而GBDT则不同,一开始预测表现会随着树的数目增大而变好,但是到一定程度之后,反而会随着树的数目增加而变差。
6. 随机森林是通过减少模型方差提高性能;GBDT是通过减少模型偏差提高性能。
GBDT和XGBoost的区别:
https://www.cnblogs.com/jiangxinyang/p/9248154.html
1)将树模型的复杂度加入到正则项中,来避免过拟合,因此泛化性能会优于GBDT。
2)损失函数是用泰勒展开式展开的,同时用到了一阶导和二阶导,可以加快优化速度。
3)相比GBDT只支持CART作为基分类器之外,还支持线性分类器,在使用线性分类器的时候可以使用L1,L2正则化。
4)引进了特征子采样,像RandomForest那样,这种方法既能降低过拟合,还能减少计算。
5)在寻找最佳分割点时,考虑到传统的贪心算法效率较低,实现了一种近似贪心算法,用来加速和减小内存消耗,除此之外还考虑了稀疏数据集和缺失值的处理,对于特征的值有缺失的样本,XGBoost依然能自动找到其要分裂的方向。
6)XGBoost支持并行处理,XGBoost的并行不是在模型上的并行,而是在特征上的并行,将特征列排序后以block的形式存储在内存中,在后面的迭代中重复使用这个结构。这个block也使得并行化成为了可能,其次在进行节点分裂时,计算每个特征的增益,最终选择增益最大的那个特征去做分割,那么各个特征的增益计算就可以开多线程进行。
LightGBM和XGBoost区别
https://blog.csdn.net/weixin_38664232/article/details/88969341
基于树模型的boosting算法,很多算法比如xgboost都是用预排序(pre-sorting)算法进行特征的选择和分裂
LightGBM采用HistoGram算法,其思想是将连续的浮点特征离散成k个离散值,并构造宽度为k的Histogram。然后遍历训练数据,计算每个离散值在直方图中的累计统计量。在进行特征选择时,只需要根据直方图的离散值,遍历寻找最优的分割点。
区别:
- 切分算法不同(HistoGram和pre-sorting)
- 占用的内存更低,只保存特征离散化后的值,而这个值一般用8位整型存储就足够了,内存消耗可以降低为原来的1/8
- LightGBM直接支持类别特征
- 决策树生长策略不同
常见缺失值处理方法
https://blog.csdn.net/w352986331qq/article/details/78639233
1. 删除
(1) 简单删除法
(2) 权重法
2. 填补
1. 人工填写 2. 特殊值填充 3. 均值填充 4. 热卡填充 5. 聚类填充
6. 使用所有可能的值填充 7. 组合完整化方法 8. 回归 9. 极大似然估计 10. 多重插补
岭回归、LASSO回归、弹性网络
https://blog.csdn.net/u014005758/article/details/88980711
正则化L1、L2的区别
https://blog.csdn.net/jinping_shi/article/details/52433975
1. L1是模型各个参数的绝对值之和;L2是模型各个参数的平方和。
2. L1会趋向于产生少量的特征,而其他的特征都是0; L2会选择更多的特征,这些特征都会接近于0。
L1范数符合拉普拉斯分布,是不完全可微的。表现在图像上会有很多角出现。这些角和目标函数的接触机会远大于其他部分。就会造成最优值出现在坐标轴上,因此就会导致某一维的权重为0 ,产生稀疏权重矩阵,进而防止过拟合。
L2范数符合高斯分布,是完全可微的。和L1相比,图像上的棱角被圆滑了很多,一般最优值不会在坐标轴上出现。在最小化正则项时,可以是参数不断趋向于0,最后获得很小的参数。
常见的评价指标(准确率、召回率、F值)
https://blog.csdn.net/mousever/article/details/48622163
准确率和召回率是广泛用于信息检索和统计学分类领域的两个度量值,用来评价结果的质量。其中精度是检索出相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率;召回率是指检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率。
正确率 = 提取出的正确信息条数 / 提取出的信息条数
召回率 = 提取出的正确信息条数 / 样本中的信息条数
F值 = (1+a^2) * 正确率 * 召回率 / (a * (正确率 + 召回率) )(F 值即为正确率和召回率的调和平均值)
BP神经网络
https://blog.csdn.net/ACdreamers/article/details/44657439
1. 信号正向传播
2. 误差反向传播
输出层的局部梯度: (输出节点误差与输出层激活函数导数的乘积)
隐含层和输入层局部梯度:(后一层局部梯度与权重的加权和,并与中间层激活函数导数相乘)
权重更新量:(学习率*局部梯度*前一层输出值)
决策树(ID3、C4.5、CART)
https://blog.csdn.net/choven_meng/article/details/82878018
信息熵:
条件熵:
信息增益:
信息增益表示由于特征A使得对数据集D的分类的不确定性减少的程度。
根据信息增益准则的特征选择方法是:对训练数据集D,计算其每个特征的信息增益,并比较它们的大小,选择信息增益最大的特征。
缺点: 信息增益偏向取值较多的特征
原因: 当特征的取值较多时,根据此特征划分更容易得到纯度更高的子集,因此划分之后的熵更低,由于划分前的熵是一定的,因此信息增益更大,因此信息增益比较 偏向取值较多的特征。
信息增益率:
信息增益比本质: 是在信息增益的基础之上乘上一个惩罚参数。特征个数较多时,惩罚参数较小;特征个数较少时,惩罚参数较大。
惩罚参数: 数据集D以特征A作为随机变量的熵的倒数,即:将特征A取值相同的样本划分到同一个子集中(之前所说数据集的熵是依据类别进行划分的)。
缺点: 信息增益比偏向取值较少的特征
原因: 当特征取值较少时HA(D)的值较小,因此其倒数较大,因而信息增益比较大。因而偏向取值较少的特征
使用信息增益比: 基于以上缺点,并不是直接选择信息增益率最大的特征,而是现在候选特征中找出信息增益高于平均水平的特征,然后在这些特征中再选择信息增益率最高的特征。
ID3算法:
ID3算法的核心是在决策树各个节点上应用信息增益准则选择特征,递归的构建决策树。具体方法是:从根结点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归的调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止。ID3相当于用极大似然法进行概率模型的选择。
ID3算法的缺点:
(1)不能对连续数据进行处理,只能通过连续数据离散化进行处理;
(2)采用信息增益进行数据分裂容易偏向取值较多的特征,准确性不如信息增益率;
(3)缺失值不好处理。
(4)没有采用剪枝,决策树的结构可能过于复杂,出现过拟合。
C4.5算法:
C4.5算法用信息增益率选择特征,在树的构造过程中会进行剪枝操作优化,能够自动完成对连续属性的离散化处理;C4.5算法在选择分割属性的时候选择信息增益率最大的属性。
优缺点:
优点:产生的规则易于理解;准确率较高;实现简单;
缺点: 对数据进行多次顺序扫描和排序,效率较低;只适合小规模数据集,需要将数据放到内存中。
CART算法:
分类与回归树(classification and regression tree, CART)既可以用于回归也可以用于分类。使用二元切分法来处理连续型数值。使用基尼系数作为数据纯度的量化指标构建决策树。
对回归树用平方误差最小化准则,对分类树用基尼指数最小化准则
基尼系数:
朴素贝叶斯的三个常用模型
https://blog.csdn.net/abcd1f2/article/details/51249702
贝叶斯公式(假设特征相互独立):(A表示特征,B表示类别)
朴素贝叶斯公式:
简化(对于所有分母总相同):
优点:1. 算法逻辑简单,容易实现;2. 分类过程中时空开销小。
缺点:实际过程中假设往往不成立,属性之间相关性越大,分类误差也就越大。
常用模型:高斯分布型(用于分类,假定特征服从正态分布),多项式型(离散值模型),伯努利型(二分模型);
聚类算法
https://blog.csdn.net/leonliu1995/article/details/78944798
Kmeans:
优点:算法简单,运行较快,适用于非常大型的数据集。
缺点:需要规定分类数,对初始值敏感,对于特殊分布的数据集不能够得出合理的结果。
密度聚类(DBSCAN):
优点:
可以解决数据分布特殊的情况;对于噪声不敏感;速度较快,可适用于较大的数据集;与初始值无关;不需要指定簇个数。
缺点:
簇之间密度差距过大时效果不好;数据集较大的时候消耗内存;对于高维数据距离的计算会比较麻烦,造成“维数灾难”。
层次聚类:
最开始的时候将所有数据点本身作为簇,然后找出距离最近的两个簇将它们合为一个,不断重复以上步骤直到达到预设的簇的个数。
SVM介绍
https://blog.csdn.net/v_july_v/article/details/7624837
是一种二分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。
函数间隔:
几何间隔:
(将和按比例改变为和,函数间隔变为,函数间隔的这一改变对最优化问题没有影响,所以取为1方便后续推导)
原问题:
对偶问题:
为什么要从原始问题转换成对偶问题的总结:
1. 对偶问题将原始问题中的约束转为了对偶问题中的等式约束
2. 方便核函数的引入
3. 改变了问题的复杂度。由求特征向量w转化为求比例系数a,在原始问题下,求解的复杂度与样本的维度有关,即w的维度。在对偶问题下,只与样本数量有关。
4. 求解更高效,因为只用求解alpha系数,而alpha系数只有支持向里才非0,其它全部为0。
松弛变量和惩罚因子
https://www.jianshu.com/p/8a499171baa9
核函数
计算两个向量在隐式映射过后的空间中的内积的函数叫做核函数,避开了直接在高维空间中进行计算,在原始空间计算内积,将模型分类效果表现在高维上。
常见的核函数:
高斯核函数:能将原始空间映射为无穷维空间
优点:可以把特征映射到无限维,没有多项式计算那么困难,参数比较好选择
缺点:不容易解释,计算速度比较慢,容易过拟合
多项式核函数:
优点:可以拟合出复杂的分割超平面
缺点:参数太多,不易选择
线性核函数:
优点:简单高效
缺点:只适用线性可分的数据集
sigmoid核函数:
数据不平衡问题:
https://www.cnblogs.com/charlotte77/p/10455900.html
1. 从数据角度:
主动获取:获取更多的少量样本数据
算法采样:上采样、下采样、生成合成数据
改变权重:设定惩罚因子,设置样本的权重
数据增强:加噪音增强模型鲁棒性
2. 从评价指标角度:对于数据极端不平衡时,可以观察观察不同算法在同一份数据下的训练结果的不同指标。这样做有两个好处,一是可以了解不同算法对于数据的敏感程度,二是可以明确采取哪种评价指标更合适.
3. 从算法角度:
选择对数据倾向相对不敏感的算法
集成学习
将任务转换成异常检测问题
ROC曲线(AUC指标)、PR曲线
真实值 | 预测值 | |
正例 | 反例 | |
正例 | TP | FN |
反例 | FP | TN |
正确的正样本率(越高越好):
错误的正样本率(越低越好):
截断点:区分正负的阈值
ROC曲线:显示的是分类器的真正率和假正率的关系
AUC指标:AUC值是一个概率值,当你随机挑选一个正样本以及负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值,AUC值越大,当前分类算法越有可能将正样本排在负样本前面,从而能够更好地分类。
(解释:https://www.cnblogs.com/van19/p/5494908.html)
AUC计算:
PR曲线:表现的是准确率和召回率的关系
AP指标:
MAP指标:
ROC曲线和PR曲线比较:
https://blog.csdn.net/weixin_31866177/article/details/88776718
PR和ROC在面对不平衡数据时的表现是不同的。在数据不平衡时,PR曲线是敏感的,随着正负样本比例的变化,PR会发生强烈的变化。而ROC曲线是不敏感的,其曲线能够基本保持不变。
ROC的面对不平衡数据的一致性表明其能够衡量一个模型本身的预测能力,而这个预测能力是与样本正负比例无关的。但是这个不敏感的特性使得其较难以看出一个模型在面临样本比例变化时模型的预测情况。而PRC因为对样本比例敏感,因此能够看出分类器随着样本比例变化的效果,而实际中的数据又是不平衡的,这样有助于了解分类器实际的效果和作用,也能够以此进行模型的改进。
综上,在实际学习中,我们可以使用ROC来判断两个分类器的优良,然后进行分类器的选择,然后可以根据PRC表现出来的结果衡量一个分类器面对不平衡数据进行分类时的能力,从而进行模型的改进和优化。
多标签分类评价指标
海明损失:该指标衡量了预测所得标记与样本实际标记之间的不一致程度,即样本具有标记y但未被识别出,或不具有标记y却别误判的可能性。
1-错误率:用来评估在输出结果中排序第一的标签并不属于实际标签集中的概率。
覆盖率:用于计算在整个测试文件集中,实际分类标签在预测分类标签中的最大rank值的平均值。
排序损失:表示有多少不相关的标签排序高于相关的标签。用来表示在结果排序中,不属于相关标签集中的项目被排在了属于相关标签集中项目的概率的平均。
RNN理解:
https://blog.csdn.net/qq_32241189/article/details/80461635
Xt:表示t时刻的输入,ot:表示t时刻的输出,St:表示t时刻的记忆
正向传播:
反向传播(交叉熵损失函数,输出层的激活函数为softmax,隐藏层的激活函数为tanh):
改进:1. 双向RNN; 2. 深层RNN
缺点:梯度消失、长期信息记忆能力表现差
LSTM理解:
https://www.jianshu.com/p/ee2aaa991641?from=timeline&isappinstalled=0
遗忘门:
输入门:
更新细胞状态:
输出门:
LSTM如何缓解RNN梯度消失问题:
https://www.cnblogs.com/Elaine-DWL/p/11240213.html
https://blog.csdn.net/hx14301009/article/details/80401227
RNN的反向传播公式:
记忆更新:
因此每一个Sj对Sj-1的偏导都等于tanh’(...)*w,tanh的梯度最大只能是1,而更多时候都是趋近于0的饱和状态,所以连乘后会使得梯度很快消失。
为什么不换成ReLU:将tanh换成ReLU,最后计算的结果会变成多个W连乘,如果W中存在特征值>1的,那么经过BPTT连乘后得到的值会爆炸,产生梯度爆炸的问题,使得RNN仍然无法传递较远距离。
LSTM的反向传播公式:
记忆更新:
因此每一个Cj对Cj-1包括两部分,前一部分是遗忘门的值,其取值接近于1,因此连乘后能缓解梯度消失。
总结:对于RNN来说,前后两个step的hidden state中间经过了一层sigmoid,所以后向传播的时候梯度会乘上一个sigmoid的导数值;对于LSTM来说,前后两个step的hidden cell没有经过一个sigmoid层,而是乘了一个sigmoid的函数值 / 激活值(即LSTM的forget gate),所以后向传播的时候梯度也会乘上一个sigmoid的函数值。也就是说,RNN在后向的时候梯度是不断乘以sigmoid的导数值,LSTM在后向的时候梯度是不断乘以sigmoid的函数值,前者大概率趋向于零,而后者只是小概率情况,因此缓解了梯度消失问题。
GRU理解:
https://www.cnblogs.com/jiangxinyang/p/9376021.html
更新门:
重置门:
CNN理解:
CNN中卷积层参数量与输出特征图尺寸的计算公式:
卷积层输入特征图的尺寸为:(输入特征图的高、宽和通道数)
卷积层的参数:
1. 输出通道数为
2. 正方形卷积核的边长为
3. 步幅为
4. 补零的行数和列数为
深度学习常见的优化方法
1. SGD&BGD&Mini-BGD
https://www.cnblogs.com/GeekDanny/p/9655597.html
SGD:随机梯度下降,随机读入一个数据计算loss function的梯度来更新参数;
优点:收敛速度快,可实现在线更新;
缺点:容易陷入局部最优,难以并行;
BGD:批量梯度下降,读取整个数据集用于计算loss function的梯度来更新参数;
优点:当目标函数为凸函数时,BGD一定能够得到全局最优,可以实现并行;
缺点:数据处理量大,导致梯度下降慢,不能实时增加实例,在线更新,训练占内存;
Mini-BGD:小批量梯度下降,选取小批量数据计算loss function的梯度来更新参数;
SGD和BGD的折中方法,计算效率高而且收敛稳定,是现在深度学习的主流方法;
2. Momentum
在更新方向的时候保留之前的方向,增加稳定性而且还有摆脱局部最优的能力
当前梯度的方向与历史梯度一致(表明当前样本不太可能为异常点),则会增强这个方向的梯度,若当前梯度与历史梯方向不一致,则梯度会衰减。
3. nesterov
nesterov项在梯度更新时做一个校正,避免前进太快,同时提高灵敏度。
4. Adagrad
自适应梯度算法,Adagard在训练的过程中可以自动变更学习的速率,设置一个全局的学习率,而实际的学习率与以往的参数模和的开方成反比,适合处理稀疏梯度;
优点:前期较小,能够放大梯度,后期较大,能够约束梯度,适合处理稀疏梯度;
缺点:仍然依赖人工设置一个全局学习率,中后期容易使下降梯度趋于0,使得训练提前结束
5. Adadelta
Adadelta是对Adagrad的扩展,最初方案依然是对学习率进行自适应约束,但是进行了计算上的简化。 Adagrad会累加之前所有的梯度平方,而Adadelta只累加固定大小的项,并且也不直接存储这些项,仅仅是近似计算对应的平均值。
优点:不再依赖全局学习率;
6. RMSprop
也是一种自适应学习率方法。不同之处在于,Adagrad会累加之前所有的梯度平方,RMSprop仅仅是计算对应的平均值。
优点:缓解Adagrad算法学习率下降较快的问题,适合处理非平稳目标(对于RNN效果很好);
缺点:仍然依赖人工设置学习率;
7. Adam
本质上是带有动量项的RMSprop,Adam利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率,在经过偏置的校正后,每一次迭代后的学习率都有个确定的范围,使得参数较为平稳。
优点:
结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点;
对内存需求小;
为不同的参数计算不同的自适应学习率;
经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳;
8. Adamax
Adamax是Adam的一种变体,此方法对学习率的上限提供了一个更简单的范围。
9. Nadam
Nadam类似于带有Nesterov动量项的Adam。
10. 牛顿法和拟牛顿法
牛顿法是一种二阶收敛算法,所以它的收敛速度相较于一阶算法会更快。牛顿法二阶的意义在于它不仅会沿着梯度最大的方向下降,还会考虑走的下一步坡度是不是也很大,它能够以较远的目光全局的逼近目标函数。
缺点:每一步都需要求解复杂的Hessian矩阵,计算非常不易。
逆牛顿法核心思想是使用正定矩阵来近似Hessian矩阵的逆,从而简化了运算的复杂。另外,因为拟牛顿法不需要二阶导数的信息,所以现在拟牛顿法在机器学习实际问题中应用更加的广泛。
时间序列分析之AR、MA、ARMA和ARIMA模型
https://blog.csdn.net/frankiehello/article/details/80883147
自回归模型(AR)
移动平均模型(MA)
自回归移动平均模型(ARMA)
差分自回归移动平均模型(ARIMA)
先做若干次差分得到新的时间序列,再进行ARMA
推荐算法
https://blog.csdn.net/fyq201749/article/details/81026950
什么是推荐算法?
我们可以把它简化为一个函数。函数接受若干个参数,输出一个返回值。输入参数是用户和item的各种属性和特征,包括年龄、性别、地域、商品的类别、发布时间等等。经过推荐算法处理后,返回一个按照用户喜好度排序的item列表。
1. 基于流行度的算法
根据访问量(Page View, PV)、独立访客(Unique Visitor, UV)、日均PV或分享率等数据来按某种热度排序来推荐给用户。
这种算法的优点是简单,适用于刚注册的新用户。缺点也很明显,它无法针对用户提供个性化的推荐。基于这种算法也可做一些优化,比如加入用户分群的流行度排序,例如把热榜上的体育内容优先推荐给体育迷,把政要热文推给热爱谈论政治的用户。
2. 协同过滤算法(Collaborative Filtering, CF)
CF算法包括基于用户的CF(User-based CF)和基于物品的CF(Item-based CF)。
基于用户的CF原理如下:
- 分析各个用户对item的评价(通过浏览记录、购买记录等);
- 依据用户对item的评价计算得出所有用户之间的相似度;
- 选出与当前用户最相似的N个用户;
- 将这N个用户评价最高并且当前用户又没有浏览过的item推荐给当前用户。
基于物品的CF原理如下:
- 分析各个用户对item的浏览记录;
- 依据浏览记录分析得出所有item之间的相似度;
- 对于当前用户评价高的item,找出与之相似度最高的N个item;
- 将这N个item推荐给用户。
举例,基于用户的CF算法大致的计算流程如下:
首先我们根据网站的记录计算出一个用户与item的关联矩阵;
然后计算每两个用户之间的向量距离;
最后,我们要为用户推荐物品,则找出与用户相似度最高的N名其他用户评价的物品,去掉用户1评价过的物品,则是推荐结果。
CF算法确实简单,而且很多时候推荐也是很准确的。然而它也存在一些问题:
- 依赖于准确的用户评分;
- 在计算的过程中,那些大热的物品会有更大的几率被推荐给用户;
- 冷启动问题。当有一名新用户或者新物品进入系统时,推荐将无从依据;
- 在一些item生存周期短(如新闻、广告)的系统中,由于更新速度快,大量item不会有用户评分,造成评分矩阵稀疏,不利于这些内容的推荐。
3. 基于内容的算法
通过分析用户的行为以及新闻的文本内容,提取出数个关键字。将这些关键字作为属性,把用户和新闻分解成向量,计算向量距离得出该用户和新闻的相似度。
优化:
在计算相似度时引入词权;
引用话题聚类,将文本的关键词聚类,然后根据topic将文本向量化;
综上,基于内容的推荐算法能够很好地解决冷启动问题,并且也不会囿于热度的限制,因为它是直接基于内容匹配的,而与浏览记录无关。然而它也会存在一些弊端,比如过度专业化(over-specialisation)的问题。这种方法会一直推荐给用户内容密切关联的item,而失去了推荐内容的多样性。
4. 基于模型的算法
基于模型的算法由于快速、准确,适用于实时性比较高的业务如新闻、广告等,而若是需要这种算法达到更好的效果,则需要人工干预反复的进行属性的组合和筛选,也就是常说的Feature Engineering。而由于新闻的时效性,系统也需要反复更新线上的数学模型,以适应变化。
处理结果列表
在算法最后得出推荐结果之后,我们往往还需要对结果进行处理。比如当推荐的内容里包含敏感词汇、涉及用户隐私的内容等等,就需要系统将其筛除;若数次推荐后用户依然对某个item毫无兴趣,我们就需要将这个item降低权重,调整排序;另外,有时系统还要考虑话题多样性的问题,同样要在不同话题中筛选内容。
推荐结果评估
CTR(点击率)、CVR(转化率)、停留时间等都是很直观的数据。在完成算法后,可以通过线下计算算法的RMSE(均方根误差)或者线上进行ABTest来对比效果。
改进策略
- 打通公司各大业务平台,通过获取其他平台的用户数据,彻底解决冷启动问题;
- 在不同设备上同步用户数据,包括QQID、设备号、手机号等;
- 丰富用户的人口属性,包括年龄、职业、地域等;
- 更完善的用户兴趣状态,方便生成用户标签和匹配内容。