问题

各种机器学习算法的应用场景分别是什么(比如朴素贝叶斯、决策树、K 近邻、SVM、逻辑回归最大熵模型)?

回答
好的,我们来详细介绍一下各种经典机器学习算法的应用场景。理解这些算法的特性和适用范围是选择合适模型解决问题的关键。

在深入介绍之前,先明确几个基本概念:

监督学习 (Supervised Learning): 算法从带有标签的数据(输入输出对)中学习,用于预测未知数据的标签。
分类 (Classification): 预测一个离散的类别标签(例如:垃圾邮件/非垃圾邮件,猫/狗)。
回归 (Regression): 预测一个连续的数值(例如:房价,股票价格)。
无监督学习 (Unsupervised Learning): 算法从没有标签的数据中学习,用于发现数据中的模式、结构或关系。
聚类 (Clustering): 将相似的数据点分组到簇中。
降维 (Dimensionality Reduction): 减少数据的特征数量,同时尽量保留重要信息。
半监督学习 (Semisupervised Learning): 介于监督学习和无监督学习之间,利用少量标签数据和大量无标签数据进行学习。
强化学习 (Reinforcement Learning): 智能体通过与环境交互,根据奖励信号学习最优策略。

接下来,我们将详细介绍以下几种算法的应用场景:



1. 朴素贝叶斯 (Naive Bayes)

朴素贝叶斯是一种基于贝叶斯定理和特征条件独立假设的监督学习分类算法。它的核心思想是:给定某些特征,计算某个类别的概率。

核心思想与工作原理:

贝叶斯定理: $P(A|B) = frac{P(B|A) P(A)}{P(B)}$
$P(A|B)$: 后验概率(在B发生的情况下A发生的概率)
$P(B|A)$: 似然度(在A发生的情况下B发生的概率)
$P(A)$: 先验概率(A发生的概率)
$P(B)$: 证据(B发生的概率)
朴素假设: 假设所有特征之间是相互独立的,即 $P(X_1, X_2, ..., X_n | Y) = P(X_1|Y) P(X_2|Y) ... P(X_n|Y)$,其中 $X_i$ 是特征,$Y$ 是类别。
分类过程: 对于一个待分类的样本,计算它属于每个类别的后验概率,选择后验概率最大的那个类别作为预测结果。由于 $P(B)$ 对于所有类别都是相同的,因此在比较不同类别的后验概率时,可以忽略分母 $P(B)$,只比较 $P(B|A) P(A)$。

应用场景:

朴素贝叶斯因其简单、高效和计算成本低廉的特点,在许多场景下表现出色,尤其是处理文本数据时。

文本分类 (Text Classification):
垃圾邮件过滤 (Spam Detection): 这是朴素贝叶斯最经典的成功应用之一。通过分析邮件的词语(如“免费”、“点击”、“ viagra”等)出现的频率,结合这些词语在垃圾邮件和非垃圾邮件中出现的概率,来判断邮件的类别。
情感分析 (Sentiment Analysis): 判断一段文本(如产品评论、社交媒体帖子)表达的情绪是积极、消极还是中性。通过分析文本中的情感词语及其组合。
新闻分类 (News Categorization): 将新闻文章自动归类到体育、科技、财经等不同的领域。
文档分类 (Document Classification): 将各种类型的文档(如法律文件、技术报告)进行分类。
实时预测 (Realtime Prediction): 由于计算速度快,适用于需要快速响应的场景。
医学诊断辅助 (Medical Diagnosis Assistance): 基于病人症状和病史,预测患某种疾病的可能性。
推荐系统 (Recommendation Systems): 初步的过滤和推荐,例如根据用户的历史行为推荐商品或内容。

优点:

实现简单,易于理解和实现。
训练速度快,对大规模数据集也适用。
在特征独立性假设成立的情况下,表现非常好。
对于少样本问题也有一定的鲁棒性。

缺点:

“朴素”的条件独立性假设在现实世界中往往不成立,这可能导致模型性能下降。
对于特征之间存在强相关性的问题,效果可能不佳。



2. 决策树 (Decision Tree)

决策树是一种监督学习算法,它通过一系列的 ifthenelse 规则来学习一个从特征到类别的映射。它是一种树状结构的分类器,内部节点代表一个特征测试,分支代表测试的输出,叶节点代表一个类别。

核心思想与工作原理:

树状结构: 将数据集不断划分,直到每个子集中的样本都属于同一类别(纯净)或者达到预设的停止条件。
特征选择: 在每个节点上,算法会选择一个最佳的特征来分裂数据。常用的评估标准包括:
信息增益 (Information Gain) / ID3 算法: 基于信息论,选择能最大程度减少不确定性的特征进行分裂。不确定性通常用熵 (Entropy) 来衡量。
增益率 (Gain Ratio) / C4.5 算法: 改进了信息增益,避免对取值较多的特征过度偏好。
基尼不纯度 (Gini Impurity) / CART 算法: CART 算法既可以用于分类,也可以用于回归,它使用基尼不纯度作为分裂标准,选择能使基尼不纯度降到最低的特征进行分裂。
剪枝 (Pruning): 为了防止过拟合(模型在训练集上表现很好,但在新数据上表现差),需要对决策树进行剪枝。常见的剪枝方法有预剪枝(在生长过程中停止分裂)和后剪枝(生长完成后,从叶节点向上移除不必要的子树)。

应用场景:

决策树的可解释性强,非常适合那些需要理解模型决策过程的场景。

分类任务:
客户分类 (Customer Segmentation): 根据客户的购买历史、人口统计学信息等,将客户划分为不同的群体,用于有针对性的营销。
信用风险评估 (Credit Risk Assessment): 根据申请人的收入、信用记录、工作稳定性等信息,判断其信用风险等级。
医疗诊断 (Medical Diagnosis): 医生可以通过遵循一系列诊断规则(如“是否有发烧?”,“是否有咳嗽?”)来辅助诊断疾病。
故障诊断 (Fault Diagnosis): 根据设备的运行状态和传感器读数,判断设备可能出现的故障类型。
回归任务:
预测股票价格 (Stock Price Prediction): 虽然通常需要更复杂的模型,但简单的决策树也可以作为基准模型。
房屋价格预测 (House Price Prediction): 根据房屋面积、位置、卧室数量等特征预测价格。
规则提取 (Rule Extraction): 从训练好的决策树中提取出一系列的 IFTHEN 规则,这些规则可以被人类直接理解和应用。
特征重要性评估 (Feature Importance Assessment): 决策树可以直观地展示哪些特征对于最终的预测结果更重要。

优点:

可解释性强: 易于理解和可视化,可以清晰地展示决策过程。
不需要特征预处理: 如特征归一化、标准化等。
可以处理数值型和类别型特征。
可以处理非线性关系。

缺点:

容易过拟合: 特别是当树很深时。需要剪枝或使用集成方法(如随机森林、梯度提升树)来解决。
对训练数据的微小变化敏感: 可能会导致生成完全不同的树。
对于某些问题,最优决策树可能很复杂,难以理解。
在处理连续特征时,需要进行离散化。



