社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

初学者需要掌握的十大机器学习算法

CVer • 7 年前 • 855 次点击  

点击上方“CVer”,选择“置顶公众号”

重磅干货,第一时间送达

编译:Bot

转载自:论智,未经允许不得二次转载


注:文末有【每日一题】,欢迎打卡


编者按:2016年知名数据科学专业平台KDnuggets在网站上列出了10大开发者必备的机器学习算法排名,受到众多读者欢迎。近期,作者Reena Shaw又结合当前发展重写原文,再一次吸引了大量数据科学家的目光。文章中包含算法简析和数字、实例展示,十分适合ML初学者阅读。为了方便国内读者,论智现将原文编译如下:

一、导语

数据科学家”是“21世纪最性感的工作。”不久前,“哈佛商业评论”在一篇报道中是这样描述的。随着机器学习(ML)算法研究工作的不断推进,数据科学家也正变得更具吸引力。那么对于那些刚开始学习ML的入门者来说,哪些是他们必备的实用算法呢?为了方便这个群体,我们重写了“10大开发者必备的机器学习算法”,并根据受众理解水平对内容进行了调整。

ML算法是指那些无需人工干预,仅凭数据和经验就能不断学习、改进的算法,它们的学习任务可能包括利用函数将输入映射到输出、在未经标记的数据中学习隐藏结构;或者是“基于实例学习”,通过新实例训练结合储存在存储器中的训练数据对比生成类标签。

二、ML算法类型

ML算法的类型可分为监督学习、无监督学习和强化学习三种。

1.监督学习

我们可以把监督学习简单解释为使用经标记的训练数据来学习映射函数:将输入变量(X)映射到输出变量(Y):

Y = f (X).

监督学习问题主要有两类:

  • 分类(Classification):根据给定样本预测输出变量所属的类别形式,如男性/女性、疾病/健康等。

  • 回归(Regression):根据给定样本预测输出变量的实值,如降雨量、身高等。

本文介绍的前5种算法——线性回归、logistic回归、CART、朴素贝叶斯和KNN——都是监督学习下的典型算法。

事实上,集成学习也可以算作监督学习算法的一类。

集成学习即通过多个分类器对数据集进行预测,从而提高整体分类器的泛化能力。当面对一个任务时,算法会训练一些弱分类器,之后把它们组合起来,以获得更好的预测性能。它的思路是集体平均决策的表现会被单个分类器效果好,一般有Boosting、Bagging、Stacking三种方式。

2.无监督学习

无监督学习问题只有输入变变量(X),而没有输出变量(Y),它使用没有标签的训练数据来模拟数据的基本结构。

无监督学习问题也可被分为以下几类:

  • 关联(Association):发现样本集中数据共现的概率。这在“市场篮子分析”(market-basket analysis)中有很广泛的应用,比如当一个顾客买了面包后,他会有80%的概率再买鸡蛋;

  • 聚类(Clustering):即对样本进行分类,使同一类中的样本更相似,彼此间的关系更紧密。

  • 降维(Dimensionality Reduction):正如它的名称,降维意味着在确保重要信息传递的前提下减少数据集中的变量,它常用的方法是特征提取(执行从高维空间到低维空间的数据转换)和特征选择(选择原始变量的一个子集)。PCA算法是一种特征提取方法。

本文中的Apriori、K-means和PCA都是无监督学习的典型算法。

3.强化学习

强化学习是一种ML算法,它允许agent根据当前状态选择下一步行动(最佳),通过学习实现行为的奖励最大化。

强化学习算法通常利用反复试验来学习最佳行为,它在机器人上有很广泛的应用。如在训练机器人时,开发者可以设定“碰撞”行为将获得负面奖励,那机器人会朝着规避障碍物的方向发展,这也是游戏AI常用的套路。

三、十大机器学习算法

1.线性回归

在ML问题中,如果我们有一组输入变量(X),要用它们得出输出变量(Y),而输入变量和输出变量之间存在某种联系,那ML算法的作用就是量化这种联系。

线性回归示意图

