本文最初发表于 Towards Data Science 博客,经原作者 Soner Yildirim 授权,InfoQ 中文站翻译并分享。
由于有了各种库和框架,我们只需一行代码就可以实现机器学习算法。有些库和框架更进一步,可以让你在短时间内实现和比较多种算法。
但在使用方便的同时,也带来了一些缺点。我们可能会忽略这些算法背后的关键概念或思想,而这些概念或思想对于这些算法的理解是必不可少的。
在本文中,我将提到关于 7 种机器学习算法的 7 个要点。我想指出的是,这些并不是对算法的完整解释,所以,如果你对它们有基本了解的话,那就更好不过了。
闲话少叙,言归正题。
1. 支持向量机
要点:C 参数
支持向量机(Support Vector Machine,SVM)创建一个决策边界,用于区分两个或多个类。
Soft-Margin SVM 试图解决一类优化问题,其目标如下:
增加决策边界到类(或支持向量)的距离。
最大化训练集中正确分类的点的数量。
这两个目标之间显然存在一个权衡。决策边界可能必须非常接近一个特定的类,才能正确标注所有的数据点。然而,在这种情况下,由于决策边界对噪声和自变量的微小变化过于敏感,新观测值的正确率可能会有所降低。
另一方面,决策边间可能会被尽可能地放置在每个类上,但代价是一些错误分类的异常。这种权衡由 C 参数控制。
C 参数对每一个错误分类的数据点增加了一个惩罚。如果 C 较小,则对错误分类点的惩罚较低,所以选择一个余量较大的决策边界,以牺牲较多的错误分类次数为代价。
如果 C 较大,支持向量机会尽量减少错误分类样本的数量,从而导致决策边界具有较小的边际。对于所有错误分类的例子,惩罚是不一样的。它与到决策边界的距离成正比。
2. 决策树
要点:信息增益
在选择要分割的特征时,决策时算法会试图实现:
更多的预测性。
更少的杂质。
更低的熵。
熵是对不确定性或随机性的度量。一个变量的随机性越大,熵就越高。具有均匀分布的变量就具有最高的熵。例如,掷一个公平的骰子,有 6 种可能的结果,概率相等,所以它具有均匀分布和高熵。
选择导致更多纯节点的拆分。所有这些都表明“信息增益”(Information gain),基本上就是拆分前后的熵之差。
3. 随机森林
要点:自助法与特征随机性
随机森林是许多决策树的集合。随机森林的成功在很大程度上取决于使用不相关的决策树。如果我们使用相同或非常相似的树,那么整体结果与单个决策树的结果差别并不大。随机森林通过自助法(bootstrapping)和特征随机性(feature randomness)得到不相关的决策树。
特征随机性是通过随机深林中的每个决策树随机选择特征来实现的。随机森林中每棵树使用的特征数量可以通过max_features
参数进行控制。
4. 梯度提升决策树
要点:学习率和子模型数
梯度提升决策树(Gradient Boosted Decision Tree,GBDT)是一个决策树的集合,结合提升(boosting)方法,即将决策树按顺序连接起来。
学习率(Learning rate)和子模型数(n_estimators)是用于梯度提升决策树的两个关键超参数。
学习率简单来说就是模型学习的速度。学习率慢的好处是模型会变得过更加稳健和泛化。然而,学习率慢是有代价的。它需要更多的时间来训练模型,这就给我们带来了另一个重要的超参数。
n_estimators 参数是模型中使用的树的数量。如果学习率低,我们需要更多的树来训练模型。然而,我们在选择数目的数量时需要非常小心。使用过多的树会产生过拟合的高风险。
5. 朴素贝叶斯分类器
要点:朴素的好处是什么?
朴素贝叶斯(Naive Bayes)是一种用于分类的监督式机器学习分类算法,因此其任务是在给定特征值的情况下找到观测值所述的类别。朴素贝叶斯分类器计算给定一组特征值(即的类的概率。
朴素贝叶斯假设特征彼此独立,并且特征之间不存在相关性。然而,在现实生活中却并非如此。这种特征不相关的朴素假设,这就是这种算法被称为“朴素”的原因。
假设所有特征都是独立的,因此与复杂的算法相比,它的速度非常快。在某些情况下,比起更高的正确率,速度更受青睐。
朴素贝叶斯适用于文本分类、电子邮件垃圾邮件检测等高维数据的处理。
6. K-最近邻算法
要点:何时使用?何时不使用?
K-最近邻算法(K-nearest neighbors,KNN)是一种监督式机器学习算法,可用于解决分类问题,也可用于解决回归问题。KNN 的主要原理是数据点的值由其周围的数据点确定。
随着数据点数量的增加,KNN 算法将会变得非常慢,这是因为模型需要存储所有的数据点来计算它们之间的距离。这个原因也使得算法的内存效率不高。
另一个缺点就是 KNN 对异常值很敏感,因为异常值对最近点有影响(即使它的距离很远)。
积极的一面是:
简单易懂。
不做任何假设,所以它可以在非线性任务中实现。
在多个类别的分类上效果很好。
适用于分类任何和回归任务。
7. K-均值聚类
要点:何时使用?何时不使用?
K-均值聚类(K-Means Clustering)的目的是将数据分成 K 个聚类,使得同一个聚类中的数据点相似,而不同聚类中的数据点相距更远。
K-均值聚类算法无法猜测数据中存在多少个聚类。聚类的数量必须预先确定,这可能是一项具有挑战性的任务。
随着样本数量的增加,K-均值聚类算法将会变慢。因为在每一步中,它都要访问所有的数据点并计算距离。
K-均值聚类只能绘制线性边界。如果数据中存在分组的非线性结构,那么这种情况下,K-均值聚类就不是一个好选择。
积极的一面是:
易于理解。
相对较快。
可针对大型数据集进行扩展。
能够巧妙地选择初始质心的位置,从而加快收敛速度。
保证收敛性。
我们已经介绍了关于每种算法的一些关键概念。给出的要点和注释绝对不是算法的全部解释。然而,我给出的这些内容肯定很重要,要在实施这些算法时,了解这些内容才能有所作为。
作者介绍:
Soner Yildirim,数据科学爱好者,撰写关于数据科学、人工智能、机器学习、深度学习、统计学、数学等文章。
原文链接:
https://towardsdatascience.com/7-key-points-on-7-machine-learning-algorithms-945ebda7a79
评论