3. K 近邻 (KNearest Neighbors, KNN)

K 近邻是一种简单而直观的监督学习算法,既可以用于分类,也可以用于回归。它的核心思想是:一个样本的类别(或值)取决于其在特征空间中最相似的 K 个邻居的类别(或值的平均)。

核心思想与工作原理:

懒惰学习 (Lazy Learning): KNN 是一种懒惰学习算法,它在训练阶段只是简单地存储所有训练数据,而没有构建显式的模型。真正的计算发生在预测阶段。
距离度量: KNN 需要一个距离度量来衡量样本之间的相似性。常用的距离度量有:
欧氏距离 (Euclidean Distance): $d(mathbf{x}, mathbf{y}) = sqrt{sum_{i=1}^n (x_i y_i)^2}$
曼哈顿距离 (Manhattan Distance): $d(mathbf{x}, mathbf{y}) = sum_{i=1}^n |x_i y_i|$
闵可夫斯基距离 (Minkowski Distance): 欧氏距离和曼哈顿距离的推广。
K 值选择: K 是一个超参数,表示要考虑的近邻数量。K 的选择对结果有很大影响。通常通过交叉验证来选择最佳的 K 值。
分类过程: 对于一个待预测的样本,计算它与所有训练样本的距离,找出距离最近的 K 个样本。然后,统计这 K 个样本中占主导地位的类别,并将该类别赋给待预测样本。
回归过程: 同样找出距离最近的 K 个样本,然后计算这 K 个样本的目标值的平均值(或加权平均值)作为预测结果。

应用场景:

KNN 因其简单直观和易于实现而受到欢迎,但对于大规模数据集计算量较大。

推荐系统 (Recommendation Systems):
用户用户协同过滤 (UserUser Collaborative Filtering): 找到与当前用户相似的其他用户,然后将这些用户喜欢的但当前用户未接触过的物品推荐给当前用户。
物品物品协同过滤 (ItemItem Collaborative Filtering): 找到与当前用户喜欢的物品相似的其他物品,然后将这些相似物品推荐给用户。
图像识别 (Image Recognition):
手写数字识别 (Handwritten Digit Recognition): 将一张手写数字图片与训练集中的图片进行比较,找到最相似的 K 张图片,然后根据它们的标签进行投票。
人脸识别 (Face Recognition): 识别一个人脸图像所属的身份。
搜索与检索 (Search and Retrieval): 查找与查询内容最相似的数据。
异常检测 (Anomaly Detection): 将远离大部分数据点的样本视为异常。
模式识别 (Pattern Recognition): 识别具有相似特征的模式。

优点:

实现简单,易于理解。
不需要训练阶段。
对所有特征同等对待,不需要考虑特征之间的关系。
可以处理非线性关系。

缺点:

计算量大: 在预测阶段需要计算与所有训练样本的距离,对于大规模数据集效率较低。
对特征尺度敏感: 需要进行特征归一化或标准化,否则尺度大的特征会主导距离计算。
对噪声和异常值敏感: 少数几个离群点可能会影响 K 个近邻的判断。
维度灾难 (Curse of Dimensionality): 在高维空间中,距离的概念变得模糊,KNN 的性能会急剧下降。
需要选择合适的 K 值和距离度量。



4. 支持向量机 (Support Vector Machine, SVM)

支持向量机是一种强大的监督学习算法,主要用于分类,但也可以扩展到回归。其核心思想是找到一个最优的超平面,能够将不同类别的数据点最大程度地分开。

核心思想与工作原理:

最大间隔超平面 (Maximum Margin Hyperplane): SVM 的目标是找到一个超平面,使得它到最近的两个类别的数据点的距离(间隔)最大化。这些最近的数据点被称为支持向量。
线性可分: 当数据是线性可分时,SVM 就是找到一个线性超平面将其分开。
核函数 (Kernel Trick): 对于线性不可分的数据,SVM 利用核函数将数据映射到更高维的空间,使得数据在高维空间中线性可分。常用的核函数包括:
线性核 (Linear Kernel): $K(mathbf{x}_i, mathbf{x}_j) = mathbf{x}_i^T mathbf{x}_j$
多项式核 (Polynomial Kernel): $K(mathbf{x}_i, mathbf{x}_j) = (gamma mathbf{x}_i^T mathbf{x}_j + r)^d$
径向基函数核 (Radial Basis Function Kernel, RBF Kernel / Gaussian Kernel): $K(mathbf{x}_i, mathbf{x}_j) = exp(gamma ||mathbf{x}_i mathbf{x}_j||^2)$
Sigmoid 核: $K(mathbf{x}_i, mathbf{x}_j) = anh(gamma mathbf{x}_i^T mathbf{x}_j + r)$
软间隔 (Soft Margin): 允许一些样本点落在间隔内部甚至被错误分类,通过引入惩罚项来平衡分类的准确性和间隔的大小,以处理异常值和噪声。
SVM for Regression (SVR): 通过寻找一个函数,使得所有样本点都尽可能地落在该函数的一个特定间隔(epsiloninsensitive tube)内,同时最小化该函数的复杂度。

应用场景:

SVM 在处理高维数据和有清晰边界的问题时表现出色,常用于需要高精度的分类任务。

文本分类 (Text Classification):
垃圾邮件过滤 (Spam Detection): SVM 在文本分类任务中表现良好。
新闻主题分类 (News Topic Classification):
图像识别 (Image Recognition):
人脸检测 (Face Detection): 早期的许多人脸检测算法都基于 SVM。
物体识别 (Object Recognition):
图像分类 (Image Classification):
生物信息学 (Bioinformatics):
基因分类 (Gene Classification):
蛋白质分类 (Protein Classification):
手写字符识别 (Handwritten Character Recognition):
语音识别 (Speech Recognition):
医疗诊断 (Medical Diagnosis):
计算机视觉 (Computer Vision):
异常检测 (Anomaly Detection):

优点:

在高维空间中表现良好: 即使特征维度远大于样本数量,SVM 也能有不错的表现。
通过核函数可以处理非线性问题。
泛化能力强: 通过最大化间隔,使得模型在未见过的数据上表现稳定。
支持向量的数量通常比训练样本少,模型更紧凑。

缺点:

计算复杂度高: 训练过程可能非常耗时,特别是对于大规模数据集。
对参数选择敏感: 核函数的类型、参数 ($gamma$, C, degree 等) 的选择对模型性能影响很大,需要仔细调优。
模型解释性较差: 相较于决策树,SVM 的决策过程不容易直观理解。
对缺失值和噪声敏感: 软间隔可以缓解,但仍然需要注意数据质量。
对于类别不平衡的数据集,性能可能会受到影响。



5. 逻辑回归 (Logistic Regression)

