三、机器学习核心算法(入门到实战)
- 监督学习算法(已知标签的模型训练)
线性模型
- 线性回归(回归任务):
- 核心原理:假设 y = w₀ + w₁x₁ + w₂x₂ + ... + wₙxₙ + ε(ε 为误差项),通过最小化均方误差(MSE=Σ(y_i - ŷ_i)²/n)求解参数 w
- 求解方法:
- 最小二乘法(闭式解):w = (X^T X)⁻¹ X^T y(适用于特征数少、样本数适中的情况)
- 梯度下降法(迭代解):适用于高维数据(特征数多),避免矩阵求逆的高复杂度
- 优缺点:
- 优点:模型简单、可解释性强(权重 w 表示特征重要性)、训练速度快
- 缺点:只能捕捉线性关系,对非线性数据拟合效果差
- 实战技巧:特征标准化后训练(避免不同量纲影响参数),用正则化(Ridge/Lasso)防止过拟合
- 逻辑回归(分类任务):
- 核心原理:将线性回归的输出通过 Sigmoid 函数映射到 [0,1] 区间,作为分类概率,Sigmoid 函数:σ(z)=1/(1+e^(-z)),z=w^T X + b
- 损失函数:交叉熵损失(Binary Cross-Entropy),L = -Σ(y_i logσ(z_i) + (1-y_i) log (1-σ(z_i)))
- 求解方法:梯度下降法(批量梯度下降 BGD、随机梯度下降 SGD、小批量梯度下降 MBGD)
- 优缺点:
- 优点:可解释性强(概率输出)、训练快、适合二分类任务
- 缺点:对非线性数据需手动构造特征,多分类需用 One-vs-Rest/One-vs-One 策略
- 实战技巧:处理类别不平衡(用 class_weight 参数或 SMOTE 过采样),调整正则化强度(C 参数,C 越小正则化越强)
树模型
- 决策树:
- 核心原理:基于特征的阈值划分数据集,构建树形结构(根节点→内部节点→叶节点),叶节点为预测结果
- 划分准则:
- ID3:信息增益(最大化划分后信息熵的减少量)
- C4.5:信息增益比(解决信息增益偏向多值特征的问题)
- CART:Gini 系数(衡量节点纯度,Gini=1-Σp_i²,p_i 为节点中第 i 类样本的比例)
- 剪枝策略(防止过拟合):
- 预剪枝:限制树的深度、最小样本分裂数、最小样本叶节点数
- 后剪枝:先构建完整树,再删除对模型性能无提升的分支
- 优缺点:
- 优点:可解释性强(可视化树结构)、无需特征标准化、能捕捉非线性关系
- 缺点:容易过拟合(单棵树泛化能力差)、对噪声数据敏感
- 随机森林(集成树模型):
- 核心原理:基于 Bagging(bootstrap aggregation)策略,构建多棵决策树,最终预测结果为多棵树的投票(分类)或平均(回归)
- 随机性体现:
- 样本随机:每棵树用 bootstrap 采样(有放回抽样)得到的样本训练
- 特征随机:每棵树分裂时,从所有特征中随机选择部分特征(如 sqrt (n_features))作为候选划分特征
- 优缺点:
- 优点:泛化能力强(降低过拟合风险)、鲁棒性好(对噪声不敏感)、能处理高维数据
- 缺点:可解释性差(黑盒模型)、训练速度比单棵决策树慢
- 实战参数调优:
- n_estimators:树的数量(越多越好,但需平衡训练时间)
- max_depth:树的深度(避免过深)
- min_samples_split:节点分裂的最小样本数(默认 2)
- max_features:每棵树使用的最大特征数(分类任务默认 sqrt (n_features))
- XGBoost/LightGBM(梯度提升树):
- 核心原理:基于 Boosting 策略,串行构建多棵树,每棵树拟合前序模型的残差(梯度下降方向),最终模型为多棵树的加权和
- 核心优化:
- XGBoost:正则化(L1/L2 正则)、缺失值自动处理、并行计算(特征并行)、树结构剪枝
- LightGBM:基于直方图的分裂策略(提高训练速度)、梯度单边采样(GOSS)、互斥特征捆绑(EFB)(降低内存占用)
- 优缺点:
- 优点:预测精度高(竞赛常用模型)、处理非线性数据能力强、支持分类 / 回归 / 排序任务
- 缺点:对超参数敏感(需仔细调优)、易过拟合(需控制树的复杂度)
- 实战参数调优:
- learning_rate(学习率):0.01~0.1(越小需越多树)
- max_depth:3~10(避免过深)
- subsample/colsample_bytree:样本 / 特征采样比例(0.5~1.0,防止过拟合)
- reg_alpha/reg_lambda:L1/L2 正则系数(增大可防止过拟合)
核方法:支持向量机(SVM)
- 核心原理:找到一个超平面,使两类样本的间隔最大化(硬间隔 SVM),对于非线性数据,通过核函数映射到高维特征空间,再找线性超平面
- 核函数选择:
- 线性核(Linear Kernel):k (x1,x2)=x1^T x2,适用于线性可分数据
- 高斯核(RBF Kernel):k (x1,x2)=e^(-γ||x1-x2||²),适用于非线性数据(γ 越大,模型越复杂)
- 多项式核:k (x1,x2)=(x1^T x2 + c)^d,d 为多项式次数
- 软间隔 SVM:引入松弛变量 ξ,允许部分样本越界,平衡间隔与分类错误,目标函数:min (1/2)||w||² + CΣξ_i(C 为惩罚系数,C 越大对错误样本惩罚越重)
- 优缺点:
- 优点:泛化能力强(基于间隔最大化)、适合高维数据(特征数多)、对小样本数据效果好
- 缺点:训练速度慢(不适用于大规模数据)、可解释性差、对核函数和参数敏感
- 实战技巧:数据标准化(SVM 对量纲敏感)、用交叉验证选择核函数和 C/γ 参数、处理类别不平衡(调整 class_weight)
集成学习策略
- Bagging:
- 核心思想:并行训练多棵独立模型,通过投票 / 平均降低方差(防止过拟合),代表模型:随机森林
- 关键步骤:bootstrap 采样(有放回抽样)、模型独立训练、结果融合
- Boosting:
- 核心思想:串行训练多棵弱模型,每棵模型聚焦前序模型的错误样本(调整样本权重),通过加权和提升模型性能,代表模型:AdaBoost、XGBoost、LightGBM
- 关键步骤:初始化样本权重、训练弱模型、计算模型权重(错误率越低权重越高)、更新样本权重(错误样本权重增大)
- Stacking:
- 核心思想:用多个基础模型的预测结果作为新特征,训练一个元模型(如逻辑回归、线性回归),输出最终预测结果
- 关键步骤:
- 将数据集划分为训练集和验证集
- 训练多个基础模型(如随机森林、XGBoost、SVM),用验证集得到预测结果
- 将训练集的基础模型预测结果拼接成新特征,训练元模型
-
用元模型对测试集的基础模型预测结果进行预测
-
无监督学习算法(未知标签的模型训练)
聚类算法
- K-Means:
- 核心原理:将 n 个样本划分为 k 个簇,使簇内样本相似度高、簇间样本相似度低(基于欧氏距离)
- 算法步骤:
- 随机选择 k 个样本作为初始聚类中心
- 计算每个样本到各聚类中心的距离,将样本分配到最近的簇
- 重新计算每个簇的均值(新聚类中心)
- 重复步骤 2-3,直到聚类中心不再变化或达到最大迭代次数
- 聚类效果评估:
- 内部指标:轮廓系数(Silhouette Coefficient),取值范围 [-1,1],越接近 1 聚类效果越好
- 外部指标:调整兰德指数(ARI)、互信息(NMI),适用于有真实标签的情况
- 优缺点:
- 优点:算法简单、训练速度快、适用于大规模数据
- 缺点:需提前指定 k 值、对初始聚类中心敏感、对非球形簇聚类效果差
- 实战技巧:用肘部法则(Elbow Method)选择 k 值(绘制簇内平方和随 k 的变化曲线,拐点处为最优 k)、对数据标准化(避免量纲影响距离计算)
- DBSCAN(密度聚类):
- 核心原理:基于样本的密度(ε 邻域内的样本数)划分簇,无需提前指定 k 值
- 核心参数:
- ε(epsilon):邻域半径
- MinPts:ε 邻域内的最小样本数(核心点的阈值)
- 样本分类:
- 核心点:ε 邻域内样本数≥MinPts
- 边界点:ε 邻域内样本数,但在核心点的邻域内
- 噪声点:既不是核心点也不是边界点
- 优缺点:
- 优点:无需指定 k 值、能发现任意形状的簇、能识别噪声点
- 缺点:对 ε 和 MinPts 参数敏感、高维数据中距离计算不准确(聚类效果差)
- 实战技巧:用 K 距离图选择 ε(绘制样本到第 k 个最近邻的距离曲线,拐点处为最优 ε)、对高维数据先降维再聚类
- 层次聚类:
- 核心原理:构建聚类树(树状图),通过合并或分裂簇逐步形成最终聚类结果
- 聚类策略:
- 凝聚式(自底向上):初始每个样本为一个簇,逐步合并相似度最高的簇
- 分裂式(自顶向下):初始所有样本为一个簇,逐步分裂差异最大的簇
- 相似度计算:
- 单链接(最小距离):两个簇中最近样本的距离
- 全链接(最大距离):两个簇中最远样本的距离
- 平均链接(平均距离):两个簇中所有样本对的平均距离
- 优缺点:
- 优点:无需指定 k 值、能可视化聚类过程(树状图)
- 缺点:训练速度慢(时间复杂度 O (n³))、不适用于大规模数据
- 实战技巧:用树状图确定 k 值(横向切割树状图,得到 k 个簇)、对小样本数据效果更佳
降维算法
- PCA(主成分分析):
- 核心原理:通过线性变换将高维数据映射到低维空间,保留数据的主要信息(方差最大的方向)
- 算法步骤:
- 对数据标准化(均值为 0,方差为 1)
- 计算数据的协方差矩阵
- 对协方差矩阵进行特征值分解,得到特征值和特征向量
- 选择特征值最大的前 k 个特征向量,组成投影矩阵
- 将原始数据乘以投影矩阵,得到低维数据
- 降维效果评估:解释方差比例(每个主成分的特征值占总特征值的比例,累计比例≥80% 为宜)
- 优缺点:
- 优点:降维速度快、无参数需要调整、能去除数据冗余
- 缺点:线性降维(无法捕捉非线性关系)、对异常值敏感
- 实战技巧:降维前必须标准化数据、用累计解释方差比例确定 k 值
- t-SNE(t 分布随机邻域嵌入):
- 核心原理:基于概率分布的非线性降维算法,在高维空间中用高斯分布描述样本间的相似度,在低维空间中用 t 分布描述,通过最小化 KL 散度使两个分布尽可能接近
- 核心参数:
- n_components:降维后的维度(通常为 2 或 3,用于可视化)
- perplexity:困惑度(反映近邻样本的数量,通常取 5~50)
- 优缺点:
- 优点:能有效捕捉高维数据的非线性结构、可视化效果好(适合高维数据聚类结果展示)
- 缺点:训练速度慢(不适用于大规模数据)、对参数 perplexity 敏感、不适合用于后续建模(仅用于可视化)
- 实战技巧:先用水 PCA 降维到 50 维,再用 t-SNE 降维到 2/3 维(提高速度)、调整 perplexity 观察可视化效果
- LDA(线性判别分析):
- 核心原理:监督式降维算法,通过线性变换使降维后的数据满足 "类内方差最小、类间方差最大",保留有利于分类的信息
- 算法步骤:
- 计算各类样本的均值向量
- 计算类内散度矩阵 S_w 和类间散度矩阵 S_b
- 求解 S_w⁻¹ S_b 的特征值和特征向量,选择特征值最大的前 k 个特征向量组成投影矩阵
- 将原始数据乘以投影矩阵,得到低维数据
- 与 PCA 的区别:PCA 是无监督(不考虑标签),LDA 是有监督(利用标签信息)
- 优缺点:
- 优点:降维后的数据更适合分类任务、能提高模型训练速度
- 缺点:线性降维、对多分类任务计算复杂
- 实战技巧:适用于分类任务的预处理步骤、降维后的维度 k≤类别数 - 1
关联规则:Apriori 算法与 FP-Growth 算法
- 核心概念:
- 频繁项集:支持度≥最小支持度(min_support)的项集(项集是多个物品的集合)
- 支持度:项集在所有交易中出现的比例(如 {牛奶,面包} 的支持度 = 包含两者的交易数 / 总交易数)
- 置信度:关联规则 A→B 的置信度 = 支持度 (A∪B)/ 支持度 (A)(反映 A 发生时 B 发生的概率)
- 提升度:关联规则 A→B 的提升度 = 置信度 (A→B)/ 支持度 (B)(提升度 > 1 表示 A 促进 B 发生,=1 表示无关)
- Apriori 算法:
- 核心原理:基于 "频繁项集的子集也是频繁项集" 的先验性质,通过逐层扫描交易数据,生成候选频繁项集并筛选
- 算法步骤:
- 扫描数据,生成 1 - 项集(单个物品的集合),筛选支持度≥min_support 的 1 - 频繁项集
- 由 k - 频繁项集生成 (k+1)- 候选项集(连接操作)
- 剪枝操作(删除包含非频繁子集的候选项集)
- 扫描数据,筛选 (k+1)- 候选项集中支持度≥min_support 的 (k+1)- 频繁项集
- 重复步骤 2-4,直到无法生成新的频繁项集
- 优缺点:
- 优点:思路简单、易于实现
- 缺点:多次扫描数据(效率低)、生成大量候选项集(内存占用大)
- FP-Growth 算法:
- 核心原理:通过构建 FP 树(频繁模式树),将交易数据压缩存储,无需生成候选项集,直接从 FP 树中挖掘频繁项集
- 算法步骤:
- 扫描数据,统计各项的支持度,筛选频繁项并按支持度降序排序
- 构建 FP 树:逐笔处理交易,将交易中的频繁项按排序后的顺序插入 FP 树,记录项的计数
- 从 FP 树中挖掘频繁项集:对每个频繁项,构建条件 FP 树,递归挖掘条件频繁项集
- 优缺点:
- 优点:仅扫描数据两次(效率高)、无需生成候选项集(内存占用小)
- 缺点:构建 FP 树的复杂度较高、对高维数据适应性一般
- 实战场景:购物篮分析(如超市商品关联推荐)、用户行为分析(如视频观看序列关联)
- 半监督与强化学习
半监督学习
- 核心概念:利用少量有标签样本和大量无标签样本训练模型,解决 "标签获取成本高" 的问题,适用于标签稀缺场景(如医疗影像诊断、自然语言处理)
- 常用算法:
- 自训练法(Self-Training):
- 用少量有标签样本训练初始模型
- 用初始模型预测无标签样本,选择置信度最高的部分样本(如置信度≥0.9),将其预测结果作为伪标签,加入有标签样本集
- 用新的有标签样本集重新训练模型,重复步骤 2-3,直到无标签样本耗尽或模型性能收敛
- 协同训练法(Co-Training):
- 将特征集划分为两个独立的视图(如文本数据的 "词袋特征" 和 "词性特征")
- 基于两个视图分别训练两个模型
- 每个模型预测无标签样本,选择置信度高的样本作为伪标签,交叉添加到对方的有标签样本集
- 重复训练和伪标签添加,直到模型性能收敛
- 生成式半监督模型(如高斯混合模型 GMM):
- 假设数据服从混合高斯分布,有标签样本和无标签样本来自同一分布
- 用 EM 算法(期望最大化算法)估计分布参数(均值、方差、混合系数)
- 基于估计的分布,预测无标签样本的标签
- 实战注意事项:
- 伪标签的质量至关重要(避免将错误标签加入训练集),需设置较高的置信度阈值
- 特征视图的独立性(协同训练法)是算法有效的关键
- 适用于 "聚类假设" 或 "流形假设" 成立的数据(聚类假设:同一簇的样本标签相同;流形假设:高维数据位于低维流形上,邻近样本标签相同)
强化学习
- 核心概念:智能体(Agent)通过与环境(Environment)交互,学习最优行为策略(Policy),使累积奖励(Reward)最大化,适用于序列决策场景(如游戏、机器人控制、推荐系统)
- 核心要素:
- 状态(State, S):环境的当前状态(如游戏画面、机器人位置)
- 动作(Action, A):智能体可执行的动作(如游戏中的上下左右、机器人的移动)
- 奖励(Reward, R):环境对智能体动作的反馈(如游戏得分、碰撞惩罚)
- 策略(Policy, π):状态到动作的映射(如 π(a|s) 表示状态 s 下选择动作 a 的概率)
- 价值函数(Value Function, V (s)):状态 s 的长期价值(从 s 出发的累积奖励期望)
- Q 函数(Action-Value Function, Q (s,a)):状态 s 下执行动作 a 的长期价值
- 常用算法:
- 基于价值的算法:
- Q-Learning:离线策略(Off-Policy)算法,更新公式:Q (s,a) = Q (s,a) + α[r + γ max_a' Q (s',a') - Q (s,a)](α 为学习率,γ 为折扣因子)
- SARSA:在线策略(On-Policy)算法,更新公式:Q (s,a) = Q (s,a) + α[r + γ Q (s',a') - Q (s,a)](a'为实际执行的下一个动作)
- 基于策略的算法:
- 策略梯度(Policy Gradient):直接优化策略 π,目标函数为累积奖励期望,通过梯度上升最大化目标函数
- 演员 - 评论家(Actor-Critic):结合价值函数(评论家)和策略函数(演员),演员负责选择动作,评论家负责评估动作价值,指导演员更新策略
- 深度强化学习:
- DQN(深度 Q 网络):用神经网络替代 Q 表,解决高维状态空间问题,核心技术:经验回放(Experience Replay)、目标网络(Target Network)
- DDPG(深度确定性策略梯度):适用于连续动作空间(如机器人关节控制)
- 实战流程:
- 定义状态、动作、奖励函数(根据具体任务设计)
- 构建强化学习环境(如用 OpenAI Gym 提供的标准环境,或自定义环境)
- 选择合适的算法(离散动作选 DQN,连续动作选 DDPG)
- 训练模型:调整超参数(学习率 α、折扣因子 γ、经验回放缓冲区大小)
- 评估模型:测试集上计算平均累积奖励,验证策略有效性