10大机器学习算法
网友 推酷

今天我们就来聊聊,每一位数据科技家都应该了解的10大机器学习算法。下面是关于普遍机器学习算法和快速资源的风暴之旅,准好了吗?烧脑挑战开始:

1. 主成分分析(PCA)/奇异值分解(SVD)

PCA是一种非监督学习,用来理解由向量组成的数据集的全局特性的方法。这里分析了数据点的协方差模型,用来了解哪些维度(大部分)/数据点(有时)更重要,即在它们自身之间具有高方差,但与其他变量时协方差较低。

这种思考模型主要用于考量具有最高特征值的特征向量。此外,SVD本质上也是一种计算有序成分的方法,但你不需要通过获取数据点的协方差矩阵来实现它。

这种算法通过获取已缩减维度的数据点,有助于解决多维度产生的冲击。

Libraries:

https://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.svd.html

http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html

Introductory Tutorial:

https://arxiv.org/pdf/1404.1100.pdf

2.1 最小二乘法和多项式拟合

还记得你在大学里学的数值分析编码吗?通过拟合直线和曲线得到一个方程。现在,你可以使用它们来适配机器学习中的曲线,用于非常小的低维数据集。对于大数据或多维度的数据集,你可能会需要过度拟合,所以不用费心。普通最小二乘法(OLS)具有封闭形式的解决方案,因此你不需要使用复杂的优化技术。

很明显,你可以使用这种算法拟合简单曲线/回归。

Libraries:

https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.htmlhttps://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.polyfit.html

Introductory Tutorial:

https://lagunita.stanford.edu/c4x/HumanitiesScience/StatLearning/asset/linear_regression.pdf

2.2 约束性线性回归

最小二乘法可能会被数据中的离群点、假维度和噪声干扰。因此,我们需要用约束来减少数据集上拟合的线的方差。正确的方法是拟合一个权重可控的线性回归模型。模型可以用L1正则(LASSO)或L2正则(Ridge Regression)或二者混合(elastic回归)。经过正则处理后对均方损失进行优化。

使用这些算法拟合具有约束性的回归线,避免从模型中过度拟合和掩藏干扰维度。

Libraries:

http://scikit-learn.org/stable/modules/linear_model.html

Introductory Tutorial(s):

https://www.youtube.com/watch v=5asL5Eq2x0A

https://www.youtube.com/watch v=jbwSCwoT51M

3. K-均值聚类 

这是所有人都喜欢的非监督学习聚类算法。给定一组矢量形式的数据点,我们可以基于它们之间的距离生成数据点群。它是一种期望最大化的算法,反复地移动群组的中心,然后聚集每个群组中心点。此算法所采用的输入是生成群组的数量,并且它将尝试汇集群组的迭代次数。

从名称中就可以看出,你可以使用这种算法在数据集中创建K集群。

Library:

http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html

Introductory Tutorial(s):

https://www.youtube.com/watch v=hDmNF9JG3lo

https://www.datascience.com/blog/k-means-clustering

4. 逻辑回归

逻辑回归是一种约束线性回归,它的结果进行了非线性变换(常用的是sigmoid函数,或者tanh也可以),因此把输出限制成了+/-类的输出(在sigmoid中是1和0)。

交叉熵损失函数(Cross-Entropy Loss)用梯度下降法(Gradient Descent)优化。对初学者来说,逻辑回归用于分类,而不是回归。你也可以把逻辑回归看作一层神经网络。逻辑回归通过使用梯度下降法或者L-BFGS算法优化。NLP自然语言处理者们通常把它称之为最大熵分类器。

使用LR来训练非常简单,却是十分强有力的分类器。

Library:

http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html

Introductory Tutorial(s):

https://www.youtube.com/watch v=-la3q9d7AKQ

5.SVM(支持向量机)

SVM(支持向量机)是线性模型,类似线性/逻辑回归。不同之处在于它们具有不同的基于边际损失函数(支持向量的推导是我所看到过的最美的数理成果之一,和特征值的计算可以媲美)。你可以使用诸如B-FGS甚至SGD等优化方法来优化损失函数。

SVMs的另一个创新是,在特征工程中kernel使用。如果你有很好的领域洞察力,你可以用更好的kernel来代替旧的RBF kernel,并从中受益。

SVMs独一无二的特性就是可以学习一个类别的分类器

SVMs可以用来训练分类器(甚至回归函数)。

Library:

http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

Introductory Tutorial(s):

https://www.youtube.com/watch v=eHsErlPJWUU

6. 前馈神经网络

这些基本上是多层逻辑回归分类器。许多层权重由非线性(SigMOID,TANH,Relu+SULTMax和cool new SELU)分隔。它另一个比较知名的名字是多层感知器。前馈神经网络作为自动编码器,可用于分类和非监督特征学习。

前馈神经网络作为自动编码器,可用于训练分类器或提取特征。

Libraries:

http://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html#sklearn.neural_network.MLPClassifier

http://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPRegressor.html

https://github.com/keras-team/keras/blob/master/examples/reuters_mlp_relu_vs_selu.py

Introductory Tutorial(s):

http://www.deeplearningbook.org/contents/mlp.html

http://www.deeplearningbook.org/contents/autoencoders.html

http://www.deeplearningbook.org/contents/representation.html

7. 卷积神经网络(Convnets)