逻辑回归是一种用于监督学习的分类算法,尽管名字中有“回归”,但它主要用于解决二分类问题,也可以扩展到多分类问题。它的核心思想是使用Sigmoid 函数(或称为 Logit 函数)将线性模型的输出映射到 0 到 1 之间的概率值,从而进行分类。

核心思想与工作原理:

线性模型 + Sigmoid 函数: 逻辑回归首先构建一个线性模型:$z = w^T mathbf{x} + b$。然后,将这个线性模型的输出通过 Sigmoid 函数 $sigma(z) = frac{1}{1 + e^{z}}$ 进行转换,得到一个概率值 $P(Y=1|mathbf{x}) = sigma(w^T mathbf{x} + b)$。
概率估计: Sigmoid 函数将任意实数映射到 (0, 1) 区间,可以被解释为样本属于正类别的概率。
损失函数: 逻辑回归使用交叉熵损失函数 (CrossEntropy Loss) 或称为对数损失 (Log Loss) 来衡量预测概率与真实标签之间的差异。
优化: 通过最大似然估计或最小化交叉熵损失函数来找到最优的权重 $w$ 和偏置 $b$。常用的优化算法包括梯度下降及其变种。
分类决策: 当预测概率 $P(Y=1|mathbf{x}) > 0.5$ 时,将样本预测为正类别;否则,预测为负类别。这个阈值也可以根据具体问题进行调整。
多分类: 对于多分类问题,可以使用 Softmax 回归(也称为 multinomial logistic regression),它是逻辑回归在多分类问题上的扩展。

应用场景:

逻辑回归是一种非常基础且广泛使用的分类算法,尤其适用于需要预测概率和解释模型输出的场景。

二分类问题:
点击率预测 (ClickThrough Rate Prediction): 预测用户是否会点击某个广告或链接。
用户流失预测 (Customer Churn Prediction): 预测客户是否会停止使用某项服务。
疾病预测 (Disease Prediction): 预测一个人是否会患上某种疾病,例如心脏病、糖尿病等。
欺诈检测 (Fraud Detection): 检测信用卡交易、保险索赔等是否为欺诈行为。
信用评分 (Credit Scoring): 评估申请人的信用风险等级。
情感分析 (Sentiment Analysis): 判断文本的情感是积极还是消极。
概率预测: 逻辑回归输出的概率值在许多应用中非常有用,例如在风险评估、决策支持系统中。
特征重要性: 逻辑回归的系数(权重 $w$)可以直观地反映每个特征对预测结果的贡献程度,解释性较强。
作为其他更复杂模型的基准模型 (Baseline Model):

优点:

简单、易于理解和实现。
计算效率高: 训练速度快,可用于处理大规模数据集。
输出概率: 能够提供预测的概率值,这在许多应用中非常重要。
解释性强: 系数可以直观地反映特征的重要性。
不易过拟合: 相对于复杂模型,逻辑回归通常不容易过拟合,特别是当特征数量适中时。

缺点:

只能处理线性关系: 只能找到线性决策边界,无法很好地处理高度非线性的问题。
对特征工程依赖较大: 需要手动进行特征转换(如多项式特征、交互特征)来捕捉非线性关系。
对多重共线性敏感: 当输入特征之间存在高度相关性时,模型的稳定性和解释性会受到影响。
对于类别不平衡的数据集,可能会产生偏移的预测结果。



6. 最大熵模型 (Maximum Entropy Model)

最大熵模型与逻辑回归是同一类模型,它们都是解决监督学习中的分类问题,且都是基于概率模型。实际上,逻辑回归可以看作是最大熵模型在离散特征下的一个特例。

核心思想与工作原理:

最大熵原理: 在所有满足已知事实(约束条件)的概率分布中,选择熵最大的那个。熵代表了概率分布的不确定性或随机性。选择熵最大的分布,意味着我们不引入任何额外的信息或假设,只基于已有的证据进行推断。
约束条件: 约束条件通常是从训练数据中提取的特征函数的期望值。例如,对于一个文本分类问题,一个约束可以是“在所有文本中,包含词‘football’的文本属于‘体育’类别的概率期望值应该等于训练集中观察到的值”。
数学形式: 最大熵模型的通用形式是指数族分布(指数模型),其概率分布可以表示为:
$P(y|mathbf{x}) = frac{1}{Z(mathbf{x})} expleft(sum_{i=1}^n w_i f_i(mathbf{x}, y) ight)$
其中:
$y$: 类别标签。
$mathbf{x}$: 输入特征。
$f_i(mathbf{x}, y)$: 特征函数,捕捉输入 $mathbf{x}$ 和输出 $y$ 之间的关系。
$w_i$: 对应特征函数的权重。
$Z(mathbf{x})$: 归一化因子,确保所有类别的概率之和为 1。$Z(mathbf{x}) = sum_{y'} expleft(sum_{i=1}^n w_i f_i(mathbf{x}, y') ight)$
与逻辑回归的关系:
对于二分类问题,如果特征函数 $f_i(mathbf{x}, y)$ 的形式恰当(例如,仅当 $y=1$ 时非零,并且与 $mathbf{x}$ 的某些组合相关),则最大熵模型就退化为逻辑回归。
逻辑回归的线性模型 $w^T mathbf{x} + b$ 实际上是最大熵模型中一个特征函数(常数特征 $f_0(mathbf{x}, y) = 1$ 对应权重 $w_0 = b$)和其他特征函数组合的结果。

应用场景:

最大熵模型在各种文本相关的分类任务中表现出色,并且因其强大的表示能力和概率输出而受到青睐。

文本分类 (Text Classification):
命名实体识别 (Named Entity Recognition, NER): 识别文本中的人名、地名、组织名等实体。
词性标注 (PartofSpeech Tagging, POS Tagging): 确定句子中每个词的词性(名词、动词、形容词等)。
情感分析 (Sentiment Analysis):
新闻分类 (News Categorization):
机器翻译 (Machine Translation): 作为语言模型的一部分。
语音识别 (Speech Recognition):
生物信息学 (Bioinformatics):
需要概率输出的分类任务:

优点:

表达能力强: 可以处理复杂的特征组合和非线性关系。
输出概率: 提供可靠的概率估计。
灵活性高: 可以通过设计各种特征函数来适应不同的问题。
在文本分类任务中表现通常优于朴素贝叶斯。

缺点:

训练过程相对复杂且耗时: 需要进行数值优化,尤其是在特征数量很多的情况下。
特征工程至关重要: 模型性能很大程度上取决于特征函数的选择和设计。
对于非常大的数据集,模型可能会变得非常庞大且难以训练。
对参数调整敏感。



总结与选择建议:

如果你需要一个简单快速、易于解释的模型,并且数据特征之间可能相对独立, 考虑 朴素贝叶斯。特别适用于文本分类。
如果你需要一个可解释性强、能够可视化决策过程的模型, 考虑 决策树。但要注意过拟合问题,可以考虑使用集成方法(如随机森林)。
如果你需要一个简单直观、对特征尺度不敏感(但需要归一化),并且数据集不是特别大, 考虑 K 近邻。在推荐系统和模式识别中应用广泛。
如果你需要一个强大的分类器,在高维数据或有明确分类边界的问题上表现优异,并且愿意花时间进行参数调优, 考虑 支持向量机 (SVM)。特别适用于图像识别和生物信息学。
如果你需要一个简单、快速、可解释性强的二分类模型,并且能够输出概率值, 考虑 逻辑回归。是许多基线模型和复杂模型的基础。
如果你需要一个具有强大表达能力、能处理复杂特征组合并提供准确概率估计的模型,尤其是在文本处理任务中, 考虑 最大熵模型。

在实际应用中,通常会尝试多种算法,并通过交叉验证等方法来评估它们的性能,最终选择最适合特定问题的模型。特征工程、数据预处理以及模型调优也是获得良好性能的关键步骤。

网友意见

user avatar

关于这个问题我今天正好看到了这个文章。讲的正是各个算法的优劣分析,很中肯。

zhuanlan.zhihu.com/p/25

正好14年的时候有人做过一个实验[1],比较在不同数据集上(121个),不同的分类器(179个)的实际效果。

论文题为:Do we Need Hundreds of Classifiers to Solve Real World Classification Problems?

实验时间有点早,我尝试着结合我自己的理解、一些最近的实验,来谈一谈吧。主要针对分类器(Classifier)。


写给懒得看的人:

没有最好的分类器,只有最合适的分类器。

随机森林平均来说最强,但也只在9.9%的数据集上拿到了第一,优点是鲜有短板。

SVM的平均水平紧随其后,在10.7%的数据集上拿到第一。

神经网络(13.2%)和boosting(~9%)表现不错。

数据维度越高,随机森林就比AdaBoost强越多,但是整体不及SVM[2]。

数据量越大,神经网络就越强。


近邻 (Nearest Neighbor)

典型的例子是KNN,它的思路就是——对于待判断的点,找到离它最近的几个数据点,根据它们的类型决定待判断点的类型。

它的特点是完全跟着数据走,没有数学模型可言。


适用情景:

需要一个特别容易解释的模型的时候。

比如需要向用户解释原因的推荐算法。


贝叶斯 (Bayesian)


典型的例子是Naive Bayes,核心思路是根据条件概率计算待判断点的类型。

是相对容易理解的一个模型,至今依然被垃圾邮件过滤器使用。


适用情景:

需要一个比较容易解释,而且不同维度之间相关性较小的模型的时候。

可以高效处理高维数据,虽然结果可能不尽如人意。


决策树 (Decision tree)


决策树的特点是它总是在沿着特征做切分。随着层层递进,这个划分会越来越细。

虽然生成的树不容易给用户看,但是数据分析的时候,通过观察树的上层结构,能够对分类器的核心思路有一个直观的感受。

举个简单的例子,当我们预测一个孩子的身高的时候,决策树的第一层可能是这个孩子的性别。男生走左边的树进行进一步预测,女生则走右边的树。这就说明性别对身高有很强的影响。


适用情景:

因为它能够生成清晰的基于特征(feature)选择不同预测结果的树状结构,数据分析师希望更好的理解手上的数据的时候往往可以使用决策树。

同时它也是相对容易被攻击的分类器[3]。这里的攻击是指人为的改变一些特征,使得分类器判断错误。常见于垃圾邮件躲避检测中。因为决策树最终在底层判断是基于单个条件的,攻击者往往只需要改变很少的特征就可以逃过监测。

受限于它的简单性,决策树更大的用处是作为一些更有用的算法的基石。


随机森林 (Random forest)


提到决策树就不得不提随机森林。顾名思义,森林就是很多树。

严格来说,随机森林其实算是一种集成算法。它首先随机选取不同的特征(feature)和训练样本(training sample),生成大量的决策树,然后综合这些决策树的结果来进行最终的分类。

随机森林在现实分析中被大量使用,它相对于决策树,在准确性上有了很大的提升,同时一定程度上改善了决策树容易被攻击的特点。


适用情景:

数据维度相对低(几十维),同时对准确性有较高要求时。

因为不需要很多参数调整就可以达到不错的效果,基本上不知道用什么方法的时候都可以先试一下随机森林。


SVM (Support vector machine)


SVM的核心思想就是找到不同类别之间的分界面,使得两类样本尽量落在面的两边,而且离分界面尽量远。

最早的SVM是平面的,局限很大。但是利用核函数(kernel function),我们可以把平面投射(mapping)成曲面,进而大大提高SVM的适用范围。

提高之后的SVM同样被大量使用,在实际分类中展现了很优秀的正确率。


适用情景:

SVM在很多数据集上都有优秀的表现。

相对来说,SVM尽量保持与样本间距离的性质导致它抗攻击的能力更强。

和随机森林一样,这也是一个拿到数据就可以先尝试一下的算法。


逻辑斯蒂回归 (Logistic regression)

逻辑斯蒂回归这个名字太诡异了,我就叫它LR吧,反正讨论的是分类器,也没有别的方法叫LR。顾名思义,它其实是回归类方法的一个变体。

回归方法的核心就是为函数找到最合适的参数,使得函数的值和样本的值最接近。例如线性回归(Linear regression)就是对于函数f(x)=ax+b,找到最合适的a,b。

LR拟合的就不是线性函数了,它拟合的是一个概率学中的函数,f(x)的值这时候就反映了样本属于这个类的概率。


适用情景:

LR同样是很多分类算法的基础组件,它的好处是输出值自然地落在0到1之间,并且有概率意义。

因为它本质上是一个线性的分类器,所以处理不好特征之间相关的情况。

虽然效果一般,却胜在模型清晰,背后的概率学经得住推敲。它拟合出来的参数就代表了每一个特征(feature)对结果的影响。也是一个理解数据的好工具。


判别分析 (Discriminant analysis)

判别分析主要是统计那边在用,所以我也不是很熟悉,临时找统计系的闺蜜补了补课。这里就现学现卖了。

判别分析的典型例子是线性判别分析(Linear discriminant analysis),简称LDA。

(这里注意不要和隐含狄利克雷分布(Latent Dirichlet allocation)弄混,虽然都叫LDA但说的不是一件事。)

LDA的核心思想是把高维的样本投射(project)到低维上,如果要分成两类,就投射到一维。要分三类就投射到二维平面上。这样的投射当然有很多种不同的方式,LDA投射的标准就是让同类的样本尽量靠近,而不同类的尽量分开。对于未来要预测的样本,用同样的方式投射之后就可以轻易地分辨类别了。


使用情景:

判别分析适用于高维数据需要降维的情况,自带降维功能使得我们能方便地观察样本分布。它的正确性有数学公式可以证明,所以同样是很经得住推敲的方式。

但是它的分类准确率往往不是很高,所以不是统计系的人就把它作为降维工具用吧。

同时注意它是假定样本成正态分布的,所以那种同心圆形的数据就不要尝试了。


神经网络 (Neural network)