在线性回归算法中,输入变量(X)和输出变量(Y)的关系可被表示为函数y=ax+b,因此我们的目标是找出系数a和b的值。

如上图所示,a为曲线在y轴上的截距,b是曲线的斜率,而这些点就是数据集中各个值,我们需要训练模型使它们尽可能地接近曲线,缩小数据点和y值的距离(误差)。

2.logistic回归

logistic回归和线性回归有很多相似之处,但也有不小的区别,其中最突出的一点是:线性回归预测的值的连续的,而logistic回归预测的值需要经过其他函数变换,是不连续的。

logistic回归适合二进制分类(y=0或1的数据集,其中1表示默认类),如当预测某一件事是否发生时,发生的事件被表示为1,不发生则为0(例:判断某人是否生病,那生病即是1)。它的名称源于使用的变换函数,这是一个逻辑函数h(x)=1/(1+e^-x),在图中表示为一条S形曲线。

在logistic回归算法中,输出是以默认类概率的形式出现的(不同于直接产生输出的线性回归)。因为这是一个概率,它的输出在0—1之间,所以我们需要先对x做对数转换,再由h(x)=1/(1+e^-x)生成输出概率y,最后用一个阈值强制这个概率进行二元分类。

logistic回归示意图

假设我们正在用logistic回归预测肿瘤是否是恶性的,如果是恶性的,则y=1。如上图所示,logistic回归算法中的逻辑函数将数据集中样本各个值的x转换成范围在0—1之间的数h(x),如果概率大于0.5,那就是恶性肿瘤。

方程p(x) = e^(b0+b1×x)/(1+ e^(b0+b1×x))也可被表示为ln(p(x)/1-p(x) )= b0+b1×x。

逻辑回归的目标是通过训练数据找到b0和b1的值,来缩小预测结果和实际结果的误差。这些系数都是用最大似然估计得出的。

3.CART

分类和回归树(CART)是决策树的一种,它由特征选择、树的生成和剪枝三部分组成。

其中,根节点和内部节点是非终端节点,表示单个输入变量(X)及其分裂,叶节点是终端节点,表示输出变量(Y)。如果一个模型基于CART算法设计,那它的思路就是输入值从整棵树的根部进入计算,经分裂后它会最终到达一个叶节点,而这个存在于叶节点上的值就是输出。

我们可以举一个简单的例子:根据对象的年龄和婚姻情况判断他是买跑车还是小型货车。假设买跑车的是30岁以下人士和30岁以上未婚人士,而买小型火车的是30岁以上已婚人士,如下图所示:

CART示意图

如果这个人已经三十多岁了,还没有结婚,那算法的分类流程是“30多岁?——是——已婚?——否”,最后输出“跑车”。

4.朴素贝叶斯

朴素贝叶斯是一种基于贝叶斯定理的算法,为了计算事件发生的概率,它假设已经发生了另一个事件。

贝叶斯定理

其中:

  • P(c|x)称后验概率,是给定x后,c为真的概率。

  • P(x|c)表示似然值,是给定c后,x为真的概率。

  • P(c)是类别先验概率,计算的是c为真的概率(不考虑数据)。

  • P(x)则是预测值的先验概率,表示x的可能性(与假设无关)。

这个算法被称为是“naive”的,中文可译为“天真”“朴素”,因为它假设所有变量都是相互独立的,事实上,这在现实中几乎不可能存在。

用朴素贝叶斯预测出去玩的概率

上图是论智6步骤带你了解朴素贝叶斯分类器(含Python和R语言代码)中根据天气条件进行分类,判断这个人能不能出去玩一个案例:

步骤1:将数据集转换成频率表;

步骤2:计算不同天气出去玩的概率,并创建似然表,如阴天的概率是0.29;

步骤3:使用贝叶斯公式计算每一类的后验概率,数据最高那栏就是预测的结果。

问题:如果是晴天,这个人就能出去玩。这个说法是不是正确的?

P(是|晴朗)=P(晴朗|是)×P(是)/P(晴朗)

在这里,P(晴朗|是)= 3/9 = 0.33,P(晴朗)= 5/14 = 0.36,P(是)= 9/14 = 0.64

