机器学习/算法


 监督学习/supervised learning:

  • 有X和Y
  • 常见的有监督学习算法:回归分析regression和统计分类classification。最典型的算法是KNN和SVM

非监督学习:

  • 只有X

  • 需要根据样本间的相似性对样本集进行分类(聚类,clustering)试图使类内差距最小化,类间差距最大化。

  • PCA和很多deep learning算法都属于无监督学习
  • 非监督学习方法在寻找数据集中的规律性,这种规律性并不一定要达到划分数据集的目的,也就是说不一定要“分类”

(参考https://blog.csdn.net/u010947534/article/details/82025794)


分类器

  • 作用:在标记好类别的训练数据基础上判断一个新的观察样本所属的类别
  • 依据下面四个要点来选择合适的分类器
    • 泛化能力和拟合之间的权衡(bias & variance):
      • 如果一个分类器在训练数据上能够得到很好效果但是在测试数据上效果下降严重,说明分类器过拟合了训练数据。
      • 若分类器在测试数据上能够取得好效果,那么说明分类器的泛化能力强
      • 分类器的泛化和拟合是一个此消彼长的过程,泛化能力强的分类器拟合能力一般很弱,另外则反之。所以分类器需要在泛化能力和拟合能力间取得平衡
    • 分类函数的复杂度和训练数据的大小
      • 复杂的分类问题,那么分类器学习就需要大量的训练数据和泛化能力强的学习算法
      • 简单的分类问题,那么拟合能力强泛化能力弱的分类器就可以通过很小的一部分训练数据来得到
    • 输入的特征空间的维数(Xi数量)
      • 如果输入特征空间的向量维数很高的话,就会造成分类问题变得复杂,即使最后的分类函数仅仅就靠几个特征来决定的。这是因为过高的特征维数会混淆学习算法并且导致分类器的泛化能力过强,而泛化能力过强会使得分类器变化太大,性能下降。因此,一般高维特征向量输入的分类器都需要调节参数使其泛化能力较弱而拟合能力强。另外在实验中,也可以通过从输入数据中去除不相干的特征或者降低特征维数来提高分类器的性能。
    • 输入的特征向量之间的均一性和相互之间的关系 
      • 如果特征向量包含多种类型的数据(如离散,连续),许多分类器如SVM,线性回归,逻辑回归就不适用。这些分类器要求输入的特征必须是数字而且要归一化到相似的范围内如 之间。而像K最近邻算法和高斯核的SVM这些使用距离函数的分类器对于数据的均一性更加敏感。但是另一种分类器决策树却能够处理这些不均一的数据。如果有多个输入特征向量,每个特征向量之间相互独立,即当前特征向量的分类器输出仅仅和当前的特征向量输入有关,那么最好选择那些基于线性函数和距离函数的分类器如线性回归、SVM、朴素贝叶斯等。反之,如果特征向量之间存在复杂的相互关系,那么决策树和神经网络更加适合于这类问题。   

 (参考https://www.cnblogs.com/dawnminghuang/p/4770136.html)


 

 


朴素贝叶斯

  • 贝叶斯定理:条件概率公式
  • 对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别

参考(https://www.cnblogs.com/leoo2sk/archive/2010/09/17/naive-bayesian-classifier.html)


 

逻辑回归

参考https://www.cnblogs.com/pinard/p/6029432.html)

 

logistic

  • logistic回归本质上是线性回归,只是在特征到结果的映射中加入了一层函数映射,即先把特征线性求和,然后使用函数g(z)将最为假设函数来预测。g(z)可以将连续值映射到0和1上。
  • Logistic回归目的是从特征学习出一个0/1分类模型,而这个模型是将特性的线性组合作为自变量,由于自变量的取值范围是负无穷到正无穷。因此,使用logistic函数(或称作sigmoid函数)将自变量映射到(0,1)上,映射后的值被认为是属于y=1的概率

softmax

  • 多分类

(参考https://www.cnblogs.com/jerrylead/archive/2011/03/05/1971867.html)


 SVM

  • 能将训练样本划分开的超平面有很多--找到对训练样本局部扰动容忍性最好的--最具有鲁棒性的---对未见示例泛化能力最强的
  • y=-1,y=1

(参考https://www.cnblogs.com/jerrylead/archive/2011/03/13/1982639.html     https://www.cnblogs.com/jerrylead/archive/2011/03/13/1982684.html)


 基于实例的学习

  • 在基于实例的学习中,训练样本被完全保存起来,并且使用距离函数带来判定训练集中的哪个实例与一个未知的测试实例最近。
  • 已知一系列的训练样例,很多学习方法为目标函数建立起明确的一般化描述;但与此不同,基于实例的学习方法只是简单地把训练样例存储起来。

(参考https://www.jianshu.com/p/ecf57d805c1a)

KNN

  • 基于实例的学习方法中最基本
  • 它对训练数据中的噪声有很好的鲁棒性,而且当给定足够大的训练集合时它也非常有效。注意通过取k个近邻的加权平均,可以消除孤立的噪声样例的影响。
  • 问题
    •  应用k-近邻算法的一个实践问题是,实例间的距离是根据实例的所有属性(也就是包含实例的欧氏空间的所有坐标轴)计算的。这与那些只选择全部实例属性的一个子集的方法不同,例如决策树学习系统。————当计算两个实例间的距离时对每个属性加权

(参考https://blog.csdn.net/u011067360/article/details/23941577)

KNN和kmeans区别

  • KNN是分类算法/监督学习/喂给它的数据集是带label的数据,已经是完全正确的数据
  • K-Means是聚类算法/非监督学习/喂给它的数据集是无label的数据,是杂乱无章的,经过聚类后才变得有点顺序,先无序,后有序 

 

(参考https://blog.csdn.net/t0903/article/details/52678944)


决策树

优化

随机森林

(参考https://blog.csdn.net/xbinworld/article/details/44660339)

 


 

kmeans

  • 最简单的聚类
  • 先定k个种子,把样本分配给最近的种子,重新计算新中心,重复过程,直到中心不变
  • 优点:
    • 简单快速
  • 缺点:
    • 必须先给出K值
    • 对于噪声和孤立值敏感——可以不把均值作为中心 找到真正的中心  

 

(参考https://wizardforcel.gitbooks.io/dm-algo-top10/content/k-means.html)


降维方法

 

PCA

  • 用数据里最主要的方面来代替原始数据
  • 假如我们把n'从1维推广到任意维,则我们的希望降维的标准为:样本点到这个超平面的距离足够近,或者说样本点在这个超平面上的投影能尽可能的分开。

(参考https://www.cnblogs.com/pinard/p/6239403.html)


 logistic-LDA

分类问题 估计的是概率  bayes classifier 选择概率最高的 ——会有最低的test error rate

LR 二分类时输出值超出(0,1),如果y的取值不同(123/321) 生成的lr model 也不一

1.  解决办法——logistic regression  

  • (1x 2y)

 输出值在(0,1)

odds = p/1-p  log(odds)=logit --linear model

  • (多x 多y)

每个class有个linear function  共k-1个

2.  LDA 另一种方式去model 概率 

  • 1x

 

 

 

  •  LDA(多x)

 


 

ROC/AUC/confusion table

 

横轴FPR:1-TNR,1-Specificity,FPR越大,预测正类中实际负类越多。

纵轴TPR:Sensitivity(正类覆盖率),TPR越大,预测正类中实际正类越多。

理想目标:TPR=1,FPR=0,即图中(0,1)点,故ROC曲线越靠拢(0,1)点,越偏离45度对角线越好,Sensitivity、Specificity越大效果越好

 

既然已经这么多标准,为什么还要使用ROC和AUC呢?因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变换的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现样本类不平衡,即正负样本比例差距较大,而且测试数据中的正负样本也可能随着时间变化

 参考https://www.cnblogs.com/dlml/p/4403482.html

 


 

提升(Boost)

(参考https://blog.csdn.net/sinat_22594309/article/details/60957594

https://www.cnblogs.com/hudongni1/p/5511491.html

https://blog.csdn.net/qq_28031525/article/details/70207918

 

  • 梯度下降提升树(GDBT)
    • 回归树 GBDT的核心在于累加所有树的结果作为最终结果
    • GBDT的核心就在于,每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。
    • 每个新的模型的建立是为了使得之前的模型的残差往梯度下降的方法
  • 自适应提升(AdaBoost)
    • Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。Adaboost算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次得到的分类器最后融合起来,作为最后的决策分类器。
    • https://wizardforcel.gitbooks.io/dm-algo-top10/content/adaboost.html
    • https://zhuanlan.zhihu.com/p/27126737
  • XGBoost
    • 传统的GBDT在优化的时候只用到一阶导数信息,XGBoost则对代价函数进行了二阶泰勒展开,得到一阶和二阶导数
    • https://blog.csdn.net/qq_28031525/article/details/70207918

 


 LSTM

 


 神经网络

  • 一个神经网络的训练算法就是让权重的值调整到最佳,以使得整个网络的预测效果最好。
  • BackpropagationBP算法,解决了两层神经网络所需要的复杂计算量问题,从而带动了业界使用两层神经网络研究的热潮--->带动量因子(momentum)的梯度下降算法。
  • 矩阵和向量相乘,本质上就是对向量的坐标空间进行一个变换。因此,隐藏层的参数矩阵的作用就是使得数据的原始坐标空间从线性不可分,转换成了线性可分。
  • grid Search(网格搜索):预先设定几个可选值,通过切换这几个值来看整个模型的预测效果,选择效果最好的值作为最终选择
  • 如何优化参数,能够让损失函数的值最小。
  • sgn函数->sigmoid函数->ReLU函数
  • pool池化——取区域最大或者平均
  • 图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重:因为每个神经元的多个权重固定,所以又可以看做一个恒定的滤波器filter)做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操作,也是卷积神经网络的名字来源。
  • 不同的滤波器filter会得到不同的输出数据,比如颜色深浅、轮廓。相当于如果想提取图像的不同特征,则用不同的滤波器filter,提取想要的关于图像的特定信息:颜色深浅或轮廓。
  • a. 深度depth:神经元个数,决定输出的depth厚度。同时代表滤波器个数
    b. 步长stride:决定滑动多少步可以到边缘。
    c. 填充值zero-padding:在外围边缘补充若干圈0,方便从初始位置以步长为单位可以刚好滑倒末尾位置,通俗地讲就是为了总长能被步长整除
  • 卷积层
  • 实际梯度下降中,sigmoid容易饱和、造成终止梯度传递,且没有0中心化
  • ReLU:f(x) = max(0, x)——(Rectified Linear Units),或者修正线性单元
  • 优点是收敛快,求梯度简单。
  • 池化pool层
  • 池化层:通过加入池化层,可以很大程度上减少计算量,降低机器负载。
  • 因为最大池化(max-pooling)保留了每一个小块内的最大值,所以它相当于保留了这一块最佳的匹配结果(因为值越接近1表示匹配越好)。这也就意味着它不会具体关注窗口内到底是哪一个地方匹配了,而只关注是不是有某个地方匹配上了。这也就能够看出,CNN能够发现图像中是否具有某种特征,而不用在意到底在哪里具有这种特征。这也就能够帮助解决之前提到的计算机逐一像素匹配的死板做法。

  • 全连接层(Fully connected layers)
  •  

参考(http://www.ruanyifeng.com/blog/2017/07/neural-network.html

https://www.cnblogs.com/subconscious/p/5058741.html

https://blog.csdn.net/v_july_v/article/details/51812459

https://blog.csdn.net/v_JULY_v/article/details/79434745

https://www.cnblogs.com/charlotte77/p/5629865.html  反向传播例子

http://www.cnblogs.com/maybe2030/p/5597716.html)

RNN

  • 更好的处理序列的信息
  • 现在看上去就比较清楚了,这个网络在t时刻接收到输入 x_{t} 之后,隐藏层的值是 s_{t} ,输出值是 o_{t} 。关键一点是, s_{t} 的值不仅仅取决于 x_{t} ,还取决于 s_{t-1} 。我们可以用下面的公式来表示循环神经网络的计算方法:

     

 

LSTM

  • 是 long-short term memory 的简称, 中文叫做 长短期记忆. 是当下最流行的 RNN 形式之一.
  • 再来看看 RNN是怎样学习的吧. 红烧排骨这个信息原的记忆要进过长途跋涉才能抵达最后一个时间点. 然后我们得到误差, 而且在 反向传递 得到的误差的时候, 他在每一步都会 乘以一个自己的参数 W. 如果这个 W 是一个小于1 的数, 比如0.9. 这个0.9 不断乘以误差, 误差传到初始时间点也会是一个接近于零的数, 所以对于初始时刻, 误差相当于就消失了. 我们把这个问题叫做梯度消失或者梯度弥散 Gradient vanishing. 反之如果 W 是一个大于1 的数, 比如1.1 不断累乘, 则到最后变成了无穷大的数, RNN被这无穷大的数撑死了, 这种情况我们叫做剃度爆炸, Gradient exploding. 这就是普通 RNN 没有办法回忆起久远记忆的原因.
  • 长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。
  • https://www.jianshu.com/p/9dc9f41f0b29

     


优化方法:

https://www.jianshu.com/p/9dc9f41f0b29


 

 

※ 待完成

AIC BIC R2

F sta

bootstrap

bagging

CNN RNN

L1、L2正则化

topk

scikit-learn numpy

bagging

深度学习是什么

协同过滤

LSTM

 

posted on 2019-03-18 23:15  ZoraZheng  阅读(252)  评论(0)    收藏  举报

导航