当前位置: 首页 > news >正文

五种算法详解(SVM / Logistic Regression / kNN / Random Forest / HistGradientBoosting)

五种算法详解(SVM / Logistic Regression / kNN / Random Forest / HistGradientBoosting)

本文介绍项目中横向对比与投票集成所用的五种经典算法:技术原理、关键超参数、优缺点、适用场景、在本项目的推荐配置与常见陷阱。


1) 支持向量机 SVM(线性核)

  • 核心原理:通过最大化分类间隔(margin)来提升泛化能力。线性核下即在特征空间中寻找最优超平面,间隔最大化等价于二次优化问题;加入松弛变量处理不可分数据。

  • 概率输出:通常通过 Platt scaling 等方法对决策函数进行后校准得到近似概率,需要 probability=True 训练时启用。

  • 关键超参:

    • C(正则强度):越大越倾向于拟合训练数据,越小越平滑、泛化更强。
    • kernel:本项目使用 linear(线性核)。
    • probability:为 True 时启用概率估计(训练更慢)。
  • 优点:

    • 适合高维特征、小样本;具有明确的间隔最大化几何解释。
    • 在线性可分近似时表现稳健,泛化较好。
  • 缺点:

    • 概率估计为后处理,训练耗时会增加;对异常点较敏感。
  • 适用场景:

    • 高维表征(如图像经降维后的特征)、类间边界相对线性。
  • 本项目推荐配置:

    • LinearSVCSVC(kernel='linear', probability=True);前置 StandardScaler + PCA(n_components=50)
  • 常见陷阱:

    • 忘记标准化会导致权重尺度失衡;C 过大易过拟合,过小则欠拟合。

2) 逻辑回归 Logistic Regression(One-vs-Rest)

  • 核心原理:以逻辑函数建模后验概率,最大化对数似然;多分类用 OvR 拆分为多个二分类。L2 正则可抑制过拟合。
  • 关键超参:
    • C(正则强度,和 SVM 定义方向相反):值大→正则弱;值小→正则强。
    • penalty/solver:常见 penalty='l2', solver='lbfgs'saga(支持大规模与稀疏)。
    • class_weight:'balanced' 可在类别不均衡时改善召回。
  • 优点:
    • 概率输出可靠、可解释性强;线性模型,训练与预测高效。
  • 缺点:
    • 对非线性边界拟合能力有限;特征工程要求高。
  • 适用场景:
    • 线性可分近似、需要概率与可解释性、作为稳健基线。
  • 本项目推荐配置:
    • LogisticRegression(multi_class='ovr', class_weight='balanced'),配合 StandardScaler + PCA
  • 常见陷阱:
    • 未标准化或正则不当导致收敛慢或欠/过拟合;类别极不均衡时需关注阈值与权重。

3) k 近邻 kNN(距离加权)

  • 核心原理:基于相似度的惰性学习;预测时在训练集中寻找最近的 k 个邻居,进行投票或概率估计(距离加权)。
  • 关键超参:
    • k:邻居数量,过小易受噪声影响,过大导致过度平滑。
    • weights:'uniform''distance';建议使用 'distance' 提升鲁棒性。
    • metric:距离度量,常用欧氏距离。
  • 优点:
    • 简单直观,无训练时间;对多模态数据友好。
  • 缺点:
    • 预测时开销大;对特征尺度敏感;对噪声与冗余特征较敏感。
  • 适用场景:
    • 小规模、结构清晰的数据集;作为对比基线。
  • 本项目推荐配置:
    • KNeighborsClassifier(n_neighbors=5, weights='distance'),使用标准化与 PCA 后的特征。
  • 常见陷阱:
    • 未标准化导致距离失真;k 取 1 在噪声存在下波动大。

4) 随机森林 Random Forest

  • 核心原理:Bagging 思想集成多棵决策树(随机特征子集),通过投票与均值降低方差、提升鲁棒性。
  • 关键超参:
    • n_estimators:树的数量;适度增大提升稳定性但带来更多计算。
    • max_depth, max_features:控制树复杂度与随机性。
    • class_weight:不均衡数据时可用 'balanced'
  • 优点:
    • 对特征尺度不敏感;抗过拟合;可给出特征重要度;概率输出自然。
  • 缺点:
    • 相比线性模型可解释性较差;树太深会过拟合(虽集成可缓解)。
  • 适用场景:
    • 中小规模、非线性关系明显、特征工程有限的任务。
  • 本项目推荐配置:
    • RandomForestClassifier(n_estimators≈300, class_weight='balanced'),前置标准化+PCA 可加速但非必须。
  • 常见陷阱:
    • n_estimators 太小波动大;未限制 max_depth 在小数据集上也可能过拟合。

