《机器学习》的总结与心得

目录

1、数据抽象

2、设定性能度量指标

3、数据预处理

4、选定模型

4.1、方法与目的

4.2、目的与方法

5、训练及优化

6、应用


这段时间把《机器学习》看了一遍,总的来说,除了前两章是基础,其余章节都是介绍模型方法,应用场景、理论推导、优化过程、算法等,每章都可独立阅读而不受其他章节影响。

如果只是每一章都看完,顶多就是了解了一种方法,相互之间是割裂的,这样当碰到一个实际问题,仍然无法思路完整的求解,因而有必要在阅读时就要有意识甚至刻意的建立起知识架构。实际上,所谓的机器学习,是面对一个具体的问题,从给定的数据中产生模型的算法,也就是说脱离了实际问题谈机器学习算法是毫无意义的

参考本书的章节内容,加上自己在读书、工作中的一些理解,简单总结一下基于机器学习的一般性问题解决方法。

前面提到,脱离实际问题谈机器学习是毫无意义的,那么在给定数据集(所谓大数据)和具体问题的前提下,一般解决问题的步骤可以概括如下:

1、数据抽象

将数据集和具体问题抽象成数学语言,以恰当的数学符号表示。这样做自然是为了方便表述和求解问题,而且也更加直观。

2、设定性能度量指标

机器学习是产生模型的算法,一般来说模型都有误差。如果模型学的太好,把训练样本自身的一些特点当成所有样本具有的潜在一般性质,这种情况称为过拟合,这样的模型在面对新样本时就会出现较大误差,专业表述就是导致模型的泛化性能下降

与之相对的是欠拟合,模型对样本的一般性质都没学好,这种情况一般比较好解决,扩充数据集或者调整模型皆可。

而一般来说无论是机器学习还是现在很火的深度学习,面对的主要问题都是过拟合。那么为了保证模型的泛化能力足够强,必须要有衡量模型泛化能力的评价标准,也就是性能度量的设定。

很显然不同的性能度量会导致不同的评判结果,好的性能度量能够直观的显示模型的好坏,同时也能看到不同模型,或者模型在不同参数下对解决问题的程度好坏。

进一步,有的问题可以直接基于设定的性能度量直接做最优化,得出该问题的一般求解模型。

比如回归任务最常用的性能度量就是均方误差,目标就是让均方误差最小,这就直接转化成了一个最优化问题。

其他一些常用的有错误率与精度、查准率、查全率、ROC与AOC等。

当然更为重要的是,仅仅设定好性能度量是不够的,不同模型或者不同参数下得到的性能度量结果一般是不同的,一般来说不能简单的比较结果,而应该基于统计假设检验来做效果判定。也就是说通过比较检验的方法,我们就可以判断,如果观察到A比B好,在统计意义上A的泛化性能是否优于B,以及这个判断的把握有多大。

3、数据预处理

之所以要做数据预处理,是因为提供的数据集往往很少是可以直接拿来用的。

可能的情况有: 
1. 样本某些属性值缺失 
2. 有未标记样本 
3. 样本的属性太多 
4. 样本量不足 
5. 没有分出测试集和验证集 
6. 不同类的样本数相差比较大

不同类的样本数相差比较大

这就是所谓类别不平衡问题。举个例子,样本里有998个反例,2个正例,如果一个模型对任何的新样本都预测为反例,那么它的精度为99.8%,虽然很高,但没有任何价值。

这种情况使用的基本策略是再缩放,具体方法则是采样。通过不同的采样方法来使类别达到平衡。

没有分出测试集和验证集

再说第五种情况,为了方便训练和验证模型好坏,数据集一般会以9:1或者其他合适比例(比例选择主要基于实际问题)分为测试集和验证集。如果给定的数据集只是已经标记好的样本,那么划分时必须保证数据集和测试集的分布大致均匀,这就涉及到具体的划分算法了。

样本量不足

第四种情况一般图像问题比较常遇到,如果样本量不足,不够模型来学习,效果自然很差。常见的方法一般有两种: 
1. 基于原数据集做扩充。比如对于图片,可以做各种处理,比如旋转、crop、对比度、亮度等基于像素值的调整,使得一个样本能够生成多个样本,从而达到扩充数据集的目的。 
2. 通过人工标注生成样本。比如大名鼎鼎的ImageNet数据集就是通过全球众包完成的,当然这个不仅耗时长,人工成本也很高,需谨慎考虑。

样本的属性太多

对于第三种情况,如果样本属性太多,为了保证模型的泛化性能足够强,则理论上必须保证数据集包括有所有属性的所有值,而这随着属性数目以及属性值是呈指数上升,很有可能达到天文数字,不仅难以计算,在现实情况也不可能收集到这么多的样本。

从数学角度看,每个样本的属性可以看成向量,属性数目是向量的维数,解决第三种情况一般有两种方法: 
1. 降维 
2. 特征选择

特征选择比较好理解,就是选择有用相关的属性,或者用另外一种表达方式:选择样本中有用、跟问题相关的特征。事实上这也很正常,并不一定样本的所有属性对具体问题都是有用的,通过一定的方法选择合适的特征可以保证模型更优。常用的方法大致分三类:过滤式、包裹式和嵌入式。

所谓的降维,即是多属性意味着是高维空间,在很多时候可以等价的映射到低维而不丢失主要信息。从空间映射的角度看,我们可以通过主成分分析PCA(线性映射)和核化主成分分析(非线性映射)来达到降维的目的。(补充:PCA是无监督降维方法,线性判别分析LDA则是监督降维防范)

有未标记样本

现实情况下往往很多数据集都有大量的未标记样本,有标记的样本反而比较少。如果直接弃用,很大程度上会导致模型精度低。这种情况解决的思路往往是结合有标记的样本,通过估计的方法把未标记样本变为伪的有标记样本。基本的方法有主动学习和半监督学习两种方法。

样本某些属性值缺失

样本的属性值缺失是很常见的一种情况。比如做书籍、视频、音乐等的个性化推荐时,需要用户对不同种类的偏好或评价。而用户不一定听过所有种类的歌,也不一定做出了评价。这就需要通过他已产生的样本数据和与之相类似的用户的数据来恢复和补全。

从原理上讲,这和压缩感知根据部分信息恢复全部信息是有类似的。

常用的方法涉及到协同过滤、矩阵补全等技术和方法。


总的来说,数据预处理是一个非常重要的过程,实际上数据预处理往往会和模型选择结合在一起。

4、选定模型

4.1、方法与目的

分类模型和回归模型本质一样,分类模型可将回归模型的输出离散化(下面例子1. 2. 4. 5.),回归模型也可将分类模型的输出连续化(下面例子3.)  

举几个例子:  

1、Logistic Regression 和 Linear Regression

    1、Linear Regression: 输出一个标量 wx+b,这个值是连续值,所以可以用来处理回归问题

    2、Logistic Regression:把上面的 wx+b 通过 sigmoid 函数映射到(0,1)上,并划分一个阈值,大于阈值的分为一类,小于等于分为另一类,可以用来处理二分类问题 更进一步:对于N分类问题,则是先得到N组w值不同的 wx+b,然后归一化,比如用 softmax 函数,最后变成N个类上的概率,可以处理多分类问题

2、Support Vector Regression 和 Support Vector Machine:

    1、SVR:输出 wx+b,即某个样本点到分类面的距离,是连续值,所以是回归模型

    2、SVM:把这个距离用 sign(·) 函数作用,距离为正(在超平面一侧)的样本点是一类,为负的是另一类,所以是分类模型

3、Naive Bayes 用于分类 和 回归:

    1、用于分类:y是离散的类别,所以得到离散的 p(y|x),给定 x ,输出每个类上的概率

    2、用于回归:对上面离散的 p(y|x)求期望 ΣyP(y|x),就得到连续值。但因为此时y本身是连续的值,所以最地道的做法是,得到连续的概率密度函数p(y|x),然后再对y求期望。参考 http://www.cs.waikato.ac.nz/~eibe/pubs/nbr.pdf

