近年来,由于技术的高需求和进步,机器学习的普及率显着增加。机器学习从数据中创造价值的潜力使其对许多不同行业的企业都具有吸引力。大多数机器学习产品都是使用现成的机器学习算法设计和实现的,需要进行一些调整和微小的改动。机器学习算法种类繁多,可分为三大类:监督学习算法在给定一组观察值的情况下,对特征(自变量)和标签(目标)之间的关系进行建模。然后使用该模型使用这些特征来预测新观察的标签。根据目标变量的属性,它可以是分类(离散目标变量)或回归(连续目标变量)任务。无监督学习算法试图在未标记的数据中找到结构。强化学习基于动作奖励原则。代理通过迭代计算其行为的奖励来学习达到目标。在本文中,我将介绍前两类中最常见的算法。注意:虽然深度学习是机器学习的一个子领域,但我不会在本文中包含任何深度学习算法。我认为深度学习算法应该单独讨论,因为它们的复杂性和动态性。另外,我会犹豫是否让这篇文章太长而让读者厌烦。开始吧。1.线性回归线性回归是一种监督学习算法,它试图通过对数据拟合线性方程来模拟连续目标变量与一个或多个自变量之间的关系。为了使线性回归成为一个好的选择,自变量和目标变量之间必须存在线性关系。有许多工具可用于探索变量之间的关系,例如散点图和相关矩阵。例如,下面的散点图显示了自变量(x轴)和因变量(y轴)之间的正相关关系。随着一个增加,另一个也增加。线性回归模型试图将回归线拟合到最能代表关系或相关性的数据点。最常用的技术是普通最小二乘法(OLE)。使用这种方法,可以通过最小化数据点与回归线之间距离的平方和来找到最佳回归线。对于以上数据点,使用OLE获得的回归线如下所示:2.支持向量机支持向量机(SVM)是一种监督学习算法,主要用于分类任务,但也适用于回归任务。SVM通过绘制决策边界来区分类别。如何绘制或确定决策边界是SVM算法中最关键的部分。在创建决策边界之前,每个观察值(或数据点)都绘制在n维空间中。“n”是使用的特征数。例如,如果我们使用“长度”和“宽度”对不同的“细胞”进行分类,则观察结果绘制在二维空间中,决策边界是一条线。如果我们使用3个特征,则决策边界是3维空间中的一个平面。如果我们使用超过3个特征,决策边界将变成一个难以可视化的超平面。>二维空间中的决策边界是一条线决策边界与支持向量的距离最大。如果决策边界太靠近支持向量,它将对噪声高度敏感并且不能很好地泛化。即使自变量的微小变化也可能导致错误分类。如上图所示,数据点并不总是线性可分的。在这些情况下,SVM使用内核技巧来衡量更高维空间中数据点的相似性(或接近度),以便它们线性可分。内核特征是一种相似性度量。输入是原始特征,输出是新特征空间中的相似性度量。这里的相似意味着接近。实际上将数据点转换成高维特征空间是一个代价高昂的操作。该算法实际上并没有将数据点转换成一个新的高维特征空间。核化支持向量机根据高维特征空间中的相似性度量计算决策边界,而无需实际执行转换。我认为这就是为什么它也被称为内核技巧。SVM在维数大于样本数的情况下特别有效。在寻找决策边界时,SVM使用训练点的子集而不是所有点,这提高了内存效率。另一方面,大型数据集的训练时间会增加,这会对性能产生负面影响。3.朴素贝叶斯朴素贝叶斯是一种用于分类任务的监督学习算法。因此,它也被称为朴素贝叶斯分类器。朴素贝叶斯假设特征相互独立,特征之间没有相关性。然而,现实生活中并非如此。这种特征不相关的天真假设是该算法被称为“天真的”的原因。朴素贝叶斯算法背后的直觉是贝叶斯定理:p(A|B):给定事件B,事件A发生的概率p(B|A):给定事件A,事件B的概率,p(A):Probabilityp(B)ofEventA:ProbabilityofEventB朴素贝叶斯分类器计算给定一组特征值的类的概率(即p(yi|x1,x2,...,xn)).将其输入贝叶斯定理:p(x1,x2,...,xn|yi)表示给定类标签的特定特征组合(数据集中的观察/行)的概率。我们需要非常大的数据集来估计所有不同特征值组合的概率分布。为了克服这个问题,朴素贝叶斯算法假设所有特征都是相互独立的。此外,可以删除分母(p(x1,x2,...,xn)),因为它仅对给定观察值(p(yi|x1,x2,...,xn))。类的概率(p(yi))很容易计算:假设特征是独立的,p(x1,x2,...,xn|yi)可以写成:单个特征的条件概率可以很容易从数据中估计出来。该算法需要独立存储每个类别的特征概率分布。例如,如果您有5个类别和10个特征,则需要存储50个不同的概率分布。将所有这些加在一起,朴素贝叶斯算法就可以很容易地计算给定特征值(p(yi|x1,x2,...,xn))观察到一个类的概率。所有特征都是独立的假设使得朴素贝叶斯算法与复杂算法相比非常快。在某些情况下,速度比精度更重要。另一方面,相同的假设使朴素贝叶斯算法不如复杂算法准确。速度是有代价的!4.逻辑回归逻辑回归是一种监督学习算法,主要用于二元分类问题。虽然“回归”与“分类”相矛盾,但这里强调的是“逻辑”二字,它指的是本算法中执行分类任务的逻辑函数。逻辑回归是一种简单但非常有效的分类算法,因此常用于许多二元分类任务。客户流失、垃圾邮件、网站或广告点击预测是逻辑回归提供强大解决方案的一些例子。逻辑回归的基础是逻辑函数,也称为sigmoid函数,它可以取任何实数值并将其映射到0到1之间的值。考虑我们要求解以下线性方程:逻辑回归模型采用线性方程作为输入,并使用逻辑函数和对数几率执行二元分类任务。然后我们将得到著名的逻辑回归图:我们可以按原样使用计算出的概率。例如,输出可能是“此电子邮件有95%的可能性是垃圾邮件”或“客户有70%的可能性会点击此广告”。然而,在大多数情况下,概率用于对数据点进行分类。例如,如果概率大于50%,则预测为正类(1)。否则,预测负面评价(0)。对于所有高于50%的概率值,并不总是希望选择正类。对于垃圾邮件,我们几乎必须确定要将电子邮件归类为垃圾邮件。由于被检测为垃圾邮件的电子邮件会直接进入垃圾邮件文件夹,因此我们不希望用户错过重要的电子邮件。除非我们几乎可以肯定,否则电子邮件不会被归类为垃圾邮件。另一方面,在对健康相关问题进行分类时,我们被要求更加敏感。即使我们怀疑某个细胞是恶性的,我们也不想错过它。因此,用作正类和负类之间阈值的值取决于问题。好吧,逻辑回归允许我们调整这个阈值。5.K最近邻(kNN)K最近邻(kNN)是一种监督学习算法,可用于解决分类和回归任务。kNN背后的主要思想是数据点的值或类别由其周围的数据点决定。kNN分类器通过多数表决来确定数据点的类别。例如,如果k设置为5,则检查5个最近点的类。根据多数类做出预测。同样,kNN回归采用5个最近点的平均值。让我们看一个例子。考虑以下属于4个不同类别的数据点:让我们看看预测类别如何根据k的值而变化:确定最佳的k值非常重要。如果k太低,则模型太具体并且不能很好地泛化。它也往往对噪音敏感。该模型在火车上实现了高精度,但它对新的、以前看不见的数据点的预测能力很差。因此,我们很可能会得到一个过度拟合的模型。另一方面,如果k太大,则模型太笼统,在训练集和测试集上都不是一个好的预测器。这种情况称为欠拟合。kNN简单易懂。它不做任何假设,因此可以在非线性任务中实现。随着数据点数量的增加,kNN变得非常慢,因为模型需要存储所有数据点。因此,它也不是有效的内存。kNN的另一个缺点是它对异常值很敏感。6.决策树决策树基于迭代地提问来划分数据。使用决策树的可视化表示更容易地概念化分区数据:这表示用于预测客户流失的决策树。第一个划分是基于月费金额。该算法然后不断提出问题以分离类别标签。随着树越来越深,问题变得更加具体。决策树算法的目标是在每个分区中尽可能提高可预测性,以便模型不断学习数据集。随机拆分特征通常不会让我们深入了解数据集。增加节点纯度的拆分提供更多信息。节点的纯度与该节点中不同类别的分布成反比。以增加纯度或减少杂质的方式选择要问的问题。我们问了多少问题?我们什么时候停止?我们的树什么时候对我们的分类问题足够好?所有这些问题的答案将我们引向机器学习中最重要的概念之一:过度拟合。该模型可以不断提问,直到所有节点都是纯的。但是,这将是一个过于具体的模型,无法很好地概括。它在训练集上实现了高精度,但在新的、以前未见过的数据点上表现不佳,表明过度拟合。scikit-learn中决策树算法的树深度由max_depth参数控制。决策树算法通常不需要对特征进行归一化或缩放。它还适用于混合特征数据类型(连续、分类、二进制)。不利的一面是,它容易过度拟合,因此必须进行池化才能很好地泛化。6.随机森林随机森林是许多决策树的集合。随机森林是使用称为装袋的方法构建的,其中决策树用作并行估计器。如果用于分类问题,则结果基于从每个决策树收到的结果的多数投票。对于回归,叶节点的预测是该叶中目标值的平均值。随机森林回归采用决策树结果的平均值。随机森林降低了过度拟合的风险,并且比单个决策树准确得多。此外,随机森林中的决策树是并行运行的,因此时间不会成为瓶颈。随机森林的成功在很大程度上取决于使用不相关的决策树。如果我们使用相同或非常相似的树,整体结果将与单个决策树的结果无法区分。随机森林通过引导和特征随机性实现不相关的决策树。Bootstrapping是从训练数据中随机选择样本进行替换。它们被称为引导加载程序样本。>Bootstrap样本(图源)通过为随机森林中的每个决策树随机选择特征来实现特征随机性。可以使用max_features参数控制随机森林中每棵树使用的特征数量。>特征随机性随机森林是针对许多不同问题的高度准确的模型,不需要归一化或缩放。然而,与快速线性模型(即朴素贝叶斯)相比,它不是高维数据集(即文本分类)的好选择。7.梯度提升决策树(GBDT)GBDT是一种集成算法,它使用提升方法来组合单个决策树。提升意味着级联一系列学习算法,从许多顺序连接的弱学习器中获得一个强学习器。对于GBDT,弱学习器是决策树。每棵树都试图最小化前一棵树的错误。Boosting中的树是学习能力较差的树,但是连续添加许多树,每棵树都关注前一棵树的错误,可以构建高效准确的模型。与bagging不同,boosting不涉及bootstrap采样。每次添加新树时,它都会适合初始数据集的修改版本。由于树是按顺序添加的,因此提升算法学习缓慢。在统计学习中,学习缓慢的模型表现更好。损失函数用于检测残差。例如,均方误差(MSE)可以用于回归任务,对数损失(logloss)可以用于分类任务。值得注意的是,当添加新树时,模型中现有的树并没有改变。添加的决策树拟合当前模型的残差。学习率和n_estimator是用于梯度提升决策树的两个关键超参数。学习率,表示为α,简单地表示模型学习的速度。每棵新树都会修改整个模型。修改的大小由学习率控制。n_estimator是模型中使用的树的数量。如果学习率低,我们需要更多的树来训练模型。但是,我们在选择树的数量时需要非常小心。使用过多的树会产生过度拟合的高风险。GBDT在分类和回归任务上都非常有效,并且与随机森林相比提供了更准确的预测。它可以处理混合类型的特征并且不需要预处理。GBDT需要仔细调整超参数以防止模型过拟合。GBDT算法非常强大,已经实现了很多升级版本,比如XGBOOST、LightGBM、CatBoost。关于过度拟合的注意事项随机森林和梯度提升决策树之间的一个关键区别是模型中使用的树的数量。增加随机森林中树的数量不会导致过度拟合。在某个点之后,模型的准确性不会因添加更多树而增加,但不会因添加太多树而受到负面影响。出于计算原因,您仍然不想添加不必要的树,但不存在与随机森林中的树数量相关的过度拟合风险。然而,梯度提升决策树中树的数量在过度拟合方面是至关重要的。添加过多的树会导致过度拟合,因此停止添加树很重要。8.K-MeansClustering聚类是一种将一组数据点分组在一起的方法,即将相似的数据点分组在一起。因此,聚类算法寻找数据点之间的相似点或不同点。聚类是一种无监督学习方法,因此没有与数据点相关联的标签。聚类算法试图找到数据的底层结构。聚类不是分类。分类任务中的观察(或数据点)有标签。每个观察结果都根据某种度量进行分类。分类算法试图模拟观察的度量(特征)与其分配的类别之间的关系。然后该模型预测新观察的类别。K均值聚类旨在将数据划分为k个簇,使得同一簇中的数据点相似,而不同簇中的数据点相距较远。所以这是一种基于分区的聚类技术。两点的相似度取决于它们之间的距离。K均值聚类试图最小化集群内的距离并最大化不同集群之间的距离。K-means算法无法确定聚类的数量。创建KMeans对象时,我们需要对其进行定义,这可能是一项艰巨的任务。考虑以下数据集的2D可视化:它可以分为4个不同的集群,如下所示:现实生活中的数据集要复杂得多,其中的集群没有清楚地分开。但是,该算法的工作方式相同。K-means是一个迭代过程。它基于期望最大化算法。一旦确定了集群的数量,它就会通过执行以下步骤来工作:为每个集群随机选择一个质心(集群的中心)。计算所有数据点到质心的距离。将数据点分配给最近的集群。通过取集群中所有数据点的平均值,为每个集群找到新的质心。重复步骤2、3和4,直到所有点收敛并且聚类中心停止移动。K-Means聚类相对较快且易于解释。它还能够智能地选择初始质心的位置,从而加快收敛速度??。k-means的挑战之一是必须预先确定聚类的数量。K-means算法无法猜测数据中存在多少簇。如果数据中存在分离组的非线性结构,则k-means将不是一个好的选择。9.层次聚类层次聚类是指通过迭代分组或分离数据点来创建聚类树。层次聚类有两种类型:凝聚聚类和分裂聚类层次聚类的优点之一是我们不必指定聚类的数量(但我们可以)。凝聚聚类是一种自下而上的方法。首先假设每个数据点都是一个单独的集群。然后,相似的簇被迭代组合。上图称为树状图,表示基于树的方法。在层次聚类中,树状图用于可视化聚类之间的关系。层次聚类的优点之一是我们不必预先指定聚类的数量。但是,将所有数据点合并到一个集群中是不明智的。我们应该在某个时候停止合并集群。Scikit-learn为此提供了两个选项:到达多个集群(n_clusters)后停止,并设置链接阈值(distance_threshold)。如果两个集群之间的距离高于阈值,则不会合并这些集群。Divisiveclustering在现实生活中并不常用,这里简单介绍一下。简单明了的解释是分裂聚类与凝聚聚类相反。我们从一个包含所有数据点的巨型集群开始。然后,将数据点划分到不同的簇中。这是一种自下而上的方法。层次集群总是生成相同的集群。K均值聚类可能会产生不同的聚类,具体取决于质心(聚类中心)的启动方式。但是,与k-means相比,它是一种较慢的算法。层次集群需要很长时间才能运行,尤其是对于大型数据集。10.DBSCAN聚类基于分区的层次聚类技术对于标准形状的聚类非常有效。然而,当涉及到任意形状的簇或检测异常值时,基于密度的技术更为有效。>Arbitraryshapedclusters>ArbitraryshapedclustersDBSCAN代表用于嘈杂应用的基于密度的空间聚类。它能够找到任意形状的簇和带有噪声的簇(即异常值)。DBSCAN的主要思想是,如果一个点与簇中的许多点都很接近,那么它就属于一个簇。DBSCAN有两个关键参数:eps:指定邻域的距离。如果两点之间的距离小于或等于eps,则两点被视为相邻点。minPts:定义一个簇的最小数据点数。根据这两个参数将点分类为核心点、边界点或离群点:核心点:如果一个点在其周围半径为eps点的区域中至少有minPts个点(包括该点本身),则该点是核心点。边界点:如果一个点可以从核心点到达并且其周围区域的点数少于minPts,则该点是边界点。离群点:如果一个点不是核心点并且不能从任何核心点到达,则该点是离群点。DBSCAN不需要预先指定簇数。它对异常值具有鲁棒性并且能够检测异常值。在某些情况下,确定适当的邻域(eps)距离并不容易,需要领域知识。11.主成分分析(PCA)PCA是一种降维算法,基本上是从现有特征中提取新特征,同时尽可能多地保留信息。PCA是一种无监督学习算法,但它也被广泛用作监督学习算法中的预处理步骤。PCA通过查找数据集中特征之间的关系来派生新特征。注:PCA是一种线性降维算法。也有可用的非线性方法。PCA的目的是通过使用更少的特征(或列)来解释原始数据集中尽可能多的方差。新派生的特征称为主成分。主成分的顺序由它们解释的原始数据集的方差分数决定。主成分是原始数据集特征的线性组合。PCA的优点是可以使用比原始数据集少得多的特征来保留大量原始数据集。主成分根据它们解释的方差量排序。
