支持向量机使用一个名为核函数的技巧,来将非线性问题变换为线性问题,其本质是计算两个观测数据的距离。支持向量机算法所寻找的是能够最大化样本间隔的决策边界,因此又被称为大间距分类器。 举例来说,使用线性核函数的支持向量机类似于逻辑回归,但更具稳健性。因而在实践中,支持向量机最大用处是用非线性核函数来对非线性决策边界进行建模。 优点:支持向量机能对非线性决策边界建模,又有许多可选的核函数。在面对过拟合时,支持向量机有着极强的稳健性,尤其是在高维空间中。 缺点:不过,支持向量机是内存密集型算法,选择正确的核函数就需要相当的j技巧,不太适用较大的数据集。在当前的业界应用中,随机森林的表现往往要优于支持向量机。 实现: Python - #classification R - https://cran.r-project.org/web/packages/kernlab/index.html 2.5 朴素贝叶斯 朴素贝叶斯是一种基于条件概率和计数的简单算法,其本质是一个概率表,通过训练数据来更新其中的概率。它预测新观察值的过程,就是根据样本的特征值在概率表中来寻找最为可能的类别。 被称为“朴素”原因,是其核心的特征条件独立性假设(例如,每一项输入特征都相互独立),在现实中几乎是不成立的。 优点:即便条件独立性假设很难成立,但实践中的朴素贝叶斯算法却能表现得很好。该算法易于实现且能伴随数据集更新。 缺点:因为朴素贝叶斯的算法太过简单,所以很容易被上述分类算法所取代。 实现: Python - R - htps://cran.r-project.org/web/packages/naivebayes/index.html ▌3.聚类 聚类是基于数据内部结构来寻找样本自然族群(集群)的无监督学习任务,使用案例包括用户画像、电商物品聚类、社交网络分析等。 由于聚类属于无监督学习,也就不会输出“正确的答案”,评价结果时往往要用到数据可视化。如果你需要“正确的答案”,亦即训练集中存在预标注的集群,那么用分类算法会更加合适。
K 均值 3.1 K 均值 K 均值是基于样本点间的几何距离来度量聚类的通用目的算法。由于集群围绕在聚类中心,结果会接近于球状并具有相似的大小。 我们之所以推荐该算法给初学者,是因为它不仅足够简单,而且足够灵活,对于大多数问题都能给出合理的结果。 优点:K 均值是最为流行的聚类算法,因为它足够快速、足够简单,如果你的预处理数据和特征工程都做得十分有效,那它将具备令人惊叹的灵活性。 缺点:该算法需要指定集群的数量,而 K 值的选择通常都不是那么容易确定的。另外,如果训练数据中的真实集群并不是类球状的,那么 K 均值聚类会得出一些比较差的集群。 实现: Python - #k-means R - https://stat.ethz.ch/R-manual/R-devel/library/stats/html/kmeans.html 3.2 仿射传播 仿射传播是一种相对较新的聚类算法,它基于两个样本点之间的图形距离来确定集群,其结果倾向于更小且大小不等的集群。 优点:仿射传播不需要指出明确的集群数量,但需要指定“sample preference”和“damping”等超参数。 缺点:仿射传播的主要缺点是训练速度较慢,且需要大量内存,因而难于扩展到大数据集。此外,该算法同样在假定潜在的集群要接近于球状。 实现: Python - #affinity-propagation R - https://cran.r-project.org/web/packages/apcluster/index.html 3.3 分层 / 层次 分层聚类,又名层次聚类,其算法基于以下概念来实现: 1) 每一个集群都从一个数据点开始; 2) 每一个集群都可基于相同的标准进行合并; 3) 重复这一过程,直至你仅剩下一个集群,这就获得了集群的层次结构。 优点:层次聚类的最主要优点,是集群不再假定为类球形。此外,它可以很容易扩展到大数据集。 缺点:类似于 K 均值,该算法需要选定集群的数量,即算法完成后所要保留的层次。 实现: Python - #hierarchical-clustering R - https://stat.ethz.ch/R-manual/R-devel/library/stats/html/hclust.html 3.4 DBSCAN DBSCAN 是一种基于密度的聚类算法,它将样本点的密集区域组成集群;其最新进展是HDBSCAN,它允许集群的密度可变。 优点:DBSCAN 不需要假定类球形集群,其性能可以扩展。此外,它不需要每个点都被分配到集群中,这就降低了集群的噪音。 缺点:用户必须要调整“epsilon”和“min_sample”这两个超参数来定义集群密度。DBSCAN 对此非常敏感。 实现: Python - #dbscan R - https://cran.r-project.org/web/packages/dbscan/index.html 维度灾难 在机器学习领域,“维度(Dimensionality)”通常指数据集中的特征数量(即输入变量的个数)。 (责任编辑:本港台直播) |