当今,世界上几乎所有基于视觉的机器学习成果,都已经通过卷积神经网络实现。它们可以用于图像分类、目标检测甚至图像分割。

这是Yann Lecun在上世纪80年代末90年代初的发明,其特征在于卷积层充当分层特征提取器。你也可以在文本中使用它们(甚至是图形)。

convnets用于最先进的图像和文本分类、目标检测、图像分割。

Libraries:

https://developer.nvidia.com/digits

https://github.com/kuangliu/torchcv

https://github.com/chainer/chainercv

https://keras.io/applications/

Introductory Tutorial(s):

http://cs231n.github.io/

https://adeshpande3.github.io/A-Beginner%27s-Guide-To-Understanding-Convolutional-Neural-Networks/

8.  递归神经网络(RNNs)

RNN通过在聚合状态下,递归的使用同样的权重,来对一个序列建模。前提是这个序列在0..t..T时间点上有输入,并且在时间t有从RNN的t-1步输出的隐含层。

现在纯的RNN已经很少使用了,取而代之的是代表序列建模最前沿的,与它对应的LSTMs和GRUs。

RNN(如果有紧密连接和非线性,现在f通常是LSTMs和GRUs的)。在纯的RNN中,LSTM单元取代了紧密连接层。

使用RNNs去完成序列建模的任务,如文本分类、机器翻译、语言建模。

Library:

https://github.com/tensorflow/models (Many cool NLP research papers from Google are here)

https://github.com/wabyking/TextClassificationBenchmark

http://opennmt.net/

Introductory Tutorial(s):

http://cs224d.stanford.edu/

http://www.wildml.com/category/neural-networks/recurrent-neural-networks/

http://colah.github.io/posts/2015-08-Understanding-LSTMs/

9. 条件随机场(CRFs)

CRFS可能是概率图形模型家族(PGMs)中最常用的模型。它们被用于像RNNs这样的序列建模,也可以与RNNs结合使用。它是神经机器翻译系统进入CRFs之前最先进的技术,并且在许多序列中用小的数据集标记任务。

目前,CRFS仍然比RNNs这样需要大量数据量支撑的算法更有优势。它们也可用于其他结构化预测任务,如图像分割等。CRF对序列中的每一个元素(例如一个句子)进行建模,使得其序列中某个组件的标签相互影响,而不是所有的标签彼此独立。

使用CRFs标记序列(文本、图像、时间序列、DNA等)。

Library:

https://sklearn-crfsuite.readthedocs.io/en/latest/

Introductory Tutorial(s):

http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields/

10. 决策树

假如,我得到一份关于各种水果数据的Excel表格,并需要告知哪些是苹果时,会抛出这么几个问题:

       ?第一个问题:“哪些水果是红色+圆形的?”

并用“是”和“否”来区分所有水果。

不过,所有的红色+圆形水果可能不是苹果,所有的苹果都不会只是红色+圆形的。

       ?第二个问题:在所有的红色+圆形水果中“哪些有红色or黄色的特征?”

同时我也会问,在所有非红色的圆形水果中“哪些是绿色+圆的。”

基于这些问题,我可以准确地分辨出哪些是苹果。

这一连串的问题就是决策树。

但是,这是一个基于我们直觉的决策树。直觉并不能在高维和复杂的数据上工作。我们必须通过查看标记数据来自动提出这一连串的问题。这就是基于决策树的机器学习技术所要做的。

早期的版本如CART树,曾经被用于处理简单的数据,但随着数据集越来越大,权衡方差与偏差需要用更好的算法来解决。如今正在使用的两种常用决策树算法是随机森林(在属性的随机子集上建立不同的分类器,并将它们组合成输出)和提升树(它不停地训练上层,用于纠正下层的错误)

决策树可以用来对数据点进行分类(甚至回归)。

Libraries:

http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html

http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html

http://xgboost.readthedocs.io/en/latest/

https://catboost.yandex/

Introductory Tutorial:

http://xgboost.readthedocs.io/en/latest/model.html

https://arxiv.org/abs/1511.05741

https://arxiv.org/abs/1407.7502

http://education.parrotprediction.teachable.com/p/practical-xgboost-in-python

(图片来源于网络)

TD算法(值得拥有)

如果你还想知道上述任何一种算法,是如何做到像Deepmind Go那样击败世界冠军,很遗憾它们做不到。

在这之前我们讨论的所有10种算法都是模式识别,而不是策略学习。要通过学习策略解决一个多步骤的问题,比如赢得国际象棋游戏或玩雅达利游戏机,我们需要反复训练并从奖惩制度中学习。

这部分机器学习技术我们称之为深度强化学习。在这一领域的许多成功案例是融合了Convent或LSTM的感知能力产生的结果,这一些列算法称之为时间差异学习。

这里面包括Q-Learning, SARSA和一些其它变型。这些算法在Bellman’s equations贝尔曼方程中非常智能,它可以通过从环境中获得的奖励训练,从而获取损失函数。

这些算法大多用于自动玩游戏,以及其他与语言生成和目标检测有关的应用。

相关资料

  • Top 20 Deep Learning Papers, 2018 Edition

  • Hierarchical Classification – a useful approach for predicting thousands of possible categories

  • The 10 Deep Learning Methods AI Practitioners Need to Apply


CIO之家 www.ciozj.com 公众号:imciow
关联的文档
也许您喜欢