# 属于多变量回归类型问题

# 基础算法 & 集成算法

在机器学习中,基础算法(也称为 “单一模型”)和集成算法是两类重要的模型类型,它们的核心区别在于:基础算法是独立工作的单一模型,而集成算法是通过组合多个基础模型来提升性能。以下是具体分类及常见算法:

# 一、基础算法(单一模型)

基础算法是机器学习的 “building blocks”,直接从数据中学习规律,适用于不同类型的任务(分类、回归、聚类等)。

# 1. 线性模型

  • 线性回归:用于回归任务,通过拟合线性方程( y = wx + b )预测连续值。
  • 逻辑回归:用于二分类任务,通过 Sigmoid 函数将线性输出映射到 [0,1] 区间,表示分类概率。
  • 线性判别分析(LDA):用于分类,通过寻找最优投影方向,使不同类别数据的分离度最大。

# 2. 树模型

  • 决策树:通过对特征进行一系列 “是 / 否” 的判断(如 “年龄 > 30?”),生成树状决策规则,可用于分类或回归。
  • ID3、C4.5、CART:决策树的不同实现版本,主要区别在于特征选择标准(信息增益、信息增益比、基尼系数等)。

# 3. 基于距离的模型

  • K 近邻(KNN):通过计算新样本与训练集中 “最近的 k 个样本” 的距离,用多数投票(分类)或平均值(回归)预测结果。
  • K-means:聚类算法,将数据分为 k 个簇,使簇内样本相似度高、簇间相似度低。

# 4. 概率模型

  • 朴素贝叶斯:基于贝叶斯定理和 “特征条件独立假设” 的分类算法,适用于文本分类等场景(如垃圾邮件识别)。
  • 高斯混合模型(GMM):聚类算法,假设数据由多个高斯分布混合生成,用于发现数据的潜在分布。

# 5. 核方法

  • 支持向量机(SVM):通过寻找 “最大间隔超平面” 进行分类,可通过核函数(如 RBF 核)处理非线性数据,也可扩展到回归任务(SVR)。

# 6. 神经网络(基础版)

  • 感知机:最简单的神经网络,由单个神经元组成,用于二分类。
  • 多层感知机(MLP):由输入层、隐藏层、输出层组成的浅层神经网络,可处理非线性问题。

# 二、集成算法

集成算法通过组合多个基础模型的预测结果(如投票、加权平均)来降低单一模型的偏差或方差,从而提升整体性能。核心思想是 “三个臭皮匠顶个诸葛亮”。

# 1. Bagging(并行集成)

  • 原理:通过对训练集进行有放回抽样(Bootstrap),生成多个不同的子数据集,分别训练多个基础模型,最后取平均或投票。
  • 代表算法
    • 随机森林(Random Forest):以决策树为基础模型,同时在特征选择上引入随机性(每次分裂只随机选部分特征),进一步降低过拟合风险。

# 2. Boosting(串行集成)

  • 原理:多个基础模型 “串行” 训练,每个新模型专注于修正前一个模型的错误(对前序模型预测错误的样本赋予更高权重),最后加权融合所有模型。
  • 代表算法
    • AdaBoost:通过调整样本权重和模型权重,逐步提升弱分类器的性能。
    • 梯度提升树(GBDT):以决策树为基础模型,通过梯度下降法最小化预测误差,是工业界常用的强模型。
    • XGBoost、LightGBM、CatBoost:GBDT 的工程优化版本,加入正则化、并行计算等机制,训练更快、性能更强。

# 3. Stacking(堆叠集成)

  • 原理:将多个基础模型的预测结果作为 “新特征”,输入到一个 “元模型”(如逻辑回归、线性回归)中,由元模型给出最终预测。
  • 特点:灵活性高,可组合不同类型的基础模型(如 SVM + 决策树 + 神经网络),但实现较复杂。

# 4. Voting(投票集成)

  • 原理:直接对多个基础模型的预测结果进行投票(分类任务)或加权平均(回归任务)。
  • 分类
    • 硬投票:选择得票最多的类别作为结果。
    • 软投票:根据每个模型的预测概率加权求和,选择概率最高的类别。

# 总结

  • 基础算法是集成算法的 “零件”,各有优缺点(如决策树易过拟合,线性模型难以处理非线性数据)。

  • 集成算法通过组合基础算法,通常能获得更稳定、更优的性能,是竞赛和工业界的常用方案(如 XGBoost、随机森林)。

  • # 什么时候用基础算法?

  • 数据量小

  • 需要快速结果

  • 要求模型可解释

  • 计算资源有限

# 什么时候用集成算法?

  • 追求高精度
  • 数据量充足
  • 不在乎计算时间
  • 可以接受 "黑盒" 模型

# 各个模型对此问题的解答

KNN 回归 评估指标:
均方误差(MSE): 9.74
均方根误差(RMSE): 3.12
平均绝对误差(MAE): 2.41
决定系数(R²): 0.83

# binary

binary 表示二进制
binary classification 表示二分法

  • 在 KNN 的学习过程中遇到了 KD 树算法
    kd 是一种数据结构,常被用于快速搜索任务
    KD 树通过递归地对空间进行二分划分(类似二叉树),将数据点组织成树结构,从而将搜索范围逐步缩小(理想情况下时间复杂度可降至 O (log n))。

线性回归 评估指标:
均方误差(MSE): 19.81
均方根误差(RMSE): 4.45
平均绝对误差(MAE): 3.23
决定系数(R²): 0.65

支持向量回归 评估指标:
均方误差(MSE): 15.29
均方根误差(RMSE): 3.91
平均绝对误差(MAE): 2.47
决定系数(R²): 0.73

决策树回归 评估指标:
均方误差(MSE): 20.29
均方根误差(RMSE): 4.50
平均绝对误差(MAE): 2.44
决定系数(R²): 0.64

随机森林回归 评估指标:
均方误差(MSE): 7.64
均方根误差(RMSE): 2.76
平均绝对误差(MAE): 1.91
决定系数(R²): 0.87

梯度提升回归 评估指标:
均方误差(MSE): 5.53
均方根误差(RMSE): 2.35
平均绝对误差(MAE): 1.85
决定系数(R²): 0.90

# 图表的字体无法显示

  • # 设置中文显示

plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
plt.rcParams ["axes.unicode_minus"] = False # 解决负号显示问题