神经网络现在是火得不行啊。它的核心思路是利用训练样本(training sample)来逐渐地完善参数。还是举个例子预测身高的例子,如果输入的特征中有一个是性别(1:男;0:女),而输出的特征是身高(1:高;0:矮)。那么当训练样本是一个个子高的男生的时候,在神经网络中,从“男”到“高”的路线就会被强化。同理,如果来了一个个子高的女生,那从“女”到“高”的路线就会被强化。

最终神经网络的哪些路线比较强,就由我们的样本所决定。

神经网络的优势在于,它可以有很多很多层。如果输入输出是直接连接的,那它和LR就没有什么区别。但是通过大量中间层的引入,它就能够捕捉很多输入特征之间的关系。卷积神经网络有很经典的不同层的可视化展示(visulization),我这里就不赘述了。

神经网络的提出其实很早了,但是它的准确率依赖于庞大的训练集,原本受限于计算机的速度,分类效果一直不如随机森林和SVM这种经典算法。


使用情景:

数据量庞大,参数之间存在内在联系的时候。

当然现在神经网络不只是一个分类器,它还可以用来生成数据,用来做降维,这些就不在这里讨论了。


Rule-based methods

这个我是真不熟,都不知道中文翻译是什么。

它里面典型的算法是C5.0 Rules,一个基于决策树的变体。因为决策树毕竟是树状结构,理解上还是有一定难度。所以它把决策树的结果提取出来,形成一个一个两三个条件组成的小规则。


使用情景:

它的准确度比决策树稍低,很少见人用。大概需要提供明确小规则来解释决定的时候才会用吧。


提升算法(Boosting)

接下来讲的一系列模型,都属于集成学习算法(Ensemble Learning),基于一个核心理念:三个臭皮匠,顶个诸葛亮。

翻译过来就是:当我们把多个较弱的分类器结合起来的时候,它的结果会比一个强的分类器更

典型的例子是AdaBoost。

AdaBoost的实现是一个渐进的过程,从一个最基础的分类器开始,每次寻找一个最能解决当前错误样本的分类器。用加权取和(weighted sum)的方式把这个新分类器结合进已有的分类器中。

它的好处是自带了特征选择(feature selection),只使用在训练集中发现有效的特征(feature)。这样就降低了分类时需要计算的特征数量,也在一定程度上解决了高维数据难以理解的问题。

最经典的AdaBoost实现中,它的每一个弱分类器其实就是一个决策树。这就是之前为什么说决策树是各种算法的基石。


使用情景:

好的Boosting算法,它的准确性不逊于随机森林。虽然在[1]的实验中只有一个挤进前十,但是实际使用中它还是很强的。因为自带特征选择(feature selection)所以对新手很友好,是一个“不知道用什么就试一下它吧”的算法。


装袋算法(Bagging)

同样是弱分类器组合的思路,相对于Boosting,其实Bagging更好理解。它首先随机地抽取训练集(training set),以之为基础训练多个弱分类器。然后通过取平均,或者投票(voting)的方式决定最终的分类结果。

因为它随机选取训练集的特点,Bagging可以一定程度上避免过渡拟合(overfit)。

在[1]中,最强的Bagging算法是基于SVM的。如果用定义不那么严格的话,随机森林也算是Bagging的一种。


使用情景:

相较于经典的必使算法,Bagging使用的人更少一些。一部分的原因是Bagging的效果和参数的选择关系比较大,用默认参数往往没有很好的效果。

虽然调对参数结果会比决策树和LR好,但是模型也变得复杂了,没事有特别的原因就别用它了。


Stacking

这个我是真不知道中文怎么说了。它所做的是在多个分类器的结果上,再套一个新的分类器。

这个新的分类器就基于弱分类器的分析结果,加上训练标签(training label)进行训练。一般这最后一层用的是LR。

Stacking在[1]里面的表现不好,可能是因为增加的一层分类器引入了更多的参数,也可能是因为有过渡拟合(overfit)的现象。


使用情景:

没事就别用了。

(修订:@庄岩 提醒说stacking在数据挖掘竞赛的网站kaggle上很火,相信参数调得好的话还是对结果能有帮助的。

blog.kaggle.com/2016/12

这篇文章很好地介绍了stacking的好处。在kaggle这种一点点提升就意味着名次不同的场合下,stacking还是很有效的,但是对于一般商用,它所带来的提升就很难值回额外的复杂度了。)



多专家模型(Mixture of Experts)

最近这个模型还挺流行的,主要是用来合并神经网络的分类结果。我也不是很熟,对神经网络感兴趣,而且训练集异质性(heterogeneity)比较强的话可以研究一下这个。


讲到这里分类器其实基本说完了。讲一下问题里面其他一些名词吧。


最大熵模型 (Maximum entropy model)

最大熵模型本身不是分类器,它一般是用来判断模型预测结果的好坏的。

对于它来说,分类器预测是相当于是:针对样本,给每个类一个出现概率。比如说样本的特征是:性别男。我的分类器可能就给出了下面这样一个概率:高(60%),矮(40%)。

而如果这个样本真的是高的,那我们就得了一个分数60%。最大熵模型的目标就是让这些分数的乘积尽量大。

LR其实就是使用最大熵模型作为优化目标的一个算法[4]。


EM

就像最大熵模型一样,EM不是分类器,而是一个思路。很多算法都是基于这个思路实现的。

@刘奕驰 已经讲得很清楚了,我就不多说了。



隐马尔科夫 (Hidden Markov model)

这是一个基于序列的预测方法,核心思想就是通过上一个(或几个)状态预测下一个状态。

之所以叫“隐”马尔科夫是因为它的设定是状态本身我们是看不到的,我们只能根据状态生成的结果序列来学习可能的状态。


适用场景:

可以用于序列的预测,可以用来生成序列。


条件随机场 (Conditional random field)

典型的例子是linear-chain CRF。

具体的使用 @Aron 有讲,我就不献丑了,因为我从来没用过这个。


就是这些啦。


相关的文章:

[1]: Do we need hundreds of classifiers to solve real world classification problems.

Fernández-Delgado, Manuel, et al. J. Mach. Learn. Res 15.1 (2014)

[2]: An empirical evaluation of supervised learning in high dimensions.

Rich Caruana, Nikos Karampatziakis, and Ainur Yessenalina. ICML '08

[3]: Man vs. Machine: Practical Adversarial Detection of Malicious Crowdsourcing Workers

Wang, G., Wang, T., Zheng, H., & Zhao, B. Y. Usenix Security'14

[4]: win-vector.com/dfiles/L

user avatar

最近在参加一个分类算法竞赛,也正好整理各个分类机器学习算法的简单介绍,应用场景和优缺点。资源来自网上和自己个人理解。

(因为都是这博主一块,那博主一块,有的是很久之前整理的,找不到原资源链接,如侵删)


--------------------------------继续更新中------------------------2020.11.24

一、逻辑回归模型

1、理解逻辑回归模型(LR)