现在,P(是|晴朗)=0.33×0.64/0.36=0.60,具有较高的概率,所以输出为“是”。

5.KNN

KNN算法即K Nearest Neighbor算法,它将整个数据集作为训练集,而不是将数据集划分为测试集和训练集。

这是一种相对容易理解的算法,当需要对一个新的数据样本输出结果时,KNN算法会从数据集中找出最接近输入样本的K个数据样本,然后对它们的输出做平均,这个平均值就是最终输出的值。简单来说,这种算法基于数据归类处理,它的K值由开发者设定。

在判断输入样本与数据样本的相似度时,KNN算法依靠的是欧氏距离、汉明距离等机器学习常用距离公式。

6.Apriori

Apriori是一种针对频繁项集的算法,能挖掘布尔关联规则,正如上文中所提到的,它是一种非监督学习算法,常被用于“市场篮子分析”。在这类分析中,Apriori会检查数据库中频繁出现的产品组合。如果我们设一个人先购买了商品X,又购买了商品Y,那它们之间的关联可被表示为X - > Y。

例如,如果一个人购买了牛奶和糖,那么他很有可能会再买一些冲调咖啡,这时,他的行为可以被表示为一个关联式:{牛奶,糖} - >冲调咖啡。这样的关联规则是建立在足够的支持度和信任度基础上的。

用Apriori进行“市场篮子分析”

如上图所示,Apriori可分为三个步骤:先是从数据集中搜索所有频繁项集,开发者设定的支持度(support)作为频繁项的阈值,可以在剪枝时筛去所有不符合要求的项目;其次是利用频繁项集构造出满足用户最小信任度(confidence)的规则;最后得出真正的频繁项集。

在衡量支持度时,Apriori规定如果一个项集是频繁的,那它的所有子集也必须是频繁的。

7.K-means

K-means算法即K-均值聚类算法。它是一种迭代算法,当接受输入量k后,算法会将n个数据对象划分为k个聚类,用以获得相应的聚类满足:同一聚类中的对象相似度较高,而不同聚类中的对象相似度较小。简单来说,就是K-means会计算数据点到聚类质心的距离,距离越小,相似度越高,之后把距离相近的数据归为一类。

下图展示了K-means的聚类原理:

K-means示意图

步骤1:K-means初始化;

  • 设定k值,在上图中,我们取k=3;

  • 将数据点随机划分成3个聚类;

  • 为每个聚类计算质心,用红、黄、蓝三颗星表示。

步骤2:将每个数据点与质心关联;

将每个数据点按照和质心的距离重新分配到新的类别中,在上图中,5个数据点和蓝星归为一类。

步骤3:重新计算质心;

计算新聚类的质心,红、黄、蓝表示新质心,灰色星星则是原质心。

步骤4:重复步骤2、步骤3进行迭代,如果数据不再发生变化,算法结束。

8.PCA

PCA(主成分分析)是前文提到的非监督学习算法中的降维类算法,它用尽可能少的变量去分析存在于这些变量中的信息,使数据更易于搜索和可视化。

