对我而言,这些笔记在我参加任何数据科学面试之前快速复习时非常有用。希望它们对你有用。
图片由 Microsoft Copilot 创作
朴素贝叶斯分类器
- 假设:特征应是独立的。这是一个非常天真的假设,因此得名“朴素”。
- 它基于贝叶斯定理。
- 朴素贝叶斯是一个线性分类器,但在对数尺度上工作,因此,虽然它被称为线性分类器,但实际上在对数尺度上工作。
- 对于类别特征的特征似然性估计,使用每个特征值在每个类别中的相对频率(计数)。
- 对于连续特征的特征似然性估计,使用高斯分布等概率密度函数来建模每个类别的数据。需要注意的是,一个异常值不仅会影响均值和方差,还会对所有相关概率的计算产生影响。
- 时间和空间复杂度 — O(ndc), 其中n代表类别数,d代表维度数,c代表类数。
- 朴素贝叶斯分类器非常适合文本分类任务、垃圾邮件检测、情感分析以及其他具有大量特征的分类问题。
- 朴素贝叶斯能够处理缺失数据 — 拉普拉斯平滑是一种技术,用于在训练过程中未见过某个特征值时避免零概率。它用于防止似然估计中的除零问题。
- 在这种情况下,类别特征 → 在测试数据中,如果有一个新类别在训练数据中没有出现,将不会有该类别的似然概率,导致零概率。为了避免这种零概率问题,我们使用拉普拉斯平滑。
- 收敛速度快,对类别特征鲁棒,能够有效处理缺失值,但若特征间存在相关性,则可能影响性能。
- 误差的期望 E(e) = 0,误差为正或负的可能性相等
- 可以使用闭式解解决——但计算指标的乘积并求逆是复杂的——时间复杂度为 O(D³)
- 即使求解梯度等于0(闭式解)是可行的,梯度下降可能更高效
- 梯度下降依赖于选择步长和收敛标准
- 高杠杆点——远离其他观测值
- 有影响力的数据点——会影响系数
- 非对称损失函数——如果高估和低估的成本不相同
- 如果独立特征之间存在相关性,可能会影响性能,并且对缺失值和异常值敏感
- 在 L2 中,如果我们移除所有系数较低的特征,这并不会帮助,因为两个高度相关的特征在求和 Y 值时会降低系数
- 在 L1 中,由于 |w| 在零处不可微,我们使用次梯度——坐标下降
- 坐标下降用于 L1——它保持一个权重不变——更新另一个,反之亦然——它像等高线图中逐步到达最小值。它不需要学习率
- 弹性网络同时处理了 L1 和 L2 的问题
- 在 L1 和 L2 中,斜率减少了——我们惩罚过大的斜率
- Lasso 的去偏置—— Lasso 会使与最小二乘解相关的系数变小,这会导致更大的偏差和更小的方差
可以按以下方式减少偏见:
- 运行Lasso来选择特征,仅对选定的特征运行最小二乘回归,L1的一个问题是,如果有两个或更多相关特征,它可能会随机选择其中一个变量。Ridge则能提供更稳定的预测结果。
假设如下:
- 线性关系 — 通过绘制图表来检验
- 方差齐性 — 残差的方差不齐 — 通过绘制图表来检验
- 多重共线性 — 自变量表现出中高相关性 — 通过 VIF 来检验
- 正态性 — 通过 QQ 图来检验
- 自相关 — 残差之间存在相关性 — 通过 DW 检验
重要参数 (Params):
- fit_intercept — 是否要拟合截距(即是否有截距项)
- Normalize — 如果 fit_intercept 为真,则对特征进行归一化处理
- Positive — 是否要求所有系数均为正值
- 可能性函数 l(w):衡量具有系数 w 的模型拟合质量
- 最大似然估计器 — 全部概率的乘积 — 目标是最大化这个乘积
- 使用梯度上升
- 在逻辑回归中,如果权重很大,Sigmoid 的斜率也会很大,这可能导致每个类别的概率都非常高,这可能并不准确
- 假设:自变量与对数几率之间存在线性关系
- 多重共线性可以通过 L1 和 L2 正则化来处理,而无需删除特征
- 为什么使用逻辑回归而不是线性回归 — 线性回归会在添加新的离群点时调整直线 — 我们需要改变阈值来预测正确的值。此外,线性模型可能会预测大于 1 或者小于 0 的值
- 对数损失(也称为二元交叉熵)。它惩罚错误分类结果,并旨在最小化预测概率与实际标签之间的差异。
- 如果类别之间存在显著的依赖或重合,多类分类可能更合适。
- 容易过拟合,且对缺失值和异常值敏感
重要参数
- 惩罚函数 — L1 或 L2
- C - 正则化强度的倒数(即正则化系数)
- 类别权重 — 是否平衡
- 求解器达到收敛所需的迭代次数 — 最大迭代次数
- L1 比例 — 如果为 0 则为 L2,如果为 1 则为 L1,如果在 0 和 1 之间则为 Elasticnet
- 熵 — 衡量节点分裂的纯度 — 范围 [0(纯)到1(混杂)]
- 信息增益 — 父节点熵 — 加权平均子节点熵值
- 基尼指数 — 基尼指数是熵的一半,计算上更优(因为公式中没有对数项)
- 对于数值特征 — 对所有值进行排序,考虑一个阈值(行值)并将其数据分成两部分
- 对于连续因变量 — 使用方差 — 分割后节点方差最小
- 对于剪枝 — 总成本 = 分类错误 + 叶子节点数
- 正则化 — 剪枝、提前停止 — 如果进一步分割误差不再减少,或者叶子节点数少于x个,则停止分割
- 可以处理缺失值和异常值
- 过拟合、低偏差和高方差
- 不适合处理大型数据集
重要参数:,
- 准则 — Gini, 熵, 对数损失
- 分裂器 — 最优, 随机
- 最大深度 — 树的最大层次
- 最小分割样本 — 分割节点所需的最小样本数
- 最小叶样本 — 成为叶节点所需的最小样本数
- 最大特征
- 最小不纯度降低 — 如果此分割减少不纯度,则节点将被分割
- 类权重 — 是否均衡
- CCP_alpha — 用于控制叶节点数
- 决策树 — 低偏差和高方差
- 随机森林 — 低偏差和低方差
- Bootstrap aggregation
- 有放回的行抽样 — 部分行会在样本中重复出现
- 通过测量当某个特征的值随机打乱时模型准确率下降的程度来计算特征的重要性。使模型准确率显著下降的特征被认为更重要。
- 减少过拟合
- 对类别较多的特征存在偏差
OOB误差估计是如何工作的:
- 在构建随机森林中的每棵树时,会从数据中随机抽取一部分数据(有放回地抽样)。这会导致一些数据点被遗漏,形成所谓的未使用的样本。
- 每个数据点都不会被某些树使用,因为这些树是通过有放回的抽样得到的。给定树的未使用样本被用来评估模型在未见过数据上的表现。
- 对于每个未使用样本,收集来自那些在训练过程中未使用该样本的树的预测结果。然后将这些预测进行计算,通常是通过多数投票法(分类)或平均值法(回归)来进行。
- 将汇总预测与真实标签进行比较,计算误差(分类误差或回归的均方误差)。这就是所谓的袋外误差。
重要参数 — :
- N 估计器(树的数量)
- 与决策树相同
- Bootstrap — 是否使用自助采样来构建树。如果为 False,则使用整个数据集来构建每棵树
- Oob_score — 是否使用袋外样本估计性能分数
- max_samples — 当使用自助采样时,从 X 中抽取的每个基础估计器的样本数量
AdaBoost的工作方式
- 步骤 1:权重设置为 1/n
- 步骤 2:创建桩(深度为 1 的决策树),并使用熵来选择最佳桩
- 步骤 3:对错误记录增加权重,其他记录的权重减少
- 步骤 4:根据概率桶创建新数据集,然后使用这些记录训练新的桩(范围较广的概率桶会被选择多次)
- 步骤 5:使用加权平均值的符号技术得出最终结果 — 权重是所有错误的总和
GBM(提升算法)
GBM的运作
- 步骤 1:基础模型 — 计算所有值的平均值,或者使用导数求出最小 Y
- 步骤 2:计算残差误差(实际值 — 基础值)
- 步骤 3:创建一个树,其中 Y 变量是残差
- 步骤 4:用学习率来更新值。
- 在梯度提升中,“梯度”指的是模型预测相对于损失函数的负梯度。它引导算法关注模型表现不佳的实例,并尝试减少这些区域的误差。
- 根据特定特征在树分裂时减少损失函数总量的程度来计算特征的重要性。导致更大减少的特征被认为更重要。
- 在构建树的过程中,将缺失值当作一种单独的类别来处理。
XGB的工作
- 步骤1:仅创建二分类
- 步骤2:计算所有节点的相似性权重(节点元素间的相似程度)
- 步骤3:通过信息增益来决定选择哪个特征进行分割
- 步骤4:使用Sigmoid函数更新残差(进行分类时)
- 根据分割过程中的整体损失减少情况,学习最佳处理缺失值的方向
- 支持使用“multi:softmax”进行多类分类
- 目标是最大化边缘计划之间的边缘间距
- 边缘计划应通过距离超平面最近的 点。这些点被称为支持向量
- 核函数的作用:将低维数据转换为高维数据
- 支持向量机的核函数类型包括:多项式,Sigmoid径向基函数
- 正则化:计算误差点到决策边界的距离之和
- 支持向量机中的损失函数是铰链损失函数,它惩罚不正确的分类。目标是在最小化分类误差的同时最大化类别间的间距。
- 铰链损失(y, f(x)) = max(0, 1 — y * f(x))
- 如果这个值不大于1,则表示发生了误分类
- 在高维空间中更有效,因为数据可以更好地找到合适的支撑向量
- 过拟合较少 — 为了避免过拟合,我们使用软间隔
- 需要更多的训练时间,选择合适的核函数比较困难,难以调参,对缺失值和异常值敏感度较高
重要参数:
- C — 正则化参数,它与正则化强度成反比
- 核 — 线性,多项式(Poly),径向基核(RBF),Sigmoid(Sigmoid)
- Gamma — 对于‘rbf’、‘poly’和‘sigmoid’核的核系数(Gamma)。较高的Gamma值允许模型更精确地拟合训练数据,可能导致模型过拟合。
- 偏置项 — 核函数中的独立项,在多项式(Poly)和Sigmoid(Sigmoid)核中较为关键。
- 收缩 — 可以加快训练速度,可能会导致结果不准确
- 概率估计 — 当需要概率预测时
- 计算最近点之间的距离,并选择前k个点
- 有多少最近邻属于类别A和B
- 受到不平衡数据和异常值的影响
KNN的运作
- 步骤 1:计算距离:计算
test_instance
和所有train_data
中实例之间的距离。 - 步骤 2:排序距离:将距离按升序排列,找出最近的 k 个邻居。
- 步骤 3:选择邻居:选择距离最小的 k 个实例作为最近的邻居。
- 步骤 4:计票:统计 k 个邻居中每个类标签出现的次数。
- 步骤 5:选择类标签:选择出现次数最多的类标签作为
test_instance
的预测类别。 - 加权 KNN 可以得到更平滑的曲线 — 它使用核函数 — Y 是加权平均值
- 如果核函数的带宽较小,曲线就不会那么平滑
- 使用 KD 树搜索任何数据点,可以将时间复杂度降低到 O(log N)
- 随着数据量的增加,可以提供很好的拟合,但每次查询会花费更多时间
重要参数:
- N个邻居 — 邻居数
- 权重 — 均匀,距离 — 用距离的倒数来加权点
- 方法 — 球树,KD树,暴力计算
- P — 1表示曼哈顿距离,2表示欧几里得距离
K-means的工作方式
- 初始化K个质心
- 根据这些质心将数据点分组
- 计算每个组的平均值,并重复上述步骤
- K-means算法以坐标下降的方式运行
- 由于初始化的影响,它只会收敛到局部最优解
- K-means++使用智能初始化 -> 从数据点中随机选择第一个聚类中心。对于每个观测值x,计算其与最近质心的距离。选择新的聚类中心的概率与d(x)²成比例
如何选择K值?
- 肘区法 -> 以簇内平方和作为衡量标准,相对于质心
- 轮廓法 ->
- 对于数据集中的每个数据点i:
- a(i): 数据点i到同一簇内所有其他数据点的平均距离。
- b(i): 数据点i到最近相邻簇中所有数据点的平均距离(即非i所在簇)。
- 轮廓分数对于数据点i是:(b(i) — a(i)) / max(a(i), b(i))
- 接近+1的分数表明数据点被很好地聚类且远离相邻簇,意味着良好的簇间分离性。
- 接近0的分数表明数据点位于两个簇之间的边界区域。
- 接近-1的分数表明数据点可能被分配到了错误的簇,可能更适合分配到另一个簇。
- 假设包括 ->
- 簇的形状近似球形且具有大致相等的方差。
- 各簇中的数据点数量大致相同。
- 受离群点影响
重要参数,—
- N 聚类
- 初始化方法 — K-means++
- n_init — 算法将以不同质心初始化运行的次数
- 最终结果将选择惯性最小的输出
- 它使用了树状图 — X 轴 — 数据点,Y 轴 — 数据点间的距离
- 选择聚类数量的方法 — 剪断最长的竖线,确保没有横线穿过
- 凝聚式:它从每个数据点开始作为一个单独的聚类,并逐次合并最近的聚类,直到所有数据点都合并进一个聚类
- 分裂式:它从所有数据点开始作为一个单独的聚类,并递归地分割聚类,直到每个数据点形成一个单独的聚类
- 时间复杂度 O(N²logN)
- 隐马尔可夫聚类 — 当数据随时间变化。概率依赖于前一个聚类的状态
注:DBSCAN 是 "Density-Based Spatial Clustering of Applications with Noise" 的简称。
- 它会在核心点和边界点周围形成聚类,并将噪声点视为离群。
- 核心点: 核心点在其ε距离内至少有minPts个邻近点,这些点构成了聚类的中心。
- 边界点: 边界点在其ε距离内邻近点少于minPts,但可以从某个核心点到达。这些点属于某个聚类,但不是核心点。
- 噪声点: 噪声点在其ε距离内邻近点少于minPts,并且无法从任何核心点到达。这些点被视为离群点。
- ε 可以通过K距离图找到
- K 距离 — Y 轴表示两点之间的距离,X 轴则表示按距离排序的数据点。
- 可以处理离群点
- DBSCAN 可以处理不同形状和大小的聚类,不受限于单一形态。
- 在处理密度变化或密度逐渐下降的数据集时会遇到一些困难。
- 用于数据聚类的概率模型,假设数据点是由多个高斯分布混合生成的。
- GMM聚类通过估计最佳表示数据的高斯分布参数来工作。
- 1D高斯分布:由均值和方差决定
- 2D高斯分布:由均值和协方差矩阵决定
- 计算成本高——我们限制度量中的参数——我们只保留对角线参数。椭圆将只有一种定向
- 更新高斯分布的均值和协方差矩阵,直到达到收敛。
GMM聚类的关键部分有:
- 高斯分布:每个聚类用一个均值和协方差矩阵的高斯分布来表示。
- 混合系数:表示每个聚类中的数据点所占比例。
- 协方差矩阵:捕捉每个聚类内数据的分布和方向。
- 聚类权重 — 聚类的重要性
- 期望步骤(E-step),计算每个数据点属于每个聚类的概率。我们根据聚类参数计算观测值对聚类的责任
- 最大化步骤(M-step),利用软分配计算高斯参数的最大似然估计
- EM 是一种坐标上升方法,能够局部收敛
- GMM 中的聚类数量 — 可以通过贝叶斯信息准则(BIC)或赤池信息准则(AIC)确定。两者都基于信息论的概念,旨在平衡模型的拟合度与复杂度。
- 能够处理异常值
- 贝叶斯模型(Bayesian模型)
- 混合成员模型
- 通常用于主题建模
- LDA(Latent Dirichlet Allocation)模型假设每个文档都是多个主题的混合,并且每个主题都是词汇表中单词的主题分布
对于每一个文档
- 随机选择一个主题的分布。
- 对于文档中的每个单词:
- 随机从主题分布中选择一个主题。
- 随机从与该主题相关的单词分布中选择一个单词。
- 吉布斯采样:是一种用于如LDA这类概率模型中近似推理的迭代采样方法。
- 它允许我们通过迭代地从条件分布中采样,从而从复杂的概率分布中获取样本。
- LDA 与 PCA 类似,但它专注于最大化已知类别之间的可分性。
- 它创建一个新的轴,并将数据投影到这个新轴上,以最大化两类之间的差异。
- 最大化类别均值之间的距离,并最小化每个类别内部的变化(散布)。
- 如果类别多于两个,则计算每个类别中心与均值之间的距离。
- 步骤1:将数据标准化
- 步骤2:计算协方差——如果我们用任何向量与协方差相乘,它将使该向量更接近特征向量
- 步骤3:计算矩阵的特征值和特征向量(如果用特征向量乘以矩阵,方向会保持一致或相反)
- 特征向量表示数据主要变化的方向
- 特征值表示方差的解释程度
- 步骤4:排序特征向量以找到第一个主成分
- 主成分是协方差矩阵的特征向量,对应的特征值表示每个主成分的方差
- 受显著异常值影响
- t-SNE 是一种非线性技术,而PCA是一种线性技术。
- 移动平均 (MA):使用过去n个观测值的平均值
- 指数平滑 (ES):给过去观测值分配呈指数递减的加权。
- 自回归 (AR):根据过去观测值和它们之间的线性关系来预测未来的值:
平稳时间序列
- 均值恒定:序列的平均值保持不变,不显示任何显著的趋势或随时间的变化。
- 方差恒定:序列的方差(或标准差)随时间保持不变,数据点的分散程度稳定。
- 自协方差恒定:不同时间点上两个观察值的自协方差保持一致,不受时间间隔的影响。
ARIMA的成分,
- 自回归(AR):自回归是根据之前的时间序列观测值来预测未来的值。AR 组件建模了观测值与其若干过去值之间的关系。
- 差分(I 表示差分):差分是通过用当前值减去先前值来移除时间序列中的趋势或季节性,使其平稳化的过程。
- 移动平均(MA):MA 组件通过当前观测值和滞后值上应用的移动平均模型的残差误差来建模。
ACF 帮助识别 MA(q) 模型,PACF 帮助识别 AR(p) 模型,同时差分 (d) 用于判断平稳性。
自相关函数(ACF),
- 定义:自相关函数(ACF)测量时间序列与其自身在不同滞后时间之间的相关性。
偏自相关函数 (部分自相关函数, PACF):
- 定义:PACF 用来测量时间序列与其滞后值之间的相关性,同时消除了中间滞后观测值的影响。
- Akaike 信息准则 (AIC):
- 用于衡量模型的好坏,平衡模型的复杂度和其最小化信息损失的能力。
- 较低的 AIC 值表示模型在复杂度和拟合度之间有更好的平衡。
- 贝叶斯信息标准 (BIC):
- 与 AIC 类似,但对参数较多的模型惩罚更重。
- 在模型选择中通过偏好更简单的模型来帮助选择模型,只要它们具有相似的拟合优度。
MSE:(均方误差)
- 即使是微小的误差也会被惩罚,通过将误差平方,这实际上导致了夸大模型的错误程度。
- 由于平方因子的存在,它比其他度量更易受到异常值的干扰。
MAE:
- 它比平均绝对误差(MAE)更鲁棒,因为它不会对异常值的错误进行夸大。
- 它给我们提供了一个预测值与实际输出偏差程度的测量,但不显示偏差的方向。
RMSE:它通过对MSE取平方根来处理较小误差的惩罚。
精准度:在所有阳性预测中真正阳性预测的比例。尤其是在误报成本很高的情况下(例如,在医疗诊断中),精准度就很有用。
召回率(真正率,也称为灵敏度):衡量在所有实际阳性实例中被正确识别出的比例。当假阴性的代价很高时,这一指标尤为重要,例如在欺诈检测等场景中。
精确召回曲线来说用来选择阈值
AOC ROC — Y 表示敏感性,X 表示 1 - 特异性
灵敏度 — 正样本被正确识别的比例
1-特异度 — 正确分类的负类比例。
为了更好地理解,我强烈建议从头开始编写代码,避免使用诸如SKlearn之类的库。你可以参考这个超赞的Github项目
祝你好运 :)
共同学习,写下你的评论
评论加载中...
作者其他优质文章