竭尽全力 2020-07-28
近年来,由于对技术的高需求和进步,机器学习的普及已大大增加。 机器学习可以从数据中创造价值的潜力使其吸引了许多不同行业的企业。 大多数机器学习产品都是使用现成的机器学习算法进行设计和实现的,并且需要进行一些调整和细微更改。
机器学习算法种类繁多,可分为三大类:
在本文中,我将介绍前两类中最常见的算法。
注意:尽管深度学习是机器学习的一个子领域,但我不会在本文中包含任何深度学习算法。 我认为深度学习算法由于复杂性和动态性而应分开讨论。 此外,我会犹豫地使这篇文章过长,使读者感到厌烦。
开始吧。
1.线性回归
线性回归是一种有监督的学习算法,它通过对数据拟合线性方程,尝试对连续目标变量和一个或多个自变量之间的关系进行建模。
为了使线性回归成为一个不错的选择,自变量和目标变量之间必须存在线性关系。 有许多工具可以探索变量之间的关系,例如散点图和相关矩阵。 例如,下面的散点图显示了自变量(x轴)和因变量(y轴)之间的正相关。 随着一个增加,另一个也增加。
线性回归模型试图使回归线适合最能表示关系或相关性的数据点。 最常用的技术是普通最小二乘(OLE)。 使用此方法,可以通过最小化数据点和回归线之间距离的平方和来找到最佳回归线。 对于上面的数据点,使用OLE获得的回归线看起来像:
2.支持向量机
支持向量机(SVM)是一种监督学习算法,主要用于分类任务,但也适用于回归任务。
SVM通过绘制决策边界来区分类。 如何绘制或确定决策边界是SVM算法中最关键的部分。 在创建决策边界之前,将每个观察值(或数据点)绘制在n维空间中。 " n"是所使用功能的数量。 例如,如果我们使用"长度"和"宽度"对不同的"单元格"进行分类,则观察结果将绘制在二维空间中,并且决策边界为一条线。 如果我们使用3个要素,则决策边界是3维空间中的平面。 如果我们使用3个以上的特征,则决策边界将变成一个很难可视化的超平面。
> Decision boundary in 2D space is a line
决策边界以与支持向量的距离最大的方式绘制。 如果决策边界距离支持向量太近,它将对噪声高度敏感并且不能很好地泛化。 即使自变量的很小变化也可能导致分类错误。
数据点并非总是如上图所示线性可分离。 在这些情况下,SVM使用内核技巧来测量较高维空间中数据点的相似性(或接近度),以使它们线性可分离。
内核功能是一种相似性度量。 输入是原始要素,输出是新要素空间中的相似性度量。 这里的相似度表示紧密度。 实际上将数据点转换为高维特征空间是一项昂贵的操作。 该算法实际上并未将数据点转换为新的高维特征空间。 内核化SVM无需实际进行变换就可以根据高维特征空间中的相似性度量来计算决策边界。 我认为这就是为什么它也称为内核技巧。
在维数大于样本数的情况下,SVM特别有效。 找到决策边界时,SVM使用训练点的子集而不是所有点,从而提高了存储效率。 另一方面,大型数据集的训练时间会增加,这会对性能产生负面影响。
3.朴素贝叶斯
朴素贝叶斯是一种用于分类任务的监督学习算法。 因此,它也被称为朴素贝叶斯分类器。
朴素贝叶斯假设要素彼此独立,要素之间没有关联。 但是,现实生活中并非如此。 特征不相关的这种天真假设是将该算法称为"天真"的原因。
朴素贝叶斯算法的直觉是贝叶斯定理:
p(A | B):给定事件B发生事件A的概率
p(B | A):给定事件A,事件B的概率
p(A):事件A的概率
p(B):事件B的概率
朴素贝叶斯分类器在给定一组特征值(即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)可以写成:
给定类别标签(即p(x1 | yi))的单个特征的条件概率可以从数据中轻松估算。 该算法需要为每个类别独立存储特征的概率分布。 例如,如果有5个类别和10个特征,则需要存储50个不同的概率分布。
将所有这些加在一起,对于朴素贝叶斯算法来说,计算给定特征值(p(yi | x1,x2,…,xn))观察类的概率变得容易。
与复杂算法相比,所有特征都是独立的这一假设使朴素贝叶斯算法非常快。 在某些情况下,速度比精度更高。 另一方面,相同的假设使朴素贝叶斯算法不如复杂算法准确。 速度是有代价的!
4. Logistic回归
逻辑回归是一种监督学习算法,主要用于二进制分类问题。 尽管"回归"与"分类"相矛盾,但是这里的重点是"逻辑"一词,指的是在该算法中执行分类任务的逻辑函数。 逻辑回归是一种简单但非常有效的分类算法,因此通常用于许多二进制分类任务。 客户流失,垃圾邮件,网站或广告点击预测是逻辑回归提供强大解决方案的一些示例。
逻辑回归的基础是逻辑函数,也称为Sigmoid函数,该函数可以接受任何实数值,并将其映射到0到1之间的一个值。
考虑我们有以下线性方程式可以解决:
Logistic回归模型将线性方程式作为输入,并使用logistic函数和对数赔率执行二进制分类任务。 然后,我们将得到著名的逻辑回归形图:
我们可以按原样使用计算出的概率。 例如,输出可以是"此电子邮件为垃圾邮件的概率为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.随机森林
随机森林是许多决策树的集合。 随机森林是使用称为装袋的方法构建的,其中决策树用作并行估计器。 如果用于分类问题,则结果基于从每个决策树收到的结果的多数票。 对于回归,叶节点的预测是该叶中目标值的平均值。 随机森林回归采用决策树结果的平均值。
随机森林减少了过度拟合的风险,准确性比单个决策树高得多。 此外,随机森林中的决策树并行运行,因此时间不会成为瓶颈。
随机森林的成功很大程度上取决于使用不相关的决策树。 如果我们使用相同或非常相似的树,则总体结果将与单个决策树的结果相差无几。 随机森林通过自举和特征随机性来实现具有不相关的决策树。
自举是从训练数据中随机选择样本进行替换。 它们称为引导程序样本。
> Bootstrap samples (Figure source)
通过为随机森林中的每个决策树随机选择特征来实现特征随机性。 可以使用max_features参数控制随机森林中每棵树使用的特征数量。
> Feature randomness
随机森林是针对许多不同问题的高度精确的模型,不需要规范化或缩放。 但是,与快速线性模型(即朴素贝叶斯)相比,对于高维数据集(即文本分类)而言,这不是一个好选择。
7.梯度提升决策树(GBDT)
GBDT是一种集成算法,使用提升方法来组合各个决策树。
提升意味着将一系列学习算法串联起来,以从许多顺序连接的弱学习者那里获得一个强学习者。 对于GBDT,弱学习者是决策树。
每棵树都试图最小化前一棵树的错误。 Boosting中的树是学习能力较弱的树,但是连续添加许多树,每棵树都专注于前一棵树的错误,因此可以构建一个高效且准确的模型。 与装袋不同,加强不涉及自举采样。 每次添加新树时,它都适合初始数据集的修改版本。
由于树是顺序添加的,因此增强算法学习缓慢。 在统计学习中,学习缓慢的模型表现更好。
损失函数用于检测残差。 例如,均方误差(MSE)可用于回归任务,对数损失(对数损失)可用于分类任务。 值得注意的是,添加新树后,模型中的现有树不会更改。 添加的决策树适合当前模型的残差。
学习速率和n_estimator是用于梯度提升决策树的两个关键超参数。 学习率表示为α,仅表示模型学习的速度。 每棵新树都会修改整个模型。 修改的大小由学习率控制。 n_estimator是模型中使用的树数。 如果学习率低,我们需要更多的树来训练模型。 但是,我们在选择树数时需要非常小心。 使用过多树木会产生过度拟合的高风险。
与随机森林相比,GBDT在分类和回归任务上都非常有效,并且提供了更准确的预测。 它可以处理混合类型的功能,不需要预处理。 GBDT需要仔细调整超参数,以防止模型过度拟合。
GBDT算法是如此强大,以至于已经实现了许多升级版本,例如XGBOOST,LightGBM,CatBoost。
关于过度拟合的注意事项
随机森林和梯度增强决策树之间的一个关键区别是模型中使用的树数。 增加随机森林中的树木数量不会导致过度拟合。 在某一点之后,模型的准确性不会因添加更多树而增加,但也不会因添加过多树而受到负面影响。 由于计算原因,您仍然不想添加不必要的树,但是不存在与随机森林中的树数相关联的过拟合风险。
但是,就过度拟合而言,梯度增强决策树中的树数非常关键。 添加过多的树会导致过拟合,因此一定要停止添加树,这一点很重要。
8. K-均值聚类
聚类是一种将一组数据点组合在一起的方式,即将相似的数据点组合在一起。 因此,聚类算法在数据点之间寻找相似性或相异性。 聚类是一种无监督的学习方法,因此没有与数据点相关的标签。 聚类算法试图找到数据的底层结构。
聚类不是分类。
分类任务中的观测值(或数据点)具有标签。 每个观察结果根据一些测量结果进行分类。 分类算法尝试对观测值的度量(特征)与其指定的类别之间的关系建模。 然后,模型预测新观测的类别。
K-均值聚类旨在将数据分为k个聚类,以使同一聚类中的数据点相似,而不同聚类中的数据点相距更远。 因此,这是一种基于分区的群集技术。 两个点的相似性取决于它们之间的距离。
K-均值聚类试图使聚类内的距离最小化,并使不同聚类之间的距离最大化。 K-均值算法无法确定簇数。 创建KMeans对象时,我们需要对其进行定义,这可能是一项艰巨的任务。
考虑以下数据集的2D可视化:
可以将其划分为4个不同的群集,如下所示:
现实生活中的数据集要复杂得多,在这些数据集中聚类没有明显分开。 但是,该算法以相同的方式工作。 K均值是一个迭代过程。 它基于期望最大化算法。 确定群集数量后,它可以通过执行以下步骤来工作:
K-Means聚类相对快速且易于解释。 它还能够以智能方式选择初始质心的位置,从而加快收敛速度。
k均值的挑战之一是必须预先确定簇的数量。 K-means算法无法猜测数据中存在多少个簇。 如果存在将数据中的组分开的非线性结构,则k均值将不是一个好的选择。
9.层次聚类
分层聚类意味着通过迭代分组或分离数据点来创建聚类树。 有两种类型的层次结构聚类:
分层聚类的优点之一是我们不必指定聚类的数量(但可以)。
聚集聚类是一种自下而上的方法。 首先假定每个数据点都是一个单独的群集。 然后,将相似的群集进行迭代组合。
上图称为树状图,该图表示基于树的方法。 在分层聚类中,树状图用于可视化聚类之间的关系。
分层聚类的优点之一是我们不必预先指定聚类的数量。 但是,将所有数据点组合到一个群集中是不明智的。 我们应该在某个时候停止合并集群。 Scikit-learn为此提供了两个选项:
分裂聚类在现实生活中并不常用,因此我将简要介绍一下。 简单而清晰的解释是分裂聚类与聚集聚类相反。 我们从一个包含所有数据点的巨型群集开始。 然后,将数据点分为不同的群集。 这是自下而上的方法。
层次集群总是生成相同的集群。 K-均值聚类可能会导致不同的聚类,具体取决于质心(聚类中心)的启动方式。 但是,与k均值相比,它是一种较慢的算法。 分层群集需要很长时间才能运行,尤其是对于大型数据集。
10. DBSCAN集群
基于分区的分层聚类技术对于标准形状的聚类非常高效。 但是,当涉及到任意形状的聚类或检测离群值时,基于密度的技术更为有效。
> Arbitrary shaped clusters
> Arbitrary shaped clusters
DBSCAN代表带噪声的应用程序的基于密度的空间聚类。 它能够找到任意形状的聚类和带有噪声的聚类(即离群值)。
DBSCAN的主要思想是,如果某个点与该簇中的许多点接近,则该点属于该簇。
DBSCAN有两个关键参数:
根据这两个参数,将点分为核心点,边界点或离群值:
DBSCAN不需要预先指定群集数。 它对异常值具有鲁棒性,并且能够检测到异常值。
在某些情况下,确定适当的邻域(eps)距离并不容易,并且需要领域知识。
11.主成分分析(PCA)
PCA是降维算法,它基本上从现有特征中衍生出新特征,同时保留了尽可能多的信息。 PCA是一种无监督的学习算法,但它也广泛用作有监督的学习算法的预处理步骤。
PCA通过查找数据集中要素之间的关系来推导新要素。
注意:PCA是线性降维算法。 也有非线性方法可用。
PCA的目的是通过使用较少的特征(或列)来尽可能多地解释原始数据集中的方差。 新派生的功能称为主成分。 主成分的顺序是根据它们解释的原始数据集的方差分数确定的。