PCA的思路是将一个高维向量x,通过一个特殊的特征向量矩阵U,投影到一个低维的向量空间中,表征为一个低维向量y,并且仅仅损失了一些次要信息。从计算角度说,如果原数据是一个n维的样本,我们需要利用均值建立一个k(k

简要来说,就是通过计算最大方差获得样本在“principal components”这条轴上的新坐标。每个成分(components)都和原样本线性相关,切彼此正交。如果两个成分出现了正交性,那就证明它们之间的相关性为0。

如上图所示,PC1捕捉到了数据集中的最大变化方向,而PC2获得了一些剩余变量,但这些变量与PC1不相关。

9.Bagging和随机森林

Bagging和随机森林都是对单棵决策树效果的提升。

Bagging很难翻译,虽然名字里带了一个bag,但其实它和袋子完全没有关系,而是Bootstrap aggregation的缩写,因此可以简单理解为是一种抽样方法。当进行Bagging时,它首先会从数据集中重复抽取大小为N的子样本,这就导致有的数据会重复出现,而有的不会。之后,原始数据集会被作为测试集,而多个子样本则为训练集。需要注意的是,原始数据集的大小是N,测试数据集的大小是N,训练集的大小也是N。

之后,Bagging会针对这些训练集建立分类器,根据之前的抽样方法反复抽样m次,得到m个分类器。当做到这一步时,传统的做法是把原始数据放进这些分类器中,由它们评分输出最终值。但我们可以引入一个进化版本——随机森林。

不同于单棵决策树把每个节点都分割成最佳表征,随机森林的一般做法是首先从样本中随机抽取n个样本,然后结合随机选择的表征K,对它们进行m次决策树构建,得到m棵树。和Bagging相比,它多了一次针对表征的随机选择。

10.boosting和AdaBoost

如果说Bagging是一个并行的集合,因为每个分类器都是彼此独立的,那么AdaBoost就是一种连续的方法,因为它每个模型的建立都基于纠正前一个模型的错误分类。

正如之前提到的,Bagging采取的是一种多个分类器简单评分的方式。而boosting是和Bagging对应的一种将弱分类器组合成为强分类器的算法框架,它其中的一种算法是AdaBoost,即在建立多个弱分类器的基础上,为分类器进行权重赋值,性能好的分类器能获得更多权重,从而使评分结果更理想。

AdaBoost分类示意图

上图是AdaBoost分类的图解,从中我们可以发现:

步骤1:首先训练一个分类器对输入数据进行分类;

如图①所示,所有圆形和三角形此时权重一致,分类器把它们分成了两类,但其中下方的两个圆形被错误地归类为三角形,因此,该分类器在图上上部数据的分类上有优势。之后,我们提高了这两个圆的权重,并把它们放入下一个分类器。

步骤2:将重新分配权重的数据放入下一个分类器;

如图②所示,第二个分类器明显发现了权重较重的两个圆,并把它们归位一类,但它却没能分清其他圆形和三角形的差别,因此,它在图像左侧数据分类上被圆形加权,在这一区域有更好的优势。之后,我们对右侧数据中被错分的三个圆形做权重调整。

步骤3:将重新分配权重的数据放入下一个分类器;

如图③所示,这一次第三个分类器判断出了图像右侧的两个三角形,但没能分辨左侧数据,因此在右侧有一定权重优势。

步骤4:结合三个分类器进行决策。

如图④所示,该强分类器展示了3个弱分类器的评分结果,每块区域的分类情况由该区域权重高的分类器决定,所以即便是最简单的分类器,它们组合起来也会有不错的效果。

四、结语

回顾全文,我们可以掌握:

  1. 5种监督学习算法:线性回归、Logistic回归、CART、朴素贝叶斯和KNN;

  2. 3种非监督学习算法:Apriori、K-means、PC;

  3. 2种集成技巧:Bagging和随机森林、boosting和AdaBoost。

原文地址:

https://www.kdnuggets.com/2017/10/top-10-machine-learning-algorithms-beginners.html/

昨天回忆


15.【单选题】下列哪个神经网络结构会发生权重共享?


A. 卷积神经网络 

B. 循环神经网络 

C. 全连接神经网络 

D. 选项A和B 


正确答案:D


每日一题


16.【单选题】关于支持向量机SVM,下列说法错误的是?


A.L2正则项,作用是最大化分类间隔,使得分类器拥有更强的泛化能力

B.Hinge 损失函数,作用是最小化经验分类错误

C.分类间隔为1/||w||,||w||代表向量的模

D.当参数C越小时,分类间隔越大,分类错误越多,趋于欠学习


如何看到【每日一题】?


答:CVer每篇文章的底部、CVer微信群和CVerQQ群,这三个平台会同步推送。


Amusi会把每天更新的题目与答案都上传到daily-question】

daily-question github

https://github.com/amusi/daily-question


欢迎给CVer点赞和转发


▲长按关注我们


听说看完点赞和点Ad的CVer,发顶会/顶刊的机会更大哦

  👇👇👇                 👇👇👇


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/yOlDdD1iQK
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/24046