逻辑回归是一种分类算法,其原理是将线性回归预测出来的数据映射到logit函数上,从而完成对事件发生概率的预测(最终输出预测标签0,1)。

2、逻辑回归模型的应用场景

LR是很多分类算法的基础组件,它的好处是输出值自然地落在0到1之间,并且有概率意义。因为LR本质上是一个线性的分类器,所以处理不好特征之间相关的情况。

虽然预测效果一般,但胜在模型清洗,背后的概率学经得起推敲。它拟合出来的参数就代表了每一个特征对结果的影响。也是一个理解数据的好工具。

使用条件:当数据线性可分,特征空间不是很大的情况,不用在意新数据的情况,后续会有大量新数据的情况。

小结:

  • 用于分类:适合做很多分类算法的基础组件。
  • 用于预测:预测事件发生的概率(输出)。
  • 用于分析:单一因素对某一个事件发生的影响因素分析(特征参数值)。

3、逻辑回归的优缺点

优点:

  • 从整体模型来说,模型清洗,背后的概率推导经得住推敲;
  • 从输出值来说,输出值自然落在0到1之间,并且有概率意义;
  • 从模型参数来说,参数代表每个特征对输出的影响,可解释性强;
  • 从运行速度来说,实施简单,非常高效(计算量小、存储占用低),可以在大数据场景中使用;
  • 从过拟合角度来说,解决过拟合的方法很多,如L1、L2正则化;
  • 从多重共线性来说,L2正则化就可以解决多重共线性问题;

缺点:

  • (特征相关情况)因为它本质上是一个线性的分类器,所以处理不好特征之间相关的情况;
  • (特征空间)特征空间很大时,性能不好;
  • (预测精度)容易欠拟合,预测精度不高;

二、树模型

1、理解树模型

决策树模型是运用于分类以及回归的一种树结构。决策树由节点和有向边组成,一般一棵树包含一个根节点、若干内部节点和若干叶节点。决策树的决策过程需要从根节点开始,待测数据与决策树中的特征节点进行比较,并按照比较结果选择下一比较分支,直至叶节点作为最终的决策结果

2、树模型的应用

树模型可以生成清晰的基于特征选择不同预测结构的树状结构,当你希望可以更好的理解手上的数据的时候往往可以使用决策树。同时它也是相对容易被供给的分类器(因为这里认为的改变一些特征,是的分类器判断错误。常见于垃圾邮件躲避检测中,因为决策树最终在底层的判断是基于单个条件,攻击者往往只需要改变很少的特征就可以躲过监测)。

小结:

  • 受限于它的简单性,决策树更大的用处是作为一些更有用的算法的基石;

3、树模型的优缺点

优点:

  • 容易理解、可读性强,比较直观;
  • 自变量/特征可以是连续变量,也可以是分类变量;
  • 可处理缺失值;
  • 基本不用做原始数据的预处理,如标准化等;
  • 可以建立非线性模型;
  • 即使是较大的数据及,其训练时间也很短;

劣势:

  • 大型的决策树较难解释;
  • 方差大的决策树会导致模型表现较差;
  • 容易出现过拟合;

三、集成模型

通过组合多个学习器来完成任务,通过集成方法,可以将多个弱学习器组合成一个强分类器,因此集成学习的泛化能力一般比单一分类器要好。

集成方法主要包括Bagging和Boosting,Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,最终得到不一样的效果。

常见的基于Bagging思想的集成模型有:随机森林、

基于Boosting思想的集成模型有:Adaboost、XgBoost、LightGBM等。

Bagging和Boosting的区别总结如下:

  • 在样本选择上:Bagging方法的训练集是从原始集中有放回的选取,所以原始集中选出的各轮训练集之间是独立的;而Boosting方法需要每一轮的训练集不变,知识训练集中每个样本在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整;
  • 在样例权重上:Bagging方法使用均匀取样,所以每个样本的权重相等;而Boosting方法根据错误率不断调整样本的权重,错误率越大则权重越大;
  • 在预测函数上:Bagging方法中所有预测函数的权重相等;而Boosting方法汇总每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重;
  • 并行计算上:Bagging方法中各个预测函数可以并行生成;而Boosting方法各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果;

1、基于bagging思想的集成模型——随机森林模型

随机森林是一种集成算法。它首先随机选取不同的特征和训练样本,生成大量的决策树,然后综合这些决策树的结果来进行最终的分类。

随机森林在现实分析中被大量使用,相对于决策树,在准确性有了很大的额提升,同时一定程度上改善了决策树容易被攻击的特点。

随机森林的应用:

  • 当数据维度相对低(几十维),同时对准确性有较高要求时;
  • 因为不需要很多参数调整就可以达到不错的效果,基本上不知道用什么方法的时候可以先试一下随机森林;

随机森林的优缺点:

优点:

  • 在所有的算法中,随机森林具有极好的准确率;
  • 能够运行在大数据集上;
  • 能够处理具有高维特征的输入样本,而且不需要降维;
  • 能够评估各个特征在分类问题上的重要性;
  • 在生成过程中,能够获取内部生成误差的一种无偏估计;
  • 对于缺失值也能够获得很好的结果;

缺点:

  • 据观测,如果一些分类/回归问题的训练数据中存在噪音,随机森林中的数据集中会出现过拟合的现象;
  • 相对决策树来说,随机森林算法更复杂,计算成本更高(因为RF是有多个决策树组成);
  • 由于其本身的复杂性,它们比其他类似的算法需要更多的时间来训练;

2、基于boosting思想的集成模型

XGBoost模型

XGBoost即梯度提升机器算法,其基本思想是把成百上千个分类准确率较低的树模型组合成一个准确率较高的模型,该模型不断迭代,每次迭代生成一颗新的树,如何在每一步生成合理的树是Boosting分类器的核心。

XGBoost模型的应用:

  • 在不确定使用哪种模型时,可以使用xgboost模型跑看下效果(很多竞赛的top都有用xgboost);
  • 特征选择,可以根据模型输出的特征重要性,来选择相关的特征;

XGBoost的优缺点:

优点:

  • XGBoost支持多样,并加入了正则项,支持shrinkage缩减(相当于学习率),增加了列抽样来防止过拟合,能够处理缺失值,并且支持并行;

缺点:

  • 对所有叶子节点一视同仁,有些叶子节点影响不大,从这方面来说加重了计算,还有就是预排序会消耗很大空间,且要保存特征的排序索引,消耗很多时间,计算量大;

LightGBM模型

LGB的应用场合:

  • 当数据量较大的时候,使用xgboost需要更长的时间,可以考虑用LGB;
  • 不想对类别特征进行 one hot encoding 时,可使用LGB;

LGB的优缺点:

优点:

  • 内存和计算上现象对xgb有明显优势,支持多线程优化;
  • 支持直接输入类别特征,不需要虚拟化;

缺点:

  • leaf-wise的建树策略很容易过拟合,需要限制最大深度;
  • 相对XGB来说,LGB较为粗糙,会损失一定精度;
user avatar

