28

成为数据科学家应该知道的10种机器学习算法

 5 years ago
source link: http://www.apexyun.com/cheng-wei-shu-ju-ke-xue-jia-ying-gai-zhi-dao-de-10chong-ji-qi-xue-xi-suan-fa/?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

了解为了成为数据科学家而应该了解的十种机器学习算法。

机器学习从业者有不同的个性。虽然其中一些是“我是X专家,X可以训练任何类型的数据”,其中X =某种算法,其他人是“正确的工具用于正确的工作”的人。他们中的很多人还订阅了“各行各业的高手”的策略,他们拥有一个深厚的专业领域,并且对机器学习的不同领域略有了解。也就是说,没有人可以否认这样一个事实:作为实践数据科学家,我们必须了解一些常见机器学习算法的基础知识,这将有助于我们处理我们遇到的新域问题。这是常见机器学习算法的旋风之旅,以及有关它们的快速资源,可以帮助你开始使用它们。

Principal Component Analysis (PCA)/SVD

PCA是一种无监督的方法,用于理解由向量组成的数据集的全局属性。此处分析协方差数据点矩阵,以了解哪些维度(大多数)/数据点(有时)更重要(即,它们之间的差异很大,但与其他维度的协方差很小)。考虑矩阵的顶级PC的一种方法是考虑具有最高特征值的特征向量。SVD本质上也是一种计算有序分量的方法,但是你不需要得到点的协方差矩阵来得到它。

FRf2qaB.png!web

该算法通过获取降维数据点来帮助人们克服维数的困扰。

Libraries

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具有封闭式的解决方案,因此你无需使用复杂的优化技术。

mErMbai.jpg!web

很明显,使用此算法来拟合简单的曲线/回归。

Libraries

https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.html https://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(岭回归)或两者(弹性回归)。平均平方损失得到优化。

6VVr2u2.jpg!web

使用这些算法来拟合带有约束的回归线,并避免从模型中过度拟合和掩盖噪声维度。

Libraries

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

入门教程

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

K-Means聚类

每个人都喜欢无监督的聚类算法。给定一组矢量形式的数据点,我们可以根据它们之间的距离制作点集。它是一种期望最大化算法,它迭代地移动集群的中心,然后逐个移动每个集群中心的点。算法所采用的输入是要生成的簇的数量以及它将尝试聚合簇的迭代次数。

7NnIrm3.png!web

从名称中可以明显看出,你可以使用此算法在数据集中创建K个群集。

Libraries

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

Logistic回归

Logistic回归是受约束的线性回归,在应用权重后具有非线性(主要使用Sigmoid函数或者你也可以使用tanh)应用,因此将输出限制为接近+/-类(在sigmoid的情况下为1和0)。使用Gradient Descent优化交叉熵损失函数。初学者须知:Logistic回归用于分类,而不是回归。你还可以将Logistic回归视为单层神经网络。使用梯度下降或L-BFGS等优化方法训练Logistic回归。NLP人员通常会将其命名为Maximum Entropy Classifier。这就是Sigmoid的样子:

e6JBJrn.jpg!web

使用LR来训练简单但非常强大的分类器。

Libraries

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

入门教程

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

SVM(支持向量机)

SVM是线性模型,如线性/逻辑回归,不同之处在于它们具有不同的基于边缘的损失函数(支持向量的推导是我在特征值计算中看到的最美丽的数学结果之一)。你可以使用L-BFGS甚至SGD等优化方法优化损耗函数。

iuIZ737.jpg!web

SVM的另一项创新是将数据内核用于特征设计。如果你有很好的领域洞察力,你可以用更智能的RBF内核替换旧的RBF内核并获利。SVM可以做的一件独特事情是学习一个类分类器。SVM可用于训练分类器(甚至是回归量)。

Library

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

入门教程

https://www.youtube.com/watch?v=eHsErlPJWUU 注意 :基于SGD的Logistic回归和SVM训练都可以在 SKLearn 中找到,我经常使用它,因为它让我可以用通用接口检查LR和SVM。你还可以使用小批量在> RAM大小的数据集上训练它。

前馈神经网络

这些基本上是多层Logistic回归分类器。许多层的权重由非线性分开(sigmoid,tanh,relu + softmax和cool new selu)。另一个流行的名字是Multi-Layered Perceptrons。FFNN可用作自动编码器的分类和无监督特征学习。

n673Uj2.jpg!web

多层感知器

