跳转至

监督学习算法

本页列出 DL-Hub 中所有纯 NumPy 实现的监督学习算法。 每个算法均位于 ml_algorithms/python/ 目录下,采用 @dataclass + fit/predict 接口。


线性模型

Linear Regression

文件:linear_models.py

经典线性回归,支持**最小二乘闭式解**和**梯度下降**两种求解方式。

  • 损失函数:均方误差 (MSE)
  • 闭式解:\(\mathbf{w} = (X^T X)^{-1} X^T y\)
  • 梯度下降:逐步更新权重直到收敛

Ridge Regression

文件:linear_models.py

在 Linear Regression 基础上添加 L2 正则化,防止过拟合。

  • 闭式解:\(\mathbf{w} = (X^T X + \lambda I)^{-1} X^T y\)
  • 正则化强度由超参数 \(\lambda\) 控制

Logistic Regression

文件:linear_models.py

二分类线性模型,使用 Sigmoid 函数将线性输出映射到概率。

  • 损失函数:二元交叉熵 (Binary Cross-Entropy)
  • 决策边界:线性超平面
  • 优化:梯度下降

Softmax Regression

文件:linear_models.py

Logistic Regression 的多分类扩展,使用 Softmax 函数。

  • 损失函数:多分类交叉熵 (Categorical Cross-Entropy)
  • 输出:各类别概率分布
  • 归一化:\(\text{softmax}(z_i) = e^{z_i} / \sum_j e^{z_j}\)

核方法

Linear SVM

文件:svm.py

支持向量机,通过 Hinge Loss 实现最大间隔分类。

  • 目标:最大化决策边界到最近样本的间隔
  • 损失函数:\(\max(0, 1 - y \cdot f(x))\)
  • 优化:次梯度下降

树模型

Decision Tree

文件:decision_tree.py

基于 Gini 不纯度 进行递归分裂的决策树。

  • 分裂准则:选择使 Gini 不纯度下降最大的特征和阈值
  • 递归构建:直到满足停止条件(最大深度、最小样本数等)
  • 支持分类和回归

集成方法

Random Forest

文件:random_forest.py

基于 Bagging 的集成方法,每棵树使用数据和特征的随机子集。

  • Bootstrap 采样:有放回地抽取训练样本
  • 特征随机采样:每次分裂只考虑部分特征
  • 预测:多棵树投票 / 平均

AdaBoost

文件:adaboost.py

自适应 Boosting 算法,使用加权 Decision Stumps 作为弱学习器。

  • 每轮迭代增加被错分样本的权重
  • 弱学习器加权组合为强学习器
  • 学习器权重与其准确率成正比

Gradient Boosting

文件:gradient_boosting.py

梯度提升算法,每棵新树拟合前一轮的**残差**。

  • 沿损失函数的负梯度方向逐步优化
  • 支持自定义损失函数
  • 学习率控制每步更新幅度

概率模型

Naive Bayes

文件:naive_bayes.py

基于贝叶斯定理的分类器,假设特征之间**条件独立**。

  • 后验概率:\(P(y|x) \propto P(y) \prod_i P(x_i|y)\)
  • Laplace 平滑避免零概率
  • 高维稀疏数据表现良好

生成模型

LDA / QDA

文件:discriminant_analysis.py

线性判别分析 (LDA) 和二次判别分析 (QDA),基于**高斯假设**的生成式分类器。

  • LDA:假设各类别共享协方差矩阵 → 线性判别函数
  • QDA:各类别拥有独立协方差矩阵 → 二次判别函数
  • 分类决策:比较各类别后验概率

近邻方法

KNN

文件:knn.py

K 最近邻算法,基于**距离度量**进行预测。

  • 分类:K 个近邻的多数投票
  • 回归:K 个近邻的均值
  • 距离度量:欧氏距离

神经网络

Perceptron

文件:perceptron.py

单层感知机,使用**感知机学习规则**进行训练。

  • 线性可分数据收敛保证
  • 更新规则:误分类时调整权重
  • 激活函数:阶跃函数

MLP

文件:mlp.py

多层感知机,使用**反向传播**算法训练。

  • 前向传播:逐层计算激活值
  • 反向传播:基于链式法则计算梯度
  • 激活函数:ReLU / Sigmoid
  • 支持任意隐藏层配置