大神@xyzh已经答得很好了,而且我非常赞同他提到的"没有最好的分类器,只有最合适的分类器"这句话。


结合我自己在学习《机器学习实战》这本书的例子,用常见的数据来阐述各大机器学习算法的应用场景,作为大神答案的补充。回答中的不足之处,还请包含。


K 近邻算法

K 近邻(k Nearest Neighbor,kNN)是机器学习领域非常有效且易于掌握的算法。

以电影分类为例,目前有6个电影,每个电影有两个维度的信息(打斗镜头和接吻镜头)和一个标签(电影类型),现在有一个新的电影《复仇者联盟III》,在知道打斗镜头和接吻镜头的情况下,如何判断它的标签(电影类型)?

人类一眼就能够判断出《复仇者联盟III》属于动作片,因为它和其他三个动作片在打斗镜头和接吻镜头上有很大的相似性。


如何让计算机学习这种相似性呢?K 近邻算法是这么干的:

  1. 纯数据太过抽象,把它们画出来吧。

以打斗镜头的次数为x轴,以接吻镜头的次数为y轴,将以上7个电影都画在图上。


2. 计算机只能看懂数字,所以就算一算《妇联III》离其他几个电影到底有多近。

图像中的距离很容易计算,即x方向的差值平方加上y方向的差值平方,然后开方得到。下图就是《妇联III》距离每一个电影的距离,然后根据距离对他们进行排序。


3.统计排名前k的电影类型,即可判断出《妇联III》属于哪种电影。

根据前 K 个结果中,哪个电影类型占多数,判定当前电影的归类。当K 近邻算法中的 K = 3 时,根据排位结果,与《妇联III》最近的3个电影均为动作类电影,因此《妇联III》被判定为动作类电影。如果K = 4,从排位上来说动作类电影占3个,爱情类电影占1个,《妇联III》还是被判定为动作类电影。


以上即为K 近邻算法思路。现实世界中的很多分类问题都可以使用K 近邻算法,比如根据糖分、维生素等含量的高低对未知水果进行分类。


K 近邻的计算过程可以看出,K 近邻算法虽然原理简单,但在实际应用时必须将所有数据进行存储,而且需要对数据集中的每个数据进行距离计算,非常消耗计算资源。所以k-近邻算法一般不会应用于复杂的分类问题。


K 近邻

优点:精度高、不太受到异常离散值的影响

缺点:需要大量存储空间、计算复杂度高

适用场景:少量数据和大量低维数据


决策树

决策树算法的思路与人类的思考过程十分相似。而且我们经常在编程中使用的if else语句其实就是决策树的一个子决策过程。


如下图所示,为一个假想的邮件分类决策树,其中方形框表示一个判断过程,椭圆形框表示一个判断结果。

决策时首先根据发送邮件的域名决定这封邮件是否在我的订阅列表中,如果不在,则归类为非订阅邮件;否则再根据是否包含“无人驾驶”关键词,将邮件分为需要查看的邮件和无需处理的垃圾邮件。


这个过程有两个决策条件,分别是域名是否在订阅列表中、是否包含“无人驾驶”关键词。这两个决策条件关联的数据特征分别是邮件的域名和邮件的关键词。

刚才提到邮件分类的粒子仅仅是一个简单且易于构建的决策树。而面对复杂的数据集时,需要解决的第一个问题就是,数据集中哪一个特征在划分数据分类时起决定性的作用


以如下海洋生物数据为例:

数据出处:《机器学习实战》


首先将数据转换成及其可以理解的代码:

dataSet = [ [1, 1, 'yes'] [1, 1, 'yes'] [1, 0, 'no'] [0, 1, 'no'] [0, 1, 'no'] ]

labels = [ 'no surfacing', 'flippers' ]


观察以上数据,并不能立刻判断出是“不浮出水面是否可以生存”还是“是否有脚蹼”对“属于鱼类”的判断影响更大。所以选择第一个特征时遇到了困难。


信息论之父——克劳德·艾尔伍德·香农为量化度量信息提供的解决方案——信息熵。信息熵本身是一个比较复杂的概念,如果拿公式解释又需要花很多精力去理解。


信息熵反映了数据的复杂度,熵越高,混合的数据也越多。如果增加了某个特征导致熵值增加很大,那么这个特征的“影响力”就很大。


首先计算整组数据的信息熵E0,再计算去掉某个特征时,数据的信息熵Ei。得到各个特征导致的信息熵减少量,减少量最多的即为最为重要的特征。因此这个特征就是决策树的最顶层。继续重复之前的操作,找到决策树的第二层的特征。


根据信息熵的原理,可以知道,鱼类分类的决策树种,第一层分类特征为"no surfacing",第二层分类特征为"flippers"。因此决策树模型如下:

由此可见,决策树模型建立后,不再需要像K 近邻一样对整个数据集进行遍历计算,仅需完成特征的判断,即可实现分类。


决策树能够根据数据的各个特征,高效地对数据进行分类。一个好的决策树给出的结果往往可以匹敌在当前领域具有几十年工作经验的人类专家。


决策树的优缺点和适用场景

优点:计算复杂度不高,输出结果易于理解。

缺点:可能会产生过度匹配问题(输出的结果完全满足当前数据,但不具备普遍推广的价值)

适用场景:多维特征数据


持续更新~

备稿+绘图中...


你这么好看,一定很会点赞~

user avatar

时间来到了2021年,神经网络从没人考虑,到现在已经开始独领风骚,各个领域,各个场景,NN都变得不可或缺。作为一个在各种数据和场景中摸爬滚打过的算法工程师,kaggle GrandMaster资深玩家,谈一谈自己的一些看法。

别光收藏不点赞呀,关注公告 包包算法笔记,更多精彩技术干货。

一道题目引入

我们把这一些算法分分类,大体可以分为有监督和无监督。大部分回答也是集中在有监督的选型上,无监督确实在实际工作应用中,因为各种问题没有像有监督那样好施展拳脚。

我们抛开他们复杂的外衣,抽丝剥茧,找到他们应用的关键差异吧。没有最牛的算法,只有最合适的场景。

我还是出那道最经典的题目吧。

题目:请使用一个逻辑回归的模型,建模一个身材分类器,身材分偏胖和偏瘦两种,输入的特征有身高和体重。

数据集大概长这样:

身材数据集

我们从逻辑回归开始讲起,顺便引入一个贯穿全文非常关键的概念,非线性。

从逻辑回归说起

逻辑回归解决的方法就是我拍两个系数加权,使用 sigmoid(ax+by+c)就搞定了。LR建模的过程,就是学习到a b c 三个参数的过程

LR在早期工业界,有着举足轻重的地位,你可能听说过凤巢上亿特征解决个性化广告的传说。

那大概是LR这辈子的高光时刻吧。他就是搞了上亿个这样的参数,然后算了个加权求和,通过sigmoid转化为概率。看起来这个模型,有多少人力,就有多少智能,非常接近人工智能的本质了,我只要能把特征搞出来,权重算出来,那问题不就迎刃而解了吗?