5) 直方梯度提升树 HistGradientBoosting (HGBT)

  • 核心原理:梯度提升树的高效实现,对连续特征先做分桶(直方),以直方统计加速分裂搜索;逐轮拟合残差,提升偏差方向的性能。
  • 关键超参:
    • learning_rate:步长,越小越稳健但需更多迭代。
    • max_iter:迭代轮数(树数)。
    • max_depth / max_leaf_nodes:控制树的表达能力与过拟合风险。
    • l2_regularization:正则项强度。
  • 优点:
    • 拟合能力强、速度快;对多种特征分布鲁棒;常在表格数据/低维嵌入上有更高精度。
  • 缺点:
    • 对噪声与异常点敏感;超参众多需调优;概率校准有时需要后处理。
  • 适用场景:
    • 特征维度较低(或降维后)、非线性关系明显、追求更高精度的任务。
  • 本项目推荐配置:
    • HistGradientBoostingClassifier(max_iter≈300),配合 PCA 后 50 维特征;可与 SVM/LogReg 进行投票集成。
  • 常见陷阱:
    • learning_rate 与 max_iter 需配套调整;max_depth 过大易过拟合。

投票与融合策略建议

  • 多数投票(硬投票):
    • 简洁稳健;平局可用“按权重的概率均值”打破。
  • 加权投票(软投票):
    • 将各模型的类别概率向量按权重相加取 argmax;权重可用验证集 Accuracy 或 F1;本项目默认读取 svm_pd_model/model_compare_results.json
  • 何时采用:
    • 单模型已较强但类别间有互补时,集成常带来稳健性提升。

本项目中的实践要点

  • 统一预处理:StandardScaler + PCA(n_components=50),再送入各分类器。
  • 概率缺失时的处理:对于不提供 predict_proba 的模型,用 one-hot 近似概率用于集成。
  • 权重来源:若 model_compare_results.json 缺失则使用等权重。

参考资料

  • scikit-learn 官方文档:
    • SVM: https://scikit-learn.org/stable/modules/svm.html
    • Logistic Regression: https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression
    • kNN: https://scikit-learn.org/stable/modules/neighbors.html
    • Random Forest: https://scikit-learn.org/stable/modules/ensemble.html#forest
    • HistGradientBoosting: https://scikit-learn.org/stable/modules/ensemble.html#histogram-based-gradient-boosting
  • 模型概率校准(Platt scaling / Isotonic):https://scikit-learn.org/stable/modules/calibration.html
http://www.dtcms.com/a/340639.html

相关文章:

  • 无人机抗噪模块技术概述!
  • 20.web api 11
  • C5.6:双电源发射极偏置、特殊类偏置、PNP型偏置电路
  • 如何快速上手【Spring AOP】?核心应用实战(上篇)
  • 【买机器人,上BFT】香港大学联合项目论文解读 |Bunny-VisionPro:用于模仿学习的低成本实时双臂灵巧遥操作系统
  • SpringBoot 整合 Langchain4j RAG 技术深度使用解析
  • uv,下一代Python包管理工具
  • 机器学习-数据预处理全指南:从缺失值到特征编码
  • Tdesign-React 组件 Card 实现头部固定,内容区单独可滚动
  • vue:vue中的ref和reactive
  • 0820 SQlite与c语言的结合
  • 宿主机与容器通过 rmw_cyclonedds_cpp中间件进行ros2结点之间的通讯的相关注意事项
  • 开源的实时 Web 日志分析器GoAccess安装使用指南
  • 10X Visium HD空转流程1·Space Ranger v4.0.1的使用
  • [机器学习]11-基于CART决策树算法的西瓜数据集分类
  • bun + vite7 的结合,孕育的 Robot Admin 【靓仔出道】(十五)
  • LangGraph从入门到精通(二)——条件边与循环流程实现工具调用
  • 短剧小程序系统开发:构建影视娱乐新生态的基石
  • c#,装箱拆箱知识点示例理解
  • (Arxiv-2025)SkyReels-A2:在视频扩散变换器中组合任意内容
  • 分享智能解译算法获取及调用之建筑物提取
  • Ubuntu 虚拟显示器自动控制服务设置(有无显示器的切换)
  • pip 安装常见错误及实例化解决办法大全
  • 计算机网络技术学习-day4《路由器配置》
  • ubuntu下安装vivado2015.2时报错解决方法
  • SPI 机制深度剖析:Java、Spring、Dubbo 的服务发现哲学与实战指南
  • 根据Wireshark捕获数据包时间和长度绘制路由器发送给电脑数据的信号波形
  • 【FreeRTOS】临界资源管理
  • 树上背包(P2014 [CTSC1997] 选课)
  • 经营帮租赁经营板块:解锁资产运营新生态,赋能企业增长新引擎