73eY7zF.jpg!web

FFNN作为自动编码器 FFNN可用于训练分类器或提取特征作为自动编码器。

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

入门教程

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

卷积神经网络(Convnets)

使用卷积神经网络几乎可以实现当今世界上任何最先进的基于视觉的机器学习结果。它们可用于图像分类,物体检测甚至图像分割。在80年代末期至90年代初由Yann Lecun发明的Convnets具有卷积层,可作为层次特征提取器。你也可以在文本中使用它们(甚至是图形)。

6jQbAf7.png!web

使用convnets进行最先进的图像和文本分类,对象检测,图像分割。

Libraries

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)

RNN通过在时间t递归地在聚合器状态上应用相同的权重集并且在时间t输入来给模型序列建模(给定序列有输入时间0..t..T,在每个时间t具有隐藏状态这是从RNN的t-1步输出的。纯粹的RNN现在很少使用,但其对应物如LSTM和GRU在大多数序列建模任务中都是最先进的。

Uvuu6jf.jpg!web

RNN(如果存在密集连接的单元和非线性,则现在f通常是LSTM或GRU)。LSTM单元用于代替纯RNN中的普通密集层。

N7rQbuY.jpg!web

将RNN用于任何序列建模任务,尤其是文本分类,机器翻译和语言建模。

Library:

https://github.com/tensorflow/models (谷歌的许多很酷的NLP研究论文都在这里) 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/

条件随机场(CRF)

CRF可能是概率图形模型(PGM)系列中最常用的模型。它们用于像RNN一样的序列建模,也可以与RNN结合使用。在神经机器翻译系统出现之前CRF是最先进的,并且在许多序列标记任务中使用小数据集,它们仍然比需要更大量数据的RNN更好地学习。它们还可以用于其他结构化预测任务,如图像分割等.CRF对序列的每个元素(比如句子)进行建模,使得邻居影响序列中组件的标签,而不是所有标签彼此独立。使用CRF标记序列(在文本,图像,时间序列,DNA等中)。

Library:

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

入门教程

http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields/ https://www.youtube.com/watch?v=GF3iSJkgPbA

决策树

假设我给了一张Excel表格,上面有关于各种水果的数据,我必须说出苹果的外观。我要做的是问一个问题“哪些水果是红色和圆形的?”并将所有回答是和否的水果分开。现在,所有红色和圆形水果可能不是苹果,所有苹果都不会是红色和圆形的。所以我会问一个问题“哪些水果上有红色或黄色的暗示?“在红色和圆形的水果上,会问”哪些水果是绿色和圆形的?“不是红色和圆形的水果。基于这些问题,我可以准确地说出苹果。这一系列问题就是决策树。但是,这是一个基于我的直觉的决策树。直觉不能用于高维和复杂数据。我们必须通过查看标记数据自动提出级联问题。这就是基于机器学习的决策树所做的事情。像CART树这样的早期版本曾经用于简单数据,但随着数据集越来越大,偏差 - 方差权衡需要用更好的算法来解决。现在使用的两种常见的决策树算法是随机森林(在随机的属性子集上构建不同的分类器并将它们组合用于输出)和Boosting Trees(将树木级联培训在其他树上,纠正下面的错误)他们)。决策树可用于对数据点进行分类(甚至回归)。

Library

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种算法都是模式识别,而不是策略学习者。要学习解决多步问题的策略,例如赢得国际象棋或玩Atari控制台,我们需要让世界上没有代理人,并从其面临的奖励/惩罚中学习。这种类型的机器学习称为强化学习。最近在该领域取得的成功很多(并非全部)是将Convnet或LSTM的感知能力与称为时间差异学习的一组算法相结合的结果。这些包括Q-Learning,SARSA和其他一些变体。这些算法主要用于自动播放游戏,也用于语言生成和对象检测中的其他应用。

Library

https://github.com/keras-rl/keras-rl https://github.com/tensorflow/minigo

入门教程

https://web2.qatar.cmu.edu/~gdicaro/15381/additional/SuttonBarto-RL-5Nov17.pdf https://www.youtube.com/watch?v=2pWv7GOvuf0 这些是你可以学习成为数据科学家的十种机器学习算法。你还可以 在此处 阅读有关机器学习库的 信息

点击英文原文链接

更多文章欢迎访问: http://www.apexyun.com

公众号:银河系1号

联系邮箱:[email protected]

(未经同意,请勿转载)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK