03月02, 2018

机器学习常用算法整理

在过去这段时间里,机器学习及其相关技术已经获得了巨大进步,他们赋予机器完美的记忆力、稳定性等等人类并不具备的特质,同时机器对人类的超强模仿和判断力引发了科学、心理学和哲学得一系列讨论,今天我们就从算法层面入手,展开属于我们自己的探寻。

常用的几种机器学习算法

机器学习的算法模型有很多,涉及面非常广。目前机器学习研究中的一些基本理论和重要技主要有分类问题、聚类问题和优化问题。如果选择合适的算法可以参考下面这张图。

image

接下将重点分享几种常用算法的机器学习算法,本文将不涉及人工神经网络,这块内容之后抽时间再单独整理成文。

0x00 从决策树到Adaboost算法

决策树 (Decision Tree) 是一个决策支持工具,决策树方法的目标就是在一个树的结构上,根据节点的判断来搜索类别,对于一个二分判决问题,我们可以将其类比为二叉树,用内部节点代表一个特征或者属性,用叶子节点代表一个类别。 image

决策树算法实现: https://github.com/HenryKamg/machine_learning/tree/master/DecisionTree

Adaboost 是Ensemble算法中比较经典的一种,训练集中的每个样本,赋予其一个权重,这些权重构成向量D。一开始,这些权重都初试化成相等值1/N,其中N为样本个数。首先在训练数据上训练出一个弱分类器并计算该分类器的错误率,然后在同一数据集上再次训练弱分类器。接着,在分类器的第二次训练当中,将会重新调整每个样本的weight,其中第一次正确分类的样本的weight将会降低,而第一次错误分类的样本的weight将会提高。为了从所有分类器中得到最终的分类结果,AdaBoost会为每个分类器都赋予一个权重值α,这些α则是基于每个分类器的错误率进行计算的。

image

Adaboost算法实现: https://github.com/HenryKamg/machine_learning/tree/master/Adaboost

0x01 从SVM到Structured SVM (结构化支持向量机)

支持向量机 (Support Vector Machine, SVM) 是二进制分类算法。给定N维坐标下两种类型的点,SVM生成(N-1)维的超平面来将这些点分成两组。假设你在平面上有两种类型的可以线性分离的点,SVM将找到一条直线,将这些点分成两种类型,并且这条直线尽可能远离所有这些点。 image

SVM算法实现: https://github.com/HenryKamg/machine_learning/tree/master/SVM

结构化支持向量机 (Structured SVM, SSVM) 可以理解为对传统SVM的一种扩展。所谓structured,是体现在svm的output上。传统的svm的输出是单变量,比如预测class label或者regression value等等。而structured svm允许学习一个分类器来产生structured output label。比如说可以用在句子分词上,输出是句子分词后的结构。还有用在排序上,输入是查询和相关的文档,输出的是这些文档的一个ranking。 image

SSVM算法实现: http://www.cs.cornell.edu/people/tj/svm_light/svm_struct.html

0x02 从线性回归到Logistic回归

逻辑回归 (Logistic Regression)是一个强大的统计学方法,它可以用一个或多个解释变量来表示一个二项式结果。它通过使用逻辑函数来估计概率,从而衡量类别依赖变量和一个或多个独立变量之间的关系,后者服从累计逻辑分布。该模型应用场景包括信用评分、预测收入、特定一天地震预测等等。 image

Logistic回归模型实现: https://github.com/HenryKamg/machine_learning/tree/master/LogisticRegression

线性回归 (Liner Regression)是用于回归的,它不像Logistic回归那样用于分类,其基本思想是用梯度下降法对最小二乘法形式的误差函数进行优化,当然也可以用normal equation直接求得参数的解。线性回归的优点是实现、计算简单,但是不能拟合非线性数据,比如多维数组。 image

线性回归模型实现: https://github.com/HenryKamg/machine_learning/tree/master/LinerRegression

0x03 从KNN到K-means

K均值聚类 (K-means)是聚类中的经典算法,数据挖掘十大经典算法之一;算法接受参数k,然后将事先输入的n个数据对象划分为k个聚类以便使得所获得的聚类满足聚类中的对象相似度较高,而不同聚类中的对象相似度较小。 image

K-means算法实现: https://github.com/HenryKamg/machine_learning/tree/master/Kmeans

K近邻算法 (K-NearestNeighbor, KNN) 是如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 image

KNN算法实现: https://github.com/HenryKamg/machine_learning/tree/master/KNN

0x04 从HMM到朴素贝叶斯

隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数。然后利用这些参数来作进一步的分析,例如模式识别。 image

HMM模型算法实现: https://github.com/HenryKamg/hmmlearn

朴素贝叶斯 (Naive Bayesian) 属于生成式模型(关于生成模型和判别式模型,主要还是在于是否需要求联合分布),比较简单,你只需做一堆计数即可。如果注有条件独立性假设(一个比较严格的条件),朴素贝叶斯分类器的收敛速度将快于逻辑回归等判别模型,所以你只需要较少的训练数据即可。即使NB条件独立假设不成立,NB分类器在实践中仍然表现的很出色。 image

朴素贝叶斯模型实现: https://github.com/HenryKamg/machine_learning/tree/master/NaiveBayes

参考文献

[1] https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff

[2] http://blog.echen.me/2011/04/27/choosing-a-machine-learning-classifier/

[3] http://www.csuldw.com/2016/02/26/2016-02-26-choosing-a-machine-learning-classifier/

本文链接:https://www.opsdev.cn/post/machine-learning-algorithms.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。