想成为数据科学家?你得是个博闻强识,又对新鲜事物保持好奇心的人。正因为如此,数据科学家会掌握几乎所有的常见算法,并精通其中一门,这样可以快速适应新领域的问题。
今天我们就来聊聊,每一位数据科技家都应该了解的10大机器学习算法。下面是关于普遍机器学习算法和快速资源的风暴之旅,准好了吗?烧脑挑战开始:
PCA是一种非监督学习,用来理解由向量组成的数据集的全局特性的方法。这里分析了数据点的协方差模型,用来了解哪些维度(大部分)/数据点(有时)更重要,即在它们自身之间具有高方差,但与其他变量时协方差较低。
这种思考模型主要用于考量具有最高特征值的特征向量。此外,SVD本质上也是一种计算有序成分的方法,但你不需要通过获取数据点的协方差矩阵来实现它。
这种算法通过获取已缩减维度的数据点,有助于解决多维度产生的冲击。
https://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.svd.html
http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html
https://arxiv.org/pdf/1404.1100.pdf
还记得你在大学里学的数值分析编码吗?通过拟合直线和曲线得到一个方程。现在,你可以使用它们来适配机器学习中的曲线,用于非常小的低维数据集。对于大数据或多维度的数据集,你可能会需要过度拟合,所以不用费心。普通最小二乘法(OLS)具有封闭形式的解决方案,因此你不需要使用复杂的优化技术。
很明显,你可以使用这种算法拟合简单曲线/回归。
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
https://lagunita.stanford.edu/c4x/HumanitiesScience/StatLearning/asset/linear_regression.pdf
最小二乘法可能会被数据中的离群点、假维度和噪声干扰。因此,我们需要用约束来减少数据集上拟合的线的方差。正确的方法是拟合一个权重可控的线性回归模型。模型可以用L1正则(LASSO)或L2正则(Ridge Regression)或二者混合(elastic回归)。经过正则处理后对均方损失进行优化。
使用这些算法拟合具有约束性的回归线,避免从模型中过度拟合和掩藏干扰维度。
http://scikit-learn.org/stable/modules/linear_model.html
https://www.youtube.com/watch v=5asL5Eq2x0A
https://www.youtube.com/watch v=jbwSCwoT51M
这是所有人都喜欢的非监督学习聚类算法。给定一组矢量形式的数据点,我们可以基于它们之间的距离生成数据点群。它是一种期望最大化的算法,反复地移动群组的中心,然后聚集每个群组中心点。此算法所采用的输入是生成群组的数量,并且它将尝试汇集群组的迭代次数。
从名称中就可以看出,你可以使用这种算法在数据集中创建K集群。
http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html
https://www.youtube.com/watch v=hDmNF9JG3lo
https://www.datascience.com/blog/k-means-clustering
逻辑回归是一种约束线性回归,它的结果进行了非线性变换(常用的是sigmoid函数,或者tanh也可以),因此把输出限制成了+/-类的输出(在sigmoid中是1和0)。
交叉熵损失函数(Cross-Entropy Loss)用梯度下降法(Gradient Descent)优化。对初学者来说,逻辑回归用于分类,而不是回归。你也可以把逻辑回归看作一层神经网络。逻辑回归通过使用梯度下降法或者L-BFGS算法优化。NLP自然语言处理者们通常把它称之为最大熵分类器。
使用LR来训练非常简单,却是十分强有力的分类器。
http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html
https://www.youtube.com/watch v=-la3q9d7AKQ
SVM(支持向量机)是线性模型,类似线性/逻辑回归。不同之处在于它们具有不同的基于边际损失函数(支持向量的推导是我所看到过的最美的数理成果之一,和特征值的计算可以媲美)。你可以使用诸如B-FGS甚至SGD等优化方法来优化损失函数。
SVMs的另一个创新是,在特征工程中kernel使用。如果你有很好的领域洞察力,你可以用更好的kernel来代替旧的RBF kernel,并从中受益。
SVMs独一无二的特性就是可以学习一个类别的分类器
SVMs可以用来训练分类器(甚至回归函数)。
http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html
https://www.youtube.com/watch v=eHsErlPJWUU
这些基本上是多层逻辑回归分类器。许多层权重由非线性(SigMOID,TANH,Relu+SULTMax和cool new SELU)分隔。它另一个比较知名的名字是多层感知器。前馈神经网络作为自动编码器,可用于分类和非监督特征学习。
前馈神经网络作为自动编码器,可用于训练分类器或提取特征。
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
http://www.deeplearningbook.org/contents/mlp.html
http://www.deeplearningbook.org/contents/autoencoders.html
http://www.deeplearningbook.org/contents/representation.html
当今,世界上几乎所有基于视觉的机器学习成果,都已经通过卷积神经网络实现。它们可以用于图像分类、目标检测甚至图像分割。
这是Yann Lecun在上世纪80年代末90年代初的发明,其特征在于卷积层充当分层特征提取器。你也可以在文本中使用它们(甚至是图形)。
convnets用于最先进的图像和文本分类、目标检测、图像分割。
https://developer.nvidia.com/digits
https://github.com/kuangliu/torchcv
https://github.com/chainer/chainercv
https://keras.io/applications/
http://cs231n.github.io/
https://adeshpande3.github.io/A-Beginner%27s-Guide-To-Understanding-Convolutional-Neural-Networks/
RNN通过在聚合状态下,递归的使用同样的权重,来对一个序列建模。前提是这个序列在0..t..T时间点上有输入,并且在时间t有从RNN的t-1步输出的隐含层。
现在纯的RNN已经很少使用了,取而代之的是代表序列建模最前沿的,与它对应的LSTMs和GRUs。
RNN(如果有紧密连接和非线性,现在f通常是LSTMs和GRUs的)。在纯的RNN中,LSTM单元取代了紧密连接层。
使用RNNs去完成序列建模的任务,如文本分类、机器翻译、语言建模。
https://github.com/tensorflow/models (Many cool NLP research papers from Google are here)
https://github.com/wabyking/TextClassificationBenchmark
http://opennmt.net/
http://cs224d.stanford.edu/
http://www.wildml.com/category/neural-networks/recurrent-neural-networks/
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
CRFS可能是概率图形模型家族(PGMs)中最常用的模型。它们被用于像RNNs这样的序列建模,也可以与RNNs结合使用。它是神经机器翻译系统进入CRFs之前最先进的技术,并且在许多序列中用小的数据集标记任务。
目前,CRFS仍然比RNNs这样需要大量数据量支撑的算法更有优势。它们也可用于其他结构化预测任务,如图像分割等。CRF对序列中的每一个元素(例如一个句子)进行建模,使得其序列中某个组件的标签相互影响,而不是所有的标签彼此独立。
使用CRFs标记序列(文本、图像、时间序列、DNA等)。
https://sklearn-crfsuite.readthedocs.io/en/latest/
http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields/
假如,我得到一份关于各种水果数据的Excel表格,并需要告知哪些是苹果时,会抛出这么几个问题:
•第一个问题:“哪些水果是红色+圆形的?”
并用“是”和“否”来区分所有水果。
不过,所有的红色+圆形水果可能不是苹果,所有的苹果都不会只是红色+圆形的。
•第二个问题:在所有的红色+圆形水果中“哪些有红色or黄色的特征?”
同时我也会问,在所有非红色的圆形水果中“哪些是绿色+圆的。”
基于这些问题,我可以准确地分辨出哪些是苹果。
这一连串的问题就是决策树。
但是,这是一个基于我们直觉的决策树。直觉并不能在高维和复杂的数据上工作。我们必须通过查看标记数据来自动提出这一连串的问题。这就是基于决策树的机器学习技术所要做的。
早期的版本如CART树,曾经被用于处理简单的数据,但随着数据集越来越大,权衡方差与偏差需要用更好的算法来解决。如今正在使用的两种常用决策树算法是随机森林(在属性的随机子集上建立不同的分类器,并将它们组合成输出)和提升树(它不停地训练上层,用于纠正下层的错误)
决策树可以用来对数据点进行分类(甚至回归)。
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/
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
注:“友盟+”翻译
原作者 | Muktabh Mayank, ParallelDots.
原文链接 | https://www.kdnuggets.com/2018/04/10-machine-learning-algorithms-data-scientist.html
10大机器学习算法,你看懂了几个呢?
来源:友盟全域数据