首页 大数据

一直想写一篇文章总结一下机器学习的脉络,网络上零散的知识很多,但我觉得归纳最清晰的还是这张思维导图,来自Vas3k的一篇介绍机器学习(Machine Learning)的文章。

从一张思维导图开始

机器学习可以分为四大类:

  • 经典的机器学习(classical learning)
  • 强化学习(reinforcement learning)
  • 集成学习(ensemble methods)
  • 神经网络和深度学习(neural network and deep learning)

当我们数据简单、特征清晰的时候,我们往往采用经典的机器学习方法,你可能会说,我们有那么高级的机器学习方法,譬如强大的神经网络和集成学习,为什么不用呢?当然,不是不能用,比如处理垃圾邮件分类时,我们使用贝叶斯分类器,就能够快速、准确地完成筛选任务,错误率低于1%,我们何必使用复杂数倍的神经网络呢?杀鸡焉用牛刀。而在面对复杂的数据和高维的特征时,我们往往会采用神经网络,甚至深度学习的方法来处理。而三个臭皮匠顶个诸葛亮讲的就是集成学习,当我们对结果的精确度要求较高的时候,我们会训练出多个模型,让它们互相矫正对方的错误,共同参与决策,这样可以提高准确性,降低错误率。但是有时候,我们没有数据,但是我们有能够交互的环境,通过环境的反馈来不断调整自身,最终适应环境,这就是强化学习的思路。

这张知识图谱基本覆盖了实际的机器学习应用所用的各种方法,分类、回归、模式搜索、聚类、降维等等,后面我会具体说明,但为了保证知识脉络的完整性,我还会再讲讲我们为什么需要机器学习,而机器学习的三要素又是什么。

一张机器学习的思维导图

我们为什么需要机器学习?

首先我们需要弄清楚,我们为什么需要机器会学习?这里我引用一下Vas3k的例子。

隔壁老王想买一辆车,他首先在互联网上浏览了几十个广告,发现新车大约是20,000美元,一年车龄的二手车是19,000美元,而用过两年的车是18,000美元,依此类推。结果我们聪明的老王同学发现汽车价格取决于车龄,每年下降1,000美元,但不会低于10,000美元。用机器学习的术语,比利发明了回归,他根据已知的历史数据预测了一个价值(价格)。

除了估计汽车的价格,人们也尝试过估算iPhone的价格,或者弄清楚烧烤的时候,要根据人数决定带多少串鸡肉串、羊肉串,多少斤金针菇,人们总是这样做。那是不是世界上所有的问题都可以归结为一条简单的公式呢?不幸的是,这是不可能的。

让我们回到汽车上。问题是,它们有不同的生产日期,数十种选择,技术条件,季节性需求激增,而估计只有老天爷才知道还有多少其他隐藏的因素。一个普通人在计算价格时,肯定无法将所有这些数据保留在脑海中。人们愚蠢而懒惰,我们需要机器为他们做数学。因此,我们为机器提供一些数据,并要求其查找与价格有关的所有隐藏模式。

结果人们发现机器做预测的时候竟然做的比人还好,这让研究人员们异常兴奋。于是机器学习就诞生了。

机器学习的三要素

数据、特征和算法是机器学习的三要素,理论上而言,所有的机器学习任务都抽象为:根据已知数据对未知结果的预测。我们可以认为这是一个基本命题、基本任务,听起来天方夜谭的人工智能(Artificial Intelligence)也逃脱不了。什么是数据?我们想检测垃圾邮件,那么我们需要分析邮件内容,我们想预测股票,那么我们需要分析过去的股票市场、公司状况、国际市场、政策等等这些信息,这些都是数据。而如何去描述数据,就要用到数据的特征,比如邮件内容中单词出现的频率;而历史股价、成交量、K线、MACD等等这些特征参数则用于描述股票市场,同样,描述公司财务状况,描述国际市场,描述政策,都有不同的特征。最后,算法是我们解决问题的策略、方式和步骤,面对不同的机器学习任务、不同的数据集、不同的特征分布,我们会采取不同的方法,期望以最优的方式完成任务。

机器学习的三要素

伴随着机器学习,我们常常听到的数据科学、数据发掘这些名词,它们和机器学习又有什么关系呢?我们可以认为数据科学(Data Science)侧重处理特征,有时候数据的特征不会像文本中的词频这样明显,比如我们需要设计一个人机对话的人工智能,绝对不会仅仅是统计词频这么简单吧?这时候会需要发现或者构造合适的特征参数。而数据发掘(Data Mining)更注重算法这一块,比较著名的一个例子,要从一大段新闻稿中提取出主题(topics),我们需要找到一些频繁一起出现的单词,比如出现data往往后面会跟一个mining,我们会使用Apriori、FP-Growth算法来实现主题的提取。

当然这些都是狭义的定义,如今机器学习这个领域里,已经不会太区分数据科学和数据发掘,说什么你是是一个数据科学家,而我是一个数据挖掘家,这样的说法是低级的,因为现在的机器学习任务都是相当复杂和具有挑战性的,我们已经不再严格区分数据科学、数据挖掘、机器学习这些名词的区别了,我们需要综合运用它们。

人工智能与机器学习的关系

从我步入大学开始,也就是2015-2016年的时候,人工智能、大数据、云计算、机器学习、计算机视觉(CV)、自然语言处理(NLP)等等这些概念就天天被搬上媒体渲染,那么他们之间的关系又是什么呢?这里先跟大家将一个笑话,一个媒体这样报道的《神经网络会替代机器学习吗?》或者一些不知道哪里的科普讲:“线性回归是人工智能”,我们看看下面这张图:

learning-intelligence

