我们向初学者介绍十大机器学习(ML)算法,并附上数字和示例,方便理解。
简介
“哈佛商业评论”的一篇文章(https://hbr.org/2012/10/data-scientist-the-sexiest-job-of-the-21st-century)将“数据科学家”评为“21世纪最性感的工作”,对机器学习算法的研究取得了巨大的关注。因此,对于那些机器学习领域的初学者,我们决定重新撰写2016年的一篇金牌博客——机器学习工程师必须要知道的十大算法(https://www.kdnuggets.com/2016/08/10-algorithms-machine-learning-engineers.html)。
机器学习算法是能够从数据中学习和从经验中改进而不需要人为干预的算法。学习任务包括学习将输入映射到输出的函数,学习未标记数据中的隐藏结构或“基于实例的学习”,其中通过将新实例与存储在存储器中的训练数据的实例进行比较,为新实例生成类标签。“基于实例的学习”不会从具体实例中创建抽象。
机器学习算法的类型
机器学习算法有三种:
使用标示的训练数据从输入变量(x)到输出变量(y)学习映射函数。
Y = f(x)
监督学习问题有两种:
a分类:预测给定样本的结果,其中输出变量是类别。举例来说,比如男性还是女性、病态还是健康等标签。
b回归:预测输出变量为实值形式的给定样本的结果。举例来说,比如表示降雨量、一个人的身高等实际值的标签。
我们在本博客中讨论的前5种算法——线性回归、Logistic回归、CART(分类回归树)、朴素贝叶斯、KNN(K临近算法),他们都是监督学习的例子。
集成(Ensembling)是一种监督学习。这意味着结合多个不同的弱机器学习模型的预测来预测新的样本。
无监督学习问题仅具有输入变量(x),但没有相应的输出变量。它使用未标记的训练数据来模拟数据的底层结构。
无监督的学习问题有两种:
A关联:发现集合中同现的概率。广泛应用于购物篮分析。示例:如果客户购买面包,他有80%可能也会购买鸡蛋。
B聚类:分组样本,使得同一群集中的对象彼此之间比来自另一个群集的对象更相似。
C降维:就其名称而言,Dimensionality Reduction(减少维度)意味着减少数据集的变量数量,同时确保重要的信息仍然被传达。使用特征提取方法和特征选择方法可以进行降维。特征选择选择原始变量的一个子集。特征提取执行从高维空间到低维空间的数据变换。示例:PCA算法(主成分分析算法)是一种特征提取方法。
我们在这里介绍的算法6-8——Apriori、K-means、PCA(主成分分析算法)都是无监督学习的例子。
强化学习是一种机器学习算法,允许智能体通过学习最大化奖励的行为来决定基于其当前状态的最佳下一个动作。
强化算法通常通过尝试和失误来学习最佳动作。它们通常用于机器人技术——机器人可以通过在碰撞障碍物之后接收负反馈而学习避免碰撞,而在视频游戏中可以通过尝试和错误揭示特定的动作,从而可以激发奖励。然后,智能体可以使用这些奖励了解游戏的最佳状态,并选择下一个动作。
量化机器学习算法的流行度
有人做过一些调查报告(http://www.cs.uvm.edu/~icdm/algorithms/10Algorithms-08.pdf),量化了10种最流行的数据挖掘算法。然而,这样的列表是主观的,就引用的论文而言,被调查参与者的样本规模非常窄,都是数据挖掘的高级从业人员。被调查者包括ACM KDD创新奖、IEEE ICDM研究贡献奖的获奖者,KDD-06、ICDM'06和SDM'06的计划委员会成员和ICDM'06的145位与会者。
本博客中的十大算法适用于初学者,主要是我在计算机工程学士学位期间从“数据存储与挖掘”(DWM)课程中学到的。DWM课程是机器学习算法领域的一个很好的介绍。基于Kaggle比赛的流行度,我特别涵盖了最后2个算法(集成方法)。希望你喜欢这篇文章!
监督学习算法
1. 线性回归
在机器学习中,我们有一组用于确定输出变量(y)的输入变量(x)。输入变量和输出变量之间存在关系。机器学习的目标是量化这种关系。
图1:线性回归以y = ax + b的形式表示为一条直线
在线性回归中,输入变量(x)和输出变量(y)之间的关系表示为y = ax + b形式的等式。因此,线性回归的目标是找出系数a和b的值。这里,a是截距,b是线的斜率。
图1显示了数据集的x和y值。目标是找到匹配最接近大多数点的线。这将减少数据点的y值和行之间的距离(error)。
2. Logistic回归
线性回归预测是连续值(比如以cm为单位的降水),Logistic回归预测是应用变换函数后的离散值(比如学生是否考过/挂科)。
Logistic回归最适合于二进制分类(y = 0或1,其中1表示默认类)的数据集。示例:在预测事件是否发生时,其发生的事件被分类为1;在预测是否病人不生病,病例均为1。它以其中使用的转换函数命名,称为Logistic函数h(x)= 1 /(1 + e ^ x),它是一个S形曲线。
在Logistic回归中,输出是默认类的概率的形式(与直接生成输出的线性回归不同)。因为这是一个概率,输出在0-1的范围内。使用逻辑函数h(x)= 1/(1 + e ^ -x)通过log变换x值来生成输出(y值)。然后应用阈值将该概率强制为二进制分类。
图2:用于确定肿瘤是恶性还是良性的Logistic回归。如果概率h(x)> 0.5,则分类为恶性。
在图2中,为了确定肿瘤是否恶性,默认变量为y = 1(肿瘤=恶性)。x变量可以是肿瘤的测量,例如肿瘤的大小。如图所示,Logistic函数将数据集的各种实例的x值转换为0到1的范围。如果概率超过阈值0.5(由水平线表示),则将肿瘤分类作为恶性。
Logistic回归方程P(x)= e ^(b0 + b1 * x)/(1 + e ^(b0 + b1 * x))可以转换为ln(p(x)/1-p(x) = b0 + b1*x。
Logistic回归的目标是使用训练数据来找到系数b0和b1的值,以便将预测结果与实际结果之间的误差最小化。使用最大似然估计技术来估计这些系数。
3. CART(分类和回归树)
分类和回归树(CART)是一种决策树的实现方法。
非终端节点是根节点和内部节点。终端节点是叶节点。每个非终端节点表示单个输入变量(x)和该变量上的分割点;叶节点表示输出变量(y)。使用以下模型进行预测:沿着树的分割走,到达叶节点并输出叶节点上存在的值。
图3中的决策树根据年龄和婚姻状况分类是否会购买跑车或小型货车。如果这个人已经超过30岁,没有结婚,我们就像下面这样沿着树走:“30多岁吗?”- >是->结婚了吗?最后,该模型输出结果是一辆跑车。
4. 朴素贝叶斯
为了计算事件发生的概率,给定另一个事件已经发生,我们使用贝叶斯定理。为了计算给定某个变量值的结果的概率,也就是计算假设(h)为真的概率,给定了我们的先验知识(d),我们使用贝叶斯定理如下:
P(h|d)=(P(d|h)*P(h))/P(d)
其中
这个算法被称为“朴素(naive)”,因为它假设所有的变量是相互独立的,这是在现实世界中做出的一个天真(naive)的假设。
图4:使用朴素贝叶斯预测使用变量“天气”的“游玩”状态。
以图4为例,如果weather ='sunny',结果如何?
考虑到变量weather ='sunny'的值,确定结果play ='yes'或'no',计算P(yes|sunny)和P(no|sunny),并以较高的概率选择结果。
- > P(yes|sunny)=(P(sunny|yes)* P(yes))/ P(sunny) =(3/9 * 9/14)/(5/14) = 0.60 - > P(no|sunny)=(P(sunny|no)* P(no))/ P(sunny) =(2/5 * 5/14)/(5/14) = 0.40
因此,如果天气=“阳光明媚”,结果是游玩=“是”。
5. KNN
k近邻算法使用整个数据集作为训练集,而不是将数据集分为训练集和测试集。
当新数据实例需要结果时,KNN算法遍历整个数据集,以找到新实例的k个最近实例,或与新记录最相似的k个实例,然后输出分类问题的结果(回归问题)或模式(最常见的类)。k的值是用户指定的。
实例之间的相似性使用诸如欧氏距离和汉明距离之类的度量来计算。
6. Apriori
Apriori算法在事务数据库中用于挖掘频繁项集,然后生成关联规则。它广泛用于购物篮分析,用于检查数据库中经常共存的产品的组合。一般来说,我们编写关联规则为:如果一个人购买物品X,那么他将物品Y,写作:X - > Y.
示例:如果一个人购买牛奶和糖,那么他很有可能购买咖啡粉。这可以以关联规则的形式写成:{milk,sugar} - >咖啡粉。关联规则是在支持度和置信度相交的阈值之后产生的。
图5:关联规则X> Y的支持度、置信度和lift公式
支持方法有助于修剪在频繁项集生成期间需要考虑的候选项集的数量。这种支持措施以Apriori原则为指导。Apriori原则指出,如果一个项目集是频繁的,那么它的所有子集也必须是频繁的。
7. K-means
K-means是一个迭代算法,将类似的数据分组成簇。它计算k个簇的质心,并将一个数据点分配给具有最小距离的质心与数据点之间的数据点。
图6:K-means算法的步骤
步骤1:k-means初始化:
步骤2:将每个观察结果与集群相关联:
将每个点重新分配到最近的聚类质心。在这里,上面5个点被分配到具有蓝色质心的群集。 按照相同的步骤将点分配给包含红色和绿色颜色质心的聚类。
步骤3:重新计算质心:
计算新集群的质心。旧的质心由灰色星星显示,而新的质心是红色、绿色和蓝色的星星。
步骤4:迭代,如果不变,然后退出。
重复步骤2-3,直到没有从一个集群到另一个集群的点切换。一旦没有连续两个步骤的切换,退出k-means算法。
8. PCA
主成分分析(PCA)用于通过减少变量的数量使数据易于探索和可视化。这是通过将数据中的最大方差捕获到具有称为“主成分”的轴的新坐标系中完成的。每个分量是原始变量的线性组合,并且彼此正交。成分之间的正交性表明这些成分之间的相关性为零。
第一个主成分捕获数据中最大变化的方向。第二个主成分捕获数据中的剩余方差,但具有与第一个成分不相关的变量。类似地,所有连续的主成分(PC3、PC4等)捕获剩余方差,而与先前的成分不相关。
图7:3个原始变量(基因)减少到称为主成分(PC)的2个新变量
集成学习技术
组合意味着通过投票或平均,结合多个学习器(分类器)的结果以改善结果。分类期间使用投票,回归期间使用平均。学习器的整体表现优于单一学习器。
有三种类型的集成算法:Bagging、Boosting和Stacking。我们不会陈述“Stacking”,但如果你想要详细解释,我可以单独为其写一篇博客。
9. 随机森林Bagging
随机森林(多学习其)是对bagged决策树(单一学习器)的改进。
Bagging:Bagging的第一步是创建使用Bootstrap采样方法创建的数据集的多个模型。在Bootstrap采样中,每个生成的训练集由原始数据集的随机子样本组成。这些训练过程与原始数据集大小相同,但有些记录重复多次,有些记录根本不显示。然后,将整个原始数据集用作测试集。因此,如果原始数据集的大小为N,则每个生成的训练样本集的大小也为N,唯一记录的数量约为(2N / 3);测试集的大小也是N。
Bagging的第二步是通过在不同的生成的训练集上使用相同的算法,创建多个模型。在这种情况下,我们来讨论随机森林。与决策树不同,每个节点在最小化误差的最佳特征上分割,在随机森林中,我们选择随机选择的特征构建最佳分割。随机性的原因是:即使有bagging,当决策树选择最佳分割特征时,它们最终具有相似的结构和相关的预测。但是,在特征的随机子集上分割后的bagging,意味着来自子树的预测之间的相关性较小。
在每个分割点处要搜索的要素的数量被指定为随机森林算法的参数。
因此,在随机森林bagging时,使用随机记录样本构建每个树,并且使用随机的预测因子样本构建每个分割。
10. AdaBoost
a)bagging是一个并行集成学习,因为每个模型是独立构建的。另一方面,boosting是一个顺序集成学习,其中每个模型都是基于修正先前模型的错误分类而构建的。
b)bagging主要涉及“简单投票”,其中每个分类器投票获得最终结果——一个由大多数并行模型确定的结果;boosting涉及“加权投票”,其中每个分类者投票以获得由多数确定的最终结果,但是通过为先前模型的错误分类实例分配更大的权重以构建顺序模型。
Adaboost代表Adaptive Boosting。
图8:决策树的Adaboost
在图8中,步骤1、2和3涉及一个称为决策树桩的弱学习器(一级决策树,其基于仅一个输入特征的值进行预测;决策树的根立即连接到其叶)。构建弱势学习器的过程一直持续到用户定义数量较弱的学习器已经建成,或直到训练没有进一步改善。步骤4组合了先前模型的3个决策树(因此在决策树中有3个分割规则)。
步骤1:从1个决策树开始,对1个输入变量做出决定:
数据点的大小表明,我们已经应用了相等的权重,将它们分类为圆形或三角形。决策树桩在上半部分产生了一条水平线,以对这些点进行分类。我们可以看到有两个圆圈被错误地预测为三角形。因此,我们将赋予这两个圈子更高的权重,并应用另一个决策树桩。
步骤2:移动到另一个决策树树桩以对另一个输入变量做出决定:
我们观察到,上一步中2个错误分类的圆的大小大于其余的点。现在,第二个决定树桩将尝试正确地预测这两个圆圈。
由于分配较高的权重,这两个圆已经被左侧的垂直线正确分类。但是这个现在已经导致了顶部的3个圆圈错误分类。因此,我们将在顶部的这3个圆圈中分配较高的权重,并应用另一个决策树桩。
步骤3:训练另一个决策树桩,作出另一个输入变量的决策:
上一步中的3个错误分类的圆圈比其余的数据点大。现在,已经生成了右侧的垂直线,以对圆和三角形进行分类。
步骤4:结合决策树:
我们结合了前面3个模型的分割器,并观察到,与任何单个弱势学习器相比,该模型的复杂规则正确地分类了数据点。
结论
总结一下,我们学到了:
END.
来源:新机器视觉