一.监督学习
决策树
决策树是一种直观观、可解释性强的监督学习算法,因结构类似 "树" 而得名,广泛用于分类和回归任务。其核心是通过对数据特征的逐步划分,将复杂问题拆解为简单子问题,最终得到清晰的决策规则。
决策树由根节点 (初始特征)、内部节点 (中间特征)、叶节点 (最终输出:类别或数值)和分支(特征取值对应的划分规则)组成。
构建决策树
- 从根节点开始,计算所有特征的 "信息增益"(或基尼系数、MSE),选择最优特征作为当前节点。
- 按该特征的不同取值,将数据集划分为若干子数据集,每个取值对应一个分支。
- 对每个子数据集递归执行上述步骤,直至满足停止条件:
- 子数据集中所有样本属于同一类别(分类)或误差小于阈值(回归);
- 没有更多特征可划分;
- 子数据集样本数小于最小阈值(避免过拟合)。
以 "银行贷款审批" 为例,决策树可通过客户的特征(如收入、信用评分、工作年限等)自动生成审批规则,直观且可解释。以下是具体案例:
银行需根据客户的 3 个特征决定是否批准贷款:
- 特征 1:月收入(高 / 中 / 低,高 = 月收入 > 2 万,中 = 5k~2 万,低 < 5k)
- 特征 2:信用评分(优 / 良 / 差,优 > 700,良 = 600~700,差 < 600)
- 特征 3:工作年限(长 / 短,长≥3 年,短 < 3 年)
随机森林
随机森林是一种基于决策树的集成学习方法,依赖带标签的训练数据(即输入特征与对应的输出标签)进行训练,适用于分类和回归等监督学习任务。
背景:由于决策树(DT)会产生过拟合现象,导致泛化能力变弱,美国贝尔实验室大牛采用随机森林(RF)投票机制来改善决策树
随机的含义:
1, 对样本进行随机, 样本的个数是一样的
2, 对特征进行随机,特征数是一样的
随机森林的工作流程:
数据预处理:对原始数据进行清洗和标准化,以确保算法的有效运行。
自助采样:从原始数据集中通过自助采样的方式抽取多个不同的训练数据集。自助采样允许数据集中的样本重复出现,这意味着每个训练集的大小与原始数据集相同,但包含一些重复的样本。
特征随机选择:在每棵树的每个分裂节点上,随机选择一部分特征,而不是考虑所有可能的特征。这一步进一步增加了模型的多样性,并有助于减少过拟合。
决策树构建:使用每个训练数据集构建决策树,直到每个树达到其最大深度或达到其他停止条件。
预测和聚合:对于分类问题,每棵树给出一个预测,最终的预测结果是所有树预测结果的多数投票;对于回归问题,则是所有树预测结果的平均值。
支持向量机
支持向量机(SVM,Support Vector Machine)是一种经典的监督学习算法,核心作用是在特征空间中找到最优的分类超平面,实现对数据的精准分类,同时也可通过扩展用于回归任务。它在小样本、高维数据(如文本分类)中表现尤为出色,是机器学习中的 "经典利器"。
1.当两类样本能被一个超平面完美分隔(线性可分)时,SVM 的目标是找到 "最优超平面":
-
分隔性:超平面能将两类样本完全分开(如正类在超平面一侧,负类在另一侧)。
-
最大间隔:超平面到两侧最近样本的距离(间隔)最大。
- 直观理解:想象两类样本分布在一条直线两侧,SVM 会找一条 "正中间" 的直线,让这条直线到两边最近的点距离最大 ------ 这样即使新样本有轻微扰动,也不容易被误分类,模型更稳定。
- 支持向量:距离超平面最近的那些样本点(正是这些点决定了超平面的位置,其他样本对超平面无影响),这也是 "支持向量机" 名称的由来。
2.现实中数据往往线性不可分,此时 SVM 通过 "软间隔" 机制允许少量样本被误分类,核心是:
- 放松 "完全分隔" 的要求,允许部分样本落在间隔内甚至超平面另一侧。
- 引入 "惩罚系数 C":C 越大,对误分类样本的惩罚越重,模型越倾向于严格分隔(可能过拟合);C 越小,允许更多误分类,模型更宽松(可能欠拟合)。
3.当数据用线性超平面无法分隔(如样本呈环形分布),SVM 的解决方案是:
- 低维到高维映射:将原始低维特征空间的数据映射到更高维空间,使原本非线性可分的数据在高维空间中线性可分。例如:二维平面中环形分布的样本,映射到三维空间后可能变成线性可分的。
- 核函数(Kernel Function) :直接在低维空间计算高维空间的内积(避免高维映射的计算爆炸)。常用核函数:
- 线性核(Linear Kernel):适用于线性可分数据,等价于原始 SVM。
- 径向基核(RBF Kernel):最常用,能处理大部分非线性数据(通过调节参数 σ 控制映射后的复杂度)。
- 多项式核(Polynomial Kernel):适用于特征间有多项式关系的数据。
KNN(K 近邻算法)
KNN 属于 "懒惰学习",核心特点是 **"不训练模型,只存储数据"**:
- 训练阶段几乎无计算成本,仅需存储所有训练样本,无需像逻辑回归那样拟合参数、像决策树那样拆分节点。
- 预测阶段才进行核心计算(算距离、找邻居、投票 / 平均),且预测速度随训练数据量增加而变慢(需对比所有样本)。
KNN 算法的核心作用是通过 "找相似邻居" 来分类或回归,本质是用已知样本的信息推断未知样本,比如根据用户的历史消费行为(邻居)判断新用户是否会购买商品。
二.无监督学习
K - 均值(K-Means)聚类算法
K-Means 是机器学习中最经典的无监督聚类算法 ,核心作用是将无标签的数据自动划分成 K 个 "相似" 的群体(簇),比如根据用户消费习惯划分客户群体、根据图像像素特征聚类相似图片。无法直接用于分类,但可以进行辅助分类任务。
1. 准备阶段:确定 K 值与预处理
- 确定 K 值:K 是用户预先设定的 "簇的数量"(需根据业务需求或通过肘部法则等方法选择,本例 K=3)。
- 数据预处理:若特征单位差异大(如消费金额是 0-10000 元,购买频率是 0-30 次 / 月),需先将特征标准化(如缩放到 0-1 范围),避免某一特征在距离计算中占主导。
2. 第 1 步:随机初始化 K 个簇中心
从 1000 个用户样本中,随机选择 3 个样本作为初始的 "簇中心"(即 3 个群体的 "代表")。例如:初始中心 A(消费 5000 元,频率 15 次)、中心 B(消费 2000 元,频率 5 次)、中心 C(消费 8000 元,频率 25 次)。
3. 第 2 步:计算距离,给每个样本分配簇
对每个用户样本,计算它与 3 个簇中心的 "欧氏距离"(衡量样本与中心的相似度,距离越近越相似),将样本分配到距离最近的簇中。
- 示例:用户 X(消费 4500 元,频率 14 次),计算得与中心 A 的距离最近,因此将 X 归入 A 簇;用户 Y(消费 1800 元,频率 6 次)与中心 B 距离最近,归入 B 簇。
- 最终 1000 个用户会被分成 3 个簇(A 簇、B 簇、C 簇)。
4. 第 3 步:更新簇中心(重新计算 "代表")
对每个簇,计算该簇内所有样本特征的 "平均值",将这个平均值作为新的簇中心,替代原来的中心。
- 示例:A 簇有 300 个用户,计算这 300 个用户的平均消费金额(如 4800 元)和平均购买频率(如 14 次),新的 A 簇中心变为(4800,14);同理更新 B 簇和 C 簇的中心。
5. 第 4 步:重复迭代,直到收敛
重复 "第 2 步(分配样本)→第 3 步(更新中心)" 的过程,直到簇中心的位置不再明显变化(或变化小于预设阈值),此时聚类结果稳定,算法停止。
- 收敛后,3 个簇的中心会稳定在各自群体的 "核心位置",比如 A 簇(中等消费、中等频率)、B 簇(低消费、低频率)、C 簇(高消费、高频率),对应三类不同的用户群体。
三.集成学习
Boosting(提升法)
Boosting方法是一种迭代 的集成学习技术,旨在通过逐步构建弱学习器 并关注前一轮学习器的错误来提高整体模型的性能。这种方法的核心思想是,通过一系列简单的模型,如决策树桩,逐步纠正前一轮模型的不足,最终构建出一个强学习器。
Boosting方法有几种不同的变体,其中最著名的包括AdaBoost、Gradient Boosting和XGBoost。
AdaBoost(Adaptive Boosting)
- 初始时给所有样本相同权重,训练第一棵树。
- 提高前一棵树预测错误的样本权重,降低预测正确的样本权重,让下一棵树更关注 "难分样本"。
- 每棵树有不同权重,预测错误率低的树权重更高,最终结果是所有树的加权投票(分类)或加权平均(回归)。
Gradient Boosting(梯度提升):对 AdaBoost 的优化,用 "梯度" 定义 "错误"。
- 不直接调整样本权重,而是假设前一轮集成模型的预测结果与真实值的 "残差"(差距),是下一棵树需要拟合的目标。
- 用 "梯度下降" 的思路,让每棵新树沿着 "减少残差" 的方向优化,本质是拟合 "残差的负梯度",比 AdaBoost 更灵活、更易优化。
XGBoost(极端梯度提升):Gradient Boosting 的工程化升级版。
- 在 Gradient Boosting 基础上,加入了正则化项(控制树的复杂度),有效避免过拟合。
- 支持并行计算(不是树的并行训练,而是特征分裂时的并行搜索),训练速度远快于传统 Gradient Boosting。
- 能处理缺失值(自动学习缺失值该分到左子树还是右子树),功能更完善
Bagging(汇聚法)
Bagging的核心思想是通过自助采样(bootstrap sampling)从原始数据集中抽取多个小规模的训练数据集。每个小数据集的大小通常与原始数据集相同,但允许有重复的样本。然后,在每个小数据集上独立地训练一个基学习器,这些基学习器通常是相同的模型,例如决策树。由于每个基学习器都是在不同的数据子集上训练的,因此它们之间具有一定的独立性。
Bagging方法通过聚合所有基学习器的预测结果来得到最终的预测。对于分类问题,通常采用投票机制 ,即选择得票最多的类别作为最终预测结果;对于回归问题,则通常采用平均值,即计算所有基学习器预测结果的平均值作为最终预测。
Stacking(堆叠法)
核心思想是用多个基础模型的预测结果作为新特征,再训练一个 "元模型"(meta-model)来输出最终预测,相当于 "模型的模型"。
Stacking 的流程可以简单分为 "基础模型层" 和 "元模型层",通过两层模型的组合提升性能,具体步骤如下:
-
第一步:训练多个基础模型(Base Models) 选择不同类型的基础模型(如随机森林、SVM、逻辑回归、XGBoost 等),用原始训练数据独立训练。核心目的:让每个基础模型从不同角度学习数据模式(比如树模型擅长捕捉非线性关系,线性模型擅长捕捉线性关系),保证多样性。
-
第二步:生成 "元特征"(Meta Features) 用训练好的基础模型,对训练集进行预测(为了避免过拟合,通常用交叉验证的方式,即每个样本的预测值来自未参与训练它的模型),得到的预测结果作为 "新特征"(元特征)。举例:假设用 3 个基础模型,原始训练集有 1000 个样本,那么元特征就是一个 1000×3 的矩阵(每个样本对应 3 个模型的预测值)。
-
第三步:训练元模型(Meta Model) 用 "元特征" 作为新的训练数据,原始标签作为目标,训练一个元模型(通常是简单模型,如逻辑回归、线性回归)。核心目的:学习如何最优地组合基础模型的预测结果(比如给表现好的模型更高权重,或捕捉基础模型之间的互补关系)。
-
第四步:最终预测对新样本,先让所有基础模型输出预测值(形成元特征),再输入元模型,得到最终结果。