浅谈对统计机器学习的认识
最早是在《数据处理与优化算法》课堂上接触到数据挖掘(Data Mining),接着自学Pang-Ning Tan et al.的《数据挖掘导论》入门数据挖掘。所以我先讲一下数据挖掘、机器学习(Machine Learning)和统计学(Statistics)的关系。个人理解是传统统计学往往是更加偏向于纯粹的数学,偏向于理论。机器学习偏向于数学与计算机的交叉,统计的理论往往需要通过机
最早是在《数据处理与优化算法》课堂上接触到数据挖掘(Data Mining),接着自学Pang-Ning Tan et al.的《数据挖掘导论》入门数据挖掘。所以我先讲一下数据挖掘、机器学习(Machine Learning)和统计学(Statistics)的关系。个人理解是传统统计学往往是更加偏向于纯粹的数学,偏向于理论。机器学习偏向于数学与计算机的交叉,统计的理论往往需要通过机器学习的研究来转化成有效的算法。数据挖掘是机器学习的一个应用领域,数据库(例如SQL)、大数据并行处理技术(Hadoop+Spark)与机器学习技术是数据挖掘的两大技术支撑。
机器学习可以分为以支持向量机为代表的统计学习和人工神经网络为代表的联结主义学习。统计学习模型参数往往是可解释的,而人工神经网络就是一个黑箱。
目前,主要通过学习李航的《统计学习方法》以及相关文献、博客对统计学习方法有一定的了解。所以先白话谈谈自己对统计机器学习的认识。如有叙述与理解不当之处,请不吝赐教。
什么是机器学习?要回答这个问题,首先需要明确学习的定义。Herbert Simon曾给出定义:如果一个系统能够通过执行某个过程改进他的性能,这就是学习。类比人的大脑,不断地接受信息,并遵循一定的逻辑规则处理信息,从而思维能力不断提升,对以前接触过类似的甚至没接触过的新鲜事物的判断更加准确。机器学习中的数学模型就是大脑,输入的训练数据蕴含大量信息,学习算法就是逻辑规则。学习之后,模型的分类预测能力更强,误差更小,相当于人的思维能力得到提升。所以,机器学习的核心就是数学模型(例如决策树、支持向量机、神经网络、贝叶斯网络等)。然而这些模型在没有数据的输入下是没有实际用途的,因为没有形成确定合理的参数,或者模型的结构还不够完善,就像再聪明的大脑没有经过实习训练也难以解决实际问题一样。所以需要实际的数据对模型进行训练,当然对统计学习而言,这些数据需要蕴含着相同的信息(统计规律性),就像人需要针对性学习一样。训练过程需要遵从一定的规律,就像人在处理信息的时候总是遵从一定的逻辑,这就是学习方法,而且训练不能无休无止,得有一个标准来判定什么时候结束,这就是学习策略。训练的效果好不好,得看模型的预见性,这就涉及对不同种类模型性能的度量。
一句话概括,统计机器学习是基于对数据的初步认识以及学习目的的分析,选择合适的数学模型,拟定超参数,并输入样本数据,依据一定的策略,运用合适的学习算法对模型进行训练,最后运用训练好的模型对数据进行分析预测。学习流程如下:
统计机器学习三个要素:
- 模型(model).例如支持向量机、人工神经网络模型等。模型在未进行训练前,其可能的参数是多个甚至无穷的,故可能的模型也是多个甚至无穷的,这些模型构成的集合就是假设空间(hypothesis space)。
- 策略(strategy).即从假设空间中挑选出参数最优的模型的准则。模型的分类或预测结果与实际情况的误差(损失函数)越小,模型就越好。那么策略就是误差最小。针对样本数据的误差是经验风险,但样本数目较小时不能代替数据的全部信息,故容易出现过拟合现象,即模型过度拟合小容量样本数据,从而泛化能力降低。期望风险就是针对所有数据的误差,但这里出现一个悖论,正因为存在需要预测的数据,才需要训练模型,如果所有数据的误差都能计算,那就无需训练了。故引入结构风险,就是在经验风险的基础上引入罚项(penalty term)或称正则化项(regularization),表示模型的复杂程度,以防止过拟合。
- 算法(algorithm).即从假设空间中挑选模型的方法(等同于求解最佳的模型参数)。机器学习的参数求解通常都会转化为最优化问题,例如支持向量机实质上就是求解凸二次规划问题。故学习算法通常是最优化算法,例如最速梯度下降法、牛顿法以及拟牛顿法等。
之前运用机器学习算法进行数据挖掘的经历告诉我对于应用而言,模型的选择(model selection)是最为关键的。首先没有哪一种算法是适用于所有情况的。例如,朴素贝叶斯分类器在输入数据各维度间相关性较大时分类效果差,而使用最为普遍的支持向量机在多分类领域表现不如随机森林且计算耗时。所以,选择模型需要在深刻明确学习目的,了解模型的理论、优缺点以及数据的特征基础上。业界有句话:真正的数据挖掘高手往往都是擅长业务的。因为业务能力强的人对数据的特征理解最为清楚。选择好合理的模型后,超参数是需要人为设定的,例如惩罚因子、学习率以及核函数等。这些参数至关重要,直接决定训练结果的好坏。如何选择这些设定参数呢?首先需要了解模型的理论,其次是丰富的调参经验(这需要建立在具体业务问题上,技术只有结合业务才能发挥用途)。Python的sklearn.model_selection.GridSearchCV可以实现自动化调参。调参过程中有几个准则需要遵守:
- 正则化。实质就是权衡损失函数与模型复杂度。换句话说,在降低经验误差的同时,使模型尽量简单,保证其泛化能力。这种思想符合奥卡姆剃刀(Occam`s razor)原理。
- 交叉验证。将训练样本分成N个大小相同的子数据集,每次训练选取其中一个作为测试数据集,其余均作为训练数据集。选取N次训练的平均误差最小的参数。
接下来,讲一下机器学习的分类。学习种类可以分为:
- 监督学习( supervised learning)。说白了,训练数据集包含输入X及相应的标记(输出y)两个部分。学习目的就是获得一个从X→y的映射。分类与回归问题是典型的监督学习。
- 非监督学习(unsupervised learning)。训练数据集只包含输入X。学习的目的在于找到数据集中隐含的结构。关联分析与大多聚类分析是典型的非监督学习。
- 半监督学习(semi-supervised Learning)。监督学习与非监督学习的结合。输入X,小部分有标记,大部分没有标记。标签传播算法(label propagation)是典型的半监督学习算法, 该算法充分利用已标记的样本点的信息,将其标签传播至未标记样本点,从而实现所有数据的聚类。
机器学习在数据挖掘领域的应用可分为三大部分:分类与回归,关联分析和聚类分析。
- 分类(classification)与回归(regression)。分为学习与预测两个阶段。学习是建立输入到输出的映射。预测是运用映射预测X对应的输出。分类针对输出是离散值的情况,回归针对输出是连续值的情况。经典的算法有:决策树、CART回归、线性回归、K近邻、逻辑斯谛回归、SoftMax、最大熵、朴素贝叶斯、感知机、支持向量机、Adaboost、提升树以及随机森林。
- 关联分析(association)。发现隐藏在大型数据集中的有意义的联系。经典的算法有:Apriori和FP-Growth。
- 聚类(cluster)。发现数据间的潜在关系,自动将数据归类(簇)。相关算法通常分为两类,一类需要确定簇的个数,例如K均值、谱聚类和高斯混合模型等;另一类自动确定簇的个数,例如DBSCAN、MeanShift、标签传播等。
[我的GitHub](https://github.com/Shi-Lixin)
注:如有不当之处,请指正。
更多推荐
所有评论(0)