在人工智能这个大领域下,机器学习是专门研究怎样让机器拥有“智能”的一门学科,理论基础本质是数学,具体涉及概率统计学、线性代数、离散数学、数学分析、微积分等数学理论,但它不仅仅停留在数学分析上,它与计算机编程紧密结合,别忘了,机器学习研究的目的是落地与现实应用的,让机器拥有“智能”,总而言之,可以理解成让机器能够发掘隐含的信息、分析规律、作出预测、作出决策。

我们的理想是想人工智能能像我们人类一样看、像人类一样听说读写,这就需要计算机拥有视觉和处理语言的能力,而这便是现代人工智能领域最热门的两个领域——计算机视觉(CV)自然语言处理(NLP),他们处理的对象分别是图像(image)和语言(language),所以自然也需要图形学和语言学的一些理论知识,但背后需要坚实的机器学习理论根基。

在机器学习中,有许多不同的学习方法,神经网络只是其中一种,也是最玄学、最万能的一种,而我们发现构建一个非常庞大而深层次的网络能够使机器学习得无比强大,在执行某些任务上,达到人类无法企及的程度(比如说AlphaGo围棋、Google翻译、实时对抗游戏、图片分类、人脸识别),这就是深度学习。当然背后是有强大的算力和数据支撑的,也许是成百上千块价值几百万的GPU,也许是一台每秒能做几亿亿次浮点运算的超级计算机,还要有巨量的数据提供训练和学习的知道,这就是云计算大数据的概念。

所以机器学习和神经网络是包含关系,而不是同等关系的。前面媒体报道的《神经网络会替代机器学习吗?》听起来就像“汽车轮胎会替代汽车吗?”一样怪异。而且我想再次强调,机器不会杀死人类,当你真正步入机器学习领域的时候,你会发现现有的数学工具完全不足与勾勒出人类智慧的模型,我们只是在不断地求方程式的最优解而以。

我们目前对于人类大脑的运行机制还不深入,人类的意识是怎么诞生的,是以一种什么样的形态存在的,这么多的神经元是怎么协同工作的?很多原理我们还不清楚。目前的机器学习只在某些特定的任务上超越人类,而真正拥有智能的路还有很长。

一张机器学习的网络
clustering - K-means、DBSCAN、Kernel K-means => Kernel
pattern search - apriori、FP-growth
降维打击 - PCA、SVD

分类 - KNN、Logistic regression=>softmax、SVM、decision tree、贝叶斯分类器
回归 - linear regression
集成学习
bagging 随机森林 Ramdom forest
boosting
Adaboost、LightGBM
stacking

不同算法之间的比较、区别、优劣

模型的评估与选择
错误率与精度
查准率、查全率与F1
ROC与AUC
代价敏感错误率与代价曲线
比较验证

损失函数
zero-one loss
logistic loss
hinge loss
exponential loss
squared loss

正则化
L1, L2
weight decay权重衰减
dropout 随机失活
正则化的作用

梯度下降法和牛顿法的区别

有哪些常用的优化方法
SGD、BGD、MBGD
牛顿法
动量 - SGD with momentum
adaptive gradient (learning rate) - AdaGrad
RMSProp (Root Mean Square) Propagation
Adam

对偶问题,什么是对偶问题
拉格朗日乘子法

其他

1 聚类

聚类(Clustering)算法可以划分为六大类:

  • 划分聚类(Partition-based methods)

    • K-Means
    • K-Median
    • CLARANS算法
  • 层次聚类(Hierarchical Clustering)

    • BIRCH:利用树结构对数据集进行处理,叶结点存储一个聚类,用中心和半径表示,顺序处理每一个对象,并把它划分到距离最近的结点,该算法也可以作为其他聚类算法的预处理过程。
    • CHEMALOEN:首先由数据集构造成一个K-最近邻图$G_k$,再通过一个图的划分算法将图$G_k$划分成大量的子图,每个子图代表一个初始子簇,最后用一个凝聚的层次聚类算法反复合并子簇,找到真正的结果簇。
    • DIANA:属于分裂的层次聚类
    • AGNES:属于凝聚的层次聚类
  • 模糊聚类

    • EM算法
  • 基于密度的聚类(Density-based methods)

    • DBSCAN:采用空间索引技术来搜索对象的邻域,引入了“核心对象”和“密度可达”等概念,从核心对象出发,把所有密度可达的对象组成一个簇。
    • OPTICS:结合了聚类的自动性和交互性,先生成聚类的次序,可以对不同的聚类设置不同的参数,来得到用户满意的结果。
  • 基于网格的聚类(Grid-based methods)
  • 基于模型的聚类(Model-based methods)

树状图(dengrogram)可以用来表示数据之间的层级聚类结构关系。

树状图表示层次聚类

举个例子,如果我们在这个位置切割树状图,可以形成四个簇,图中已用红色的圆圈圈出来了。我们还可以有其他切分的方法,在其他层次切分,我们会得到不同数量和分布的簇,簇是拥有层次关系的,这就是层次聚类的含义。

切分树状图

2 集成学习(ensemble learning)总结

方法顺序训练还是并行训练如何生成不同的模型方差和偏差的情况
Bagging并行训练Bootstrap data减小方差,但是不减小偏差
Random Forest并行训练Bootstrap + random subset of features at splitting减小方差
Boosting顺序训练每次迭代需要重新分配训练样本的权重两者都减小

bagging

RF

boosting

3 PCA / SVD

主成分分析(PCA - Principle Component Analysis)

奇异值分解(SVD - Singular Value Decomposition )

静哥哥的博客:https://www.cnblogs.com/endlesscoding/p/10033527.html

单位矩阵(identity matrix)

矩阵的行列式(determinant)

矩阵的特征值(eigenvalues)和特征向量(eigenvectors)




文章评论

captcha