事实上,我们很难单纯地从身高和体重决策出一个人的身材,你说姚明体重280斤,他真的一定就胖吗??别忘了他身高有226公分的。

这组数据可能超出了你的认知,只看数据不看照片,一下子不好说他是胖还是瘦。(其实挺胖的哈哈)

嗯,这个你看到那组数据,不好一下子说出来的感觉,就是机器学习里面非常关键的概念,“非线性”。

这个问题不是那么好“线性“解决的,线性解决的意思就是我拍两个系数加权在原始特征x和y上,使用 sigmoid(ax+by+c)就搞定了。

解决的方法有两个:

1.升级模型,把线性的逻辑回归加上kernel来增加非线性的能力。我们使用这个模型 sigmoid(ax+by+kx*y^(-2)+c),这个模型通过多项式核方法的升级,解决了低维空间线性模型不太好解决的问题。

2.特征工程,掏出体检报告上的BMI指数,BMI=体重/(身高^2)。这样,通过BMI指数,就能非常显然地帮助我们,刻画一个人身材如何。甚至,你可以抛弃原始的体重和身高数据。

类似的问题还有朴素贝叶斯和SVM。

再看贝叶斯

大家接触朴素贝叶斯估计都是从文本分类的任务开始的。教科书上非常常讲的垃圾邮件分类例子。

朴素贝叶斯作为经典的统计机器学习方法,根正苗红的贝叶斯原理的应用,是最最直观,最最朴素和最最快的算法。

还是用我上面讲的例子,朴素贝叶斯解决这个问题怎么做的呢?

我只需要算一个这样的贝叶斯公式就好了

p(类别|特征) = p(特征|类别)*p(类别)/p(特征)

特征就是身高、体重,类别就是身材。

最后三项,对应着用身高体重身材的等维度的统计概率,都是可以在数据集中统计出来的,贝叶斯模型训练的过程,就是算这些各种形式概率表达式的过程。这样,我就把预测变成了查表连乘的过程,查表是计算机中最快的操作,意味着他也是推断最快的模型。

朴素贝叶斯假设各特征之间的条件独立性,即

p(身高、体重|身材) = p(身高|身材)*p(体重|身材)

也由于他的过度简化,导致它几乎只在特定场景应用了,比如特别简单的文本分类就比较适合朴素贝叶斯。

SVM的那些事

支持向量机也是线性的模型。

SVM应该是学术界非常喜欢的模型,他有着分类器最美好的愿望,在特征空间里画一个平面,把样本点划分开,这个模型算是把可视化角度可解释性拉满了。

往往事与愿违,很多并不是线性可分的,你没办法简单的画一个超平面。你需要画一个很曲折的东西,才能把他们分好。

回到刚才的身材分类器的例子上,如果你没有BMI指数,和有BMI指数,SVM的超平面截然不同。

有BMI指数的话,我在一维度坐标轴上画一个点就能解决。

要是没有BMI指数的话。你也只能像LR那样,通过核方法来解决了。在方式一我们使用了核方法给这些模型升维,方式二使用了特征方法。

要知道天下没有免费的午餐,在你使用核方法升维的时候,实际很难精炼出恰好是x*y^(-2)这样的多项式表达,你肯定是一股脑地把x*y,x^2*y, x*y^2 这些项都扔进去了。

决策树的高光时刻

这么暴力的操作,有两个问题,一是共线性,二是噪声。

第一、共线性的意思是几个项表达的含义是趋同的,保持了很强的线性关系,对于逻辑回归是致命的问题,因为他带来了权重的不稳定,要知道逻辑回归权重可是暗示了特征重要性的。还会破坏朴素贝叶斯的基本假设。这些都是有副作用的。

(要是你对这段话,不好理解的话,仔细学习下逻辑回归模型和共线性的理论,此处不单独展开)

第二、噪声让你的分类器学习到了一些不好的东西,对你的决策没有产生泛化的贡献,反而带跑偏你的模型,学习到了一些不是知识的边边角角。

而有一些模型,他们天然可以解决这些问题。

典型的就像决策树和神经网络。

决策树的优点

1.天然的鲁棒性,能自动从异常点,缺失值学到信息。不需要归一化。直接上手一把梭哈。

2.树可以半自动化地完成一些特征非线性表达的工作,而且基于贪心切分+采样等抗过拟合手段,能比较好的挖掘数据的非线性。

3.树的可解释性很好,能生产特征重要性,帮助你理解数据,改善特征工程。一个经典的套路是思考topN特征背后的逻辑,并围绕他们进行特征工程。

神经网络一统江湖

NN模型也有一些天然的优点:

1.全自动化的特征工程和登峰造极的非线性表达能力,在数据表征范式统一,语义含义统一的稠密数据上(典型文本图像)上,NN一个打十个。另外,典型的像ID序列这种,人很难做出花来。也就是Bag of words或者借用embedding表达一下,还有一半是NN的功劳。

2.NN模型容量极大,在数据量的加持上,放大了1的优势。

但是看起来树模型的优点在其他模型也有,他们跟SVM和LR这些模型比又有啥区别呢?

1.第一,这些模型获取非线性的方式太粗暴了,有种大炮打蚊子的感觉。依靠kernel强行把VC维提高,带来的噪声特别多,有用信息很少。第二,kernal是有先验的,很容易被人设的参数带跑偏。这在实际业务数据中是非常致命的。

2.理论上LR+完美的特征工程可以很强,但是太难了,又不是人人都是特征工程大师。早期凤巢亿级特征跑LR效果特别好逐渐成为传说。

用表格看起来更清楚

横向对比

这个图表达意思是,y轴是人的认知可解程度,对应着就是特征工程的难度和可行性。x轴是数据的非线性


经常调侃的人工智能,就是有多少人工,就有多少智能,就是线性模型因人工特征工程发挥的空间。随着数据非线性的提高,特征工程难度的增大,LR线性模型的用武之地就越来越小。反而逐渐决策树,神经网络等非线性模型开始大展身手。


回到问题,这些模型使用的频率,大概也和各自的图中面积差不多一致了。神经网络在工业界,已经占据了半边天,决策树占据了剩下的绝大部分,还有一点点场景,因为特殊性,仍旧用着LR等模型。


【其他精彩回答】

在文本分类任务中,有哪些论文中很少提及却对性能有重要影响的tricks?

机器学习该怎么入门?

如何向深度学习模型中加入先验知识?

请问深度学习中预训练模型是指什么?如何得到?

各种机器学习算法的应用场景分别是什么(比如朴素贝叶斯、决策树、K 近邻、SVM、逻辑回归最大熵模型)?

为什么在实际的kaggle比赛中,GBDT和Random Forest效果非常好?

如何衡量两个「任意数据集」间的相似度?

为什么 Bert 的三个 Embedding 可以进行相加?

BERT模型可以使用无监督的方法做文本相似度任务吗?

特征工程到底是什么?

Word Embedding 如何处理未登录词?

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有