4、前馈神经网络(如 CNN 系列) 用于 分类 和 回归:

    1、用于回归:最后一层有m个神经元,每个神经元输出一个标量,m个神经元的输出可以看做向量 v,现全部连到一个神经元上,则这个神经元输出 wv+b,是一个连续值,可以处理回归问题,跟上面 Linear Regression 思想一样

    2、用于N分类:现在这m个神经元最后连接到 N 个神经元,就有 N 组w值不同的 wv+b,同理可以归一化(比如用 softmax )变成 N个类上的概率(补充一下,如果不用 softmax,而是每个 wx+b 用一个 sigmoid,就变成多标签问题,跟多分类的区别在于,样本可以被打上多个标签)

5、循环神经网络(如 RNN 系列) 用于分类 和 回归:

    1、用于回归 和 分类: 跟 CNN 类似,输出层的值 y = wv+b,可做分类可做回归,只不过区别在于,RNN 的输出跟时间有关,即输出的是 {y(t), y(t+1),...}序列(关于时间序列,见下面的更新)

上面的例子其实都是从 prediction 的角度举例的,如果从 training 角度来看,分类模型和回归模型的目标函数不同,分类常见的是 log loss, hinge loss, 而回归是 square loss(关于 loss function,又是另一个story了,在此不展开了)

4.2、目的与方法

在数据集完美的情况下,接下来就是根据具体问题选定恰当的模型了。

一种方式是根据有没有标记样本考虑。

如果是有标记样本,可以考虑有监督学习,反之则是无监督学习,兼而有之就看半监督学习是否派的上用场。

无监督学习方法主要提到的是聚类。随机选定几个样本,通过一定的算法不停迭代直至收敛或者达到停止条件,然后便将所有样本分成了几类。

有监督学习而言,根据最终所需要的输出结果

  • 如果涉及到分类,可以参考的模型有线性回归及其非线性扩展、决策树、神经网络、支持向量机SVM、规则学习等
  • 如果是回归问题,可以认为是分类的连续形式,方法便是以上模型的变种或扩展
  • 如果涉及到概率,可以参考的有神经网络、贝叶斯、最大似然、EM、概率图、隐马尔科夫模型、强化学习等

5、训练及优化

选定了模型,如何训练和优化也是一个重要问题。 
- 如果要评估训练集和验证集的划分效果,常用的有留出法、交叉验证法、自助法、模型调参等 
- 如果模型计算时间太长,可以考虑剪枝 
- 如果是过拟合,则可通过引入正则化项来抑制(补偿原理) 
- 如果单个模型效果不佳,可以集成多个学习器通过一定策略结合,取长补短(集成学习)

6、应用

模型训练好之后,自然就是应用,针对未知样本做预测、推荐等。

最后再简单谈一下神经网络。本书中神经网络仅仅是作为一个章节叙述,包括经典的BP算法。

但技术书籍的推出总是落后于当前技术发展的。《机器学习》上市的时间,已经是深度学习大行其道了。

多层的神经网络伴随的往往是大量参数的计算和对大数据的渴求。随着互联网的发展,人们产生的数据呈爆炸式增长,这使得大数据集越来越多,同时以NVIDIA为代表推出的基于GPU的机器的计算能力大幅提高,这使得应用多层神经网络解决实际问题成为可能。尤其是在ImageNet竞赛中基于卷积神经网络的模型以大幅优势夺冠后,无论是学术界还是工业界,都投入大量人力财力研究和应用。以前认为人工智能不可能击败围棋的论点也在今年AlphaGO战胜李世石不攻自破,AlphaGO赖以成功的基础就是几千万名家的对战棋谱(数据集)和多层神经网络(模型),当然还包括了强化学习和评估网络等辅助下棋策略。

一个非常有趣的事实是,神经网络在经历了几次寒冬后,科学家们为了保证科研成果能够更大概率的发表,启用了新名词深度学习。(以neural network为关键词的paper拒稿率很高)所以从本质上讲,深度学习可以简单的认为是很深层的神经网络。

猜你喜欢

转载自blog.csdn.net/qq_17073497/article/details/81390086
今日推荐