01 数字技术与金融工程前沿

机器学习与金融工程(浅层学习)

内容概要

什么是机器学习?

  • Definition of ML

    A computer program is said to learn from experience with respect to some class of tasks , and performance measure , if its performance at tasks in , as measured by , improves with experience .

    ---Tom Mitchell

  • Experience
    • 训练集、验证集、测试集
  • Tasks
    • 预测、分类、聚类、降维
  • Performance measure
    • MSE, , 交叉熵等
    • 参数:超参数、模型参数
输入
模型/算法
输出

使用机器学习模型的一般流程

  • 机器学习vs统计方法

    • 统计方法依赖于基本假设和显式结构模型,例如假设从特定的概率分布中抽取的观察样本。
    • 机器学习寻求从大量数据中提取知识,而没有这样的限制——“找到模式,应用模式。”
    • 机器学习的优势:高维、非线性
  • 监督学习vs无监督学习

    • 监督学习算法通过标记数据集推断一组输入()和所需输出()之间的模式。
    • 无监督学习是不使用标记数据的机器学习算法。 在无监督学习中,输入()用于分析而不提供任何目标(。 该算法旨在发现数据本身的结构。 无监督学习中的两类重要问题是降维聚类
  • 深度学习vs强化学习

    • 深度学习中,复杂的算法可以解决高度复杂的任务,如图像分类、人脸识别、语音识别和自然语言处理。
    • 强化学习,计算机通过与自身交互(或由相同算法生成的数据)来学习。
    • 神经网络(NNs,也称为人工神经网络或 ANN)包括高度灵活的机器学习算法,这些算法已成功应用于各种以非线性和特征之间的交互为特征的任务。
    • 除常用于分类和回归外,神经网络也是深度学习和强化学习的基础,可以是有监督的,也可以是无监督的。

过拟合(Overfitting)和泛化(generalization)

  • 欠拟合(Underfitting) 意味着模型未捕获数据中的关系。
  • 过度拟合(Overfitting) 意味着模型开始纳入来自怪癖或虚假相关性的噪声
    • 它将随机性误认为是模式和关系
    • 记住数据,而不是从中学习
    • 数据中的噪声水平较高且模型过于复杂
    • 复杂性指模型特征、项或分支的数量,及模型是线性的还是非线性的(非线性更复杂)
  • 经验风险(empirical risk)

  • 总体风险(population risk)

  • 泛化差距/泛化鸿沟(generalization gap):

  • 测试风险(test risk)

评估 ML 算法性能错误和过度拟合

  • 数据科学家将样本外总误差分解为三个来源:
    • 偏差误差(Bias error),或模型与训练数据的拟合程度。 具有错误假设的算法会产生高偏差和较差的近似值,从而导致欠拟合和高样本内误差。
    • 方差误差(Variance error),或者模型结果响应验证和测试样本中的新数据而变化的程度。 不稳定的模型会产生噪声并产生高方差,从而导致过度拟合
    • 由于数据的随机性而导致的基本误差(Base error)

learning curve

  • 学习曲线根据训练样本中的数据量绘制验证或测试样本(即样本外)的准确率(= 1 – 错误率)

拟合曲线

  • 拟合曲线(fitting curve),显示针对模型绘制的 轴上的样本内和样本外错误率( 轴上的复杂性

评估 ML 算法性能:防止监督学习中的过拟合

  • 使用两个常见的指导原则和两种方法来减少过度拟合:

    • 防止算法在选择和训练过程中变得过于复杂(正则化(regularization)
    • 通过使用**交叉验证(cross-validation)**实现正确的数据采样
  • K折交叉验证(K-fold cross-validation)

    • 数据(不包括测试样本和新鲜数据)随机打乱,然后分为k个相等的子样本
    • 个样本用作训练样本,一个样本用作验证样本
    • 通常设置为 5 或 10
    • 此过程重复 次。 验证错误的平均值(平均 )被视为模型样本外错误的合理估计 ()
  • 留一交叉验证(Leave-one-out cross-validation):

Cross-validation using sk-learn: train_test_split

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn import datasets
from sklearn import svm
X, y = datasets.load_iris(return_X_y=True)
X.shape, y.shape

((150, 4), (150,))

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.4, random_state=0)
X_train.shape, y_train.shape

((90, 4), (90,))

X_test.shape, y_test.shape

((60, 4), (60,))

clf = svm.SVC(kernel='linear', C=1).fit(X_train, y_train)
clf.score(X_test, y_test)

Cross-validation using sk-learn: computing cross-validated metrics



from sklearn.model_selection import cross_val_score
clf = svm.SVC(kernel='linear', C=1, random_state=42)
scores = cross_val_score(clf, X, y, cv=5)
scores

array([0.96..., 1. , 0.96..., 0.96..., 1. ])

print("%0.2f accuracy with a standard deviation 
    of %0.2f" % (scores.mean(), scores.std()))

0.98 accuracy with a standard deviation of 0.02

from sklearn import metrics
scores = cross_val_score(
    clf, X, y, cv=5, scoring='f1_macro')
scores

array([0.96..., 1. ..., 0.96..., 0.96..., 1. ])

Time Series Split

from sklearn.model_selection import TimeSeriesSplit
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]
    , [1, 2], [3, 4]])
y = np.array([1, 2, 3, 4, 5, 6])
tscv = TimeSeriesSplit(n_splits=3)
print(tscv)

TimeSeriesSplit(gap=0, max_train_size=None, n_splits=3, test_size=None)

for train, test in tscv.split(X):
    print("%s %s" % (train, test))

[0 1 2] [3]
[0 1 2 3] [4]
[0 1 2 3 4] [5]

No free lunch theorem

All models are wrong, but some models are useful.

--- George Box

  • 没有免费的午餐定理:没有一个最佳模型可以完美地解决所有类型的问题
  • 选择合适的型号
    • 基于领域知识
    • 反复试验
      • 交叉验证
      • 贝叶斯模型选择技术

参考文献:Empirical Asset Pricing via Machine Learning

参考文献:Charting by Machines

参考文献:Financial Machine Learning

监督学习

  • 任务是学习从输入到输出的映射
    • 分类离散
    • 回归连续
  • 输入 也称为 特征(features)协变量(covariates)预测变量(predictors)
  • 输出 也称为 标签(label)目标(target)响应(response)
  • 经验训练集(training set)

统计推断与监督学习


性质 统计推断 监督机器学习
目标 具有解释力的因果模型 预测表现,往往解释力有限
数据 数据由模型生成 数据生成过程未知
框架 概率 算法和概率
表达能力 通常是线性的 非线性
模型选择 基于信息准则 数值优化
可扩展性 仅限于低维数据 缩放至高维输入数据
稳健性 容易出现过度拟合 专为样本外性能而设计
诊断 广泛 有限

回归(Regression)

  • 输出空间: .
  • 损失函数:二次损失(quadratic loss)或 loss:

  • 均方误差(mean squared error, MSE):

  • 示例
    • 不确定性: Guassian / Normal

  • 条件分布

  • NLL

(简单) 线性回归

  • 模型:

  • 参数:
  • 最小二乘估计:

拟合优度(goodness of fit)

    • T-total:
    • E-explained:
    • R-residual:

均方误差(MSE)或均方根误差(RMSE)、残差分析、信息准则(AIC, BIC)、卡方检验(Chi-square test)、似然比检验等也常被用来分析回归算法的拟合优度。

岭回归(Ridge)

  • 岭回归:对权重使用零均值高斯先验的MAP估计

  • MAP估计

其中 与先验强度成正比,且

  • 正则化或权重衰减
  • 特点:L2正则化,相当于高斯先验
  • 优点:缓解多重共线性,降低过拟合风险
  • 缺点:不产生稀疏解,所有特征都保留
  • 适用场景:特征间高度相关,需要所有特征都保留在模型中

Lasso回归

  • 最小绝对收缩和选择算子(LASSO)

  • 正则化: 使用拉普拉斯先验的MAP估计

  • 其他范数
    • 一般而言:
      • 更稀疏的解
      • 问题变得非凸
    • (范数):

  • 特点:L1正则化,相当于拉普拉斯先验
  • 优点:产生稀疏解,自动特征选择
  • 算法:软阈值算法
  • 缺点:高度相关特征组中往往只选择其中一个
  • 适用场景:需要特征选择,希望获得简约模型

弹性网络(Elastic net)



  • 特点:结合L1和L2正则化
  • 优点:克服Lasso和Ridge的局限性
  • 适用场景:特征数大于样本数,或特征间高度相关

多项式回归(Polynomial regression)

  • 模型:

  • 特征预处理(feature preprocessing), 或 特征工程(feature engineering)

  • 特点:参数线性但特征非线性,具有全局函数结构

  • 优点:可捕捉简单的非线性关系

  • 缺点:高阶多项式容易过拟合边界预测不稳定

  • 适用场景:数据呈现明显的曲线趋势

样条回归:阶梯函数


  • 的范围分成几个区间

  • 在每个区间内拟合不同的常数

  • 优点:没有全局结构

  • 缺陷:除非预测变量中存在自然断点,否则分段常数函数可能会错过变化趋势

  • 适用场景:特征存在自然断点

样条回归:基函数

  • 多项式和分段常数回归模型的一般化基函数方法
  • 基函数:应用于变量的函数族或变换:
  • 模型

  • 基函数的一些例子
    • 多项式函数
    • 分段常数函数
    • 小波
    • 傅里叶级数
    • 样条

样条回归:分段多项式

  • 的不同区域上拟合单独的低阶多项式。

  • 例子:在点处有单个节点的分段三次多项式

  • 自由度

  • 使用更多的节点会导致更灵活的分段多项式

样条回归:约束和样条

  • 分段三次多项式:无约束
  • 连续分段三次多项式的连续性
  • 三次样条的连续性
  • 次样条:分段次多项式,在每个节点处导数连续直到

样条回归:样条基表示

  • 回归样条(regression spline):

  • 样条基
    • 多项式基:, ,
    • 对每个节点的截断幂基

  • 样条在预测变量的外部范围可能具有高方差
  • 自然样条
    • 具有额外边界约束的回归样条
    • 要求函数在边界处为线性
    • 自然样条通常在边界处产生更稳定的估计

与多项式回归的比较

  • 15个自由度的自然三次样条 vs. 15次多项式

  • 自然三次样条在边界上表现更好

  • 一般来说,自然三次样条产生更稳定的估计

  • 特点:分段多项式,在断点处有连续性约束

  • 优点:比多项式更灵活,边界处更稳定

  • 适用场景:数据关系复杂但光滑,需要局部适应性

平滑样条

  • 拟合曲线:最小化RSS 使其变小。
  • 应该是一个平滑函数(为什么?怎么做?
  • 平滑样条最小化以下目标函数

  • 平滑样条是在处有节点的自然三次样条
    • 的唯一值处有节点的分段三次多项式
    • 在每个节点处的一阶和二阶导数连续
    • 在极端节点外的区域是线性的
    • 它是这种自然三次样条的收缩版本
  • 特点:平衡拟合度和平滑度
  • 优点:自动确定平滑程度
  • 适用场景:需要平滑曲线的问题

局部回归(Local regression)

仅使用附近的训练观测值来计算目标点处的拟合

  • 特点:使用目标点附近的训练样本计算拟合
  • 优点:适应复杂局部模式,不需要指定全局函数形式
  • 缺点:计算成本高,高维空间中受维度灾难影响
  • 适用场景:有大量数据点,关系复杂但局部可近似

算法

算法:处的局部回归
1. 收集最接近的训练点的分数
2. 为这个邻域中的每个点分配一个权重,使离最远的点权重为零,最近的点权重最高。除了这个最近邻外,其他点的权重都为零。
3. 使用上述权重,通过找到使最小化的,来拟合上的加权最小二乘回归。
4. 处的拟合值由给出。

局部线性回归

广义加性模型(GAM)


  • 多元线性回归模型

  • GAM

  • 特点:自动建模非线性关系,各变量独立贡献
  • 优点:
    • 捕捉非线性关系
    • 可分别检查每个变量效果
    • 保持较好解释性
  • 缺点:无法捕捉变量间交互作用
  • 适用场景:需要非线性关系但仍要保持解释性

稳健线性回归(Robust linear regression)

  • 高斯噪声假设

    • 普通最小二乘估计量 = 最大似然估计
    • 对离群值表现不佳
  • 稳健回归:用具有厚尾特性的分布替代响应变量的高斯分布

  • 特点:使用厚尾分布替代高斯分布

  • 方法:Laplace分布似然、t分布似然、Huber损失

  • 优点:对异常值不敏感,提供更可靠的参数估计

  • 适用场景:数据含有离群点或异常值

Likelihood Prior Posterior Name
Gaussian Uniform Point Least squares
Student Uniform Point Robust regression
Laplace Uniform Point Robust regression
Gaussian Gaussian Point Ridge
Gaussian Laplace Point Lasso
Gaussian Gauss-Gamma Gauss-Gamma Bayesian linear regression

偏最小二乘法(PLS)概述


  • 定义:一种同时处理输入变量(X)和输出变量(Y)的统计建模和降维技术
  • 核心思想:在X和Y之间构建潜在变量,最大化它们之间的协方差
  • 主要用途
    • 高维数据的预测建模
    • 处理多重共线性问题
    • 同时分析多个响应变量
  • 区别于PCA:PCA只关注X的方差,PLS同时关注X-Y关系

PLS工作原理


  • 基本模型

    • 输入矩阵分解:
    • 输出矩阵分解:
    • 其中为得分矩阵,为载荷矩阵
  • 算法步骤

    1. 计算的权重向量,
    2. 估计潜在变量分量
    1. 估计X和Y的载荷,
    2. 用残差矩阵替换,重复上述步骤
  • 关键特点:每次提取的成分都最大化协方差

PLS与其他方法比较


PLS与PCA比较

特性 PLS PCA
主要目标 最大化X-Y协方差 最大化X方差
考虑因变量
降维方向 与Y相关的方向 最大方差方向
最适合的任务 预测建模 数据压缩与可视化
解释模型 关注X-Y关系 仅关注X内部结构

与回归方法比较

  • 比普通回归更能处理多重共线性
  • 可处理样本量小于变量数的情况
  • 同时建模多个响应变量

PLS在经济、管理、金融领域的应用

经济领域应用

  • 宏观经济预测
    • 预测GDP、通货膨胀率等经济指标
    • 分析多经济因素间的关系
    • 评估政策影响的多维度效果

管理领域应用

  • 市场营销

    • 消费者行为预测
    • 市场细分与定位
    • 广告效果评估
  • 人力资源管理

    • 员工绩效预测模型
    • 人才选拔与匹配
    • 组织文化与绩效关系分析

金融领域应用

  • 风险管理
    • 信用风险评估
    • 投资组合优化
    • 市场波动性预测
  • 金融市场分析
    • 股票收益预测
    • 金融资产定价模型
    • 高频交易策略开发

PLS优缺点与实施建议

优点

  • 有效处理高维、多重共线性数据
  • 样本量可以小于变量数
  • 同时建模多个响应变量
  • 提供数据的降维可视化
  • 比PCA具有更好的预测能力

缺点

  • 复杂度高于简单回归方法
  • 结果解释可能不直观
  • 对非线性关系建模能力有限
  • 需要交叉验证确定最佳成分数

实施建议

  • 数据预处理(标准化/归一化)至关重要
  • 使用交叉验证确定最优成分数
  • 结合变量重要性评分(VIP)理解模型
  • 考虑非线性PLS扩展处理复杂关系

回归算法选择建议

  • 简单线性关系

    • 首选普通线性回归,简单高效
    • 若存在多重共线性,考虑岭回归
  • 需要特征选择

    • 使用Lasso回归自动选择重要特征
    • 若特征高度相关,考虑弹性网络
  • 数据有异常值

    • 使用稳健回归方法,如Huber损失
    • 或考虑预处理移除异常值
  • 复杂非线性关系

    • 低维特征:考虑样条方法或GAM
    • 数据量大:可使用局部回归
    • 需保持解释性:优先选择GAM
  • 特征具有分组结构

    • 使用分组Lasso实现组级别特征选择
  • 计算资源限制

    • 简单问题优先线性模型
    • 复杂问题考虑合理降维后应用高级模型
  • 实践建议

    • 从简单模型开始,逐步增加复杂度
    • 使用交叉验证比较不同模型性能
    • 结合领域知识选择合适的特征变换

分类(Classification)

  • 输出空间(output space) 是一组无序且互斥的标签,称为类(classes)

  • 该问题也称为模式识别

  • 二元分类(binary classification):只有两个类别,通常表示为

示例:对鸢尾花(Iris)进行分类

探索性数据分析

  • 探索性数据分析(exploratory data analysis): 是否存在明显地模式
    • 具有少量特征的表格数据:配对图(pair plot)
    • 高维数据:首先降维,然后以 2d 或 3d 形式可视化数据

学习分类器

  • 决策规则(decision rule) 通过一维(1d)决策边界(decision boundary)

  • 决策树 更复杂的决策规则涉及 2d 决策面

经验风险最小化(Empirical risk minimization)

  • 训练集上的错误分类率(misclassification rate)

  • 损失函数(loss function)
  • 经验风险(empirical risk):训练集上预测器的平均损失

  • 模型拟合(model fitting)/训练(training)通过经验风险最小化(empirical risk minimization)

不确定性(Uncertainty)

  • 两种类型的不确定性
    • 认知不确定性(epistemic uncertainty)模型不确定性(model uncertainty):由于
      缺乏输入输出映射的知识
    • 任意不确定性(aleatoric uncertainty)数据不确定性(data uncertainty):由于映射中的内在(不可约)随机性
  • 我们可以使用以下条件概率分布(conditional probability distribution) 来捕获不确定性:

极大似然估计(Maximum likelihood estimation)

  • 似然函数(likelihood function):

  • 对数似然函数(log likelihood function)

  • 负对数似然函数(Negative Log Likelihood): 训练集的平均负 概率。

  • 极大似然估计(the maximum likelihood estimate, MLE):

逻辑回归(Logistic regression)

  • 违约概率

  • 线性回归

  • 逻辑函数

source: ISLP

估计与预测

  • 似然函数:

  • 预测:对于余额为 的个人是

  • 预测:对于学生状态

Coefcient Std. error z-statistic p-value
Intercept −10.6513 0.3612 −29.5 <0.0001
balance 0.0055 0.0002 24.9 <0.0001

Coefcient Std. error z-statistic p-value
Intercept −3.5041 0.0707 −49.55 <0.0001
student[Yes] 0.4049 0.1150 3.52 0.0004

多元逻辑回归(Multiple logistic regression)


  • 几率模型

  • 的模型

Coefcient Std. error z-statistic p-value
Intercept −10.8690 0.4923 −22.08 <0.0001
balance 0.0057 0.0002 24.74 <0.0001
income 0.0030 0.0082 0.37 0.7115
student[Yes] −0.6468 0.2362 −2.74 0.0062

预测

  • 一个信用卡余额为 $1,500 且收入为 $40,000 的学生的估计违约概率为

  • 具有相同余额和收入的非学生的估计违约概率为

多项逻辑回归(Multinomial logistic regression)

  • 对具有两个以上类别的响应变量进行分类

  • 模型

    • 对于 :基准

  • 对于

  • 对数几率(对于

  • 优点
    • 简单直观,计算效率高
    • 可解释性强,易于理解和实现
    • 直接提供概率输出
  • 缺点
    • 只能表达线性决策边界
    • 类别间有显著分离时参数估计不稳定
    • 特征间相关性强时表现不佳
  • 适用场景
    • 需要解释模型的场景
    • 初步建模和基准模型
    • 需要概率输出的应用

生成式分类模型

  • 核心思想
    • 在每个响应类别 中分别建模预测变量 的分布
    • 使用贝叶斯定理将这些转换为 的估计
  • 为什么我们需要生成式分类模型
    • 当两个类别之间存在实质性的分离时,逻辑回归模型的参数估计非常的不稳定
    • 如果预测变量 在每个类别中的分布近似正态且样本量较小,则本节中的方法可能比逻辑回归更准确
    • 本节中的方法可以自然地扩展到多于两个响应类别的情况
  • 假设定性响应变量 可以取 个可能的不同且无序的值。
  • 表示随机选择的观测值来自第 类的总体或先验概率。
  • 表示来自第 类的观测值的 的密度函数
  • 后验概率(贝叶斯定理)

  • 估计
    • 不直接计算后验概率 ,我们可以简单地代入 的估计值
    • :我们简单地计算属于第 类的训练观测值的比例
    • :更具挑战性

生成式分类模型:线性判别分析(LDA)(

  • 假设

    • 只有一个预测变量:
    • 是正态分布/高斯分布

  • 后验概率

  • 预测
    • 将观测值分类到 最大的类别
    • 等价法则:将观测值分配到最大化 的类别

例子

  • 如果 ,则将观测值分配给类别1,否则分配给类别2
  • 贝叶斯决策边界

生成式分类模型:LDA(

  • 多元高斯分布
  • 联合密度


  • 左图:

  • 右图:相关/具有不等方差
  • 类中的观测值来自多元高斯分布
    • 是类别特定的均值向量
    • 是所有 个类别共有的协方差矩阵
  • 贝叶斯分类器将观测值 分配给最大化 的类别

  • 贝叶斯决策边界的解为

  • 优点
    • 样本量小时比逻辑回归更稳定
    • 天然支持多类别问题
    • 可进行降维
  • 缺点
    • 假设数据服从高斯分布
    • 假设所有类别共享同一协方差矩阵
    • 只能生成线性决策边界
  • 适用场景
    • 小样本多类别问题
    • 类内方差相似的数据

生成式分类模型:二次判别分析(QDA)

  • 每个类别有自己的协方差矩阵

  • 贝叶斯分类器将观测值 分配给最大化 的类别

  • 优点
    • 比LDA更灵活,可以拟合非线性决策边界
    • 偏差小于LDA
    • 每个类别有独立的协方差矩阵
  • 缺点
    • 方差大于LDA,需要更多数据
    • 计算复杂度高于LDA
    • 易过拟合
  • 适用场景
    • 中等规模数据集
    • 类别间有明显不同方差的情况

生成式分类模型:朴素贝叶斯

  • 假设:在第k类中,p个预测变量是独立的

  • 后验概率

  • 使用训练数据 估计一维密度函数
    • 如果 是定量的,那么我们可以假设
    • 如果 是定量的,使用非参数估计
      • 为每个类别中第 个预测变量的观测值制作直方图
      • 核密度估计器
    • 如果 是定性的,计算对应于每个类别的第 个预测变量的训练观测值的比例
  • 优点
    • 简单高效,训练速度快
    • 特别适合高维数据
    • 样本量较小时也能工作
  • 缺点
    • 特征独立性假设通常不现实
    • 对零频率问题敏感
  • 适用场景
    • 文本分类、垃圾邮件过滤
    • 高维稀疏数据
    • 实时预测需求

广义加性模型(GAM)

将对数几率比建模为广义加性模型:

  • 优点
    • 保持可解释性
    • 能捕捉特征与目标变量间的非线性关系
    • 比纯线性模型更灵活
  • 缺点
    • 复杂度高于线性模型
    • 仍受加性假设限制
  • 适用场景
    • 需要解释性且存在非线性关系
    • 探索性数据分析

支持向量机:超平面

  • 维空间中:一个维度为 的平坦仿射子空间

    • 在二维空间:一条线
    • 在三维空间:一个平面
    • 维空间 ():难以可视化
  • 数学定义(针对 维设置)

  • 二维例子:

使用分离超平面进行分类

对于分离超平面

等价地,分离超平面具有以下性质

对所有 成立。

分离超平面

  • 我们基于的符号对测试观测值 进行分类

    • 类别 1
    • 类别 -1
  • 的大小

最大间隔分类器

  • 间隔
  • 最大间隔超平面(也称为最优分离超平面)
  • 最大间隔分类器的构建

不可分离情况和噪声数据

  • 有时数据不可分离
  • 有时最大间隔分类器对噪声数据非常敏感

支持向量分类器(SVC)

  • :第i个观测值在间隔的正确一侧
  • :第i个观测值在间隔的错误一侧
  • :第i个观测值在超平面的错误一侧

参数

  • 是间隔可以被 个观测值违反的预算
    • :不允许违反间隔
    • :最多 个观测值可以在超平面的错误一侧
    • :间隔将变宽
  • 控制偏差-方差权衡
    • 小的 :低偏差,高方差
    • 大的 :高偏差,低方差
    • 通过交叉验证选择
  • 一个观察:只有**位于间隔上或违反间隔的观测值(支持向量)**会影响超平面

支持向量机(SVM)

支持向量机无法处理非线性

我们能做什么?

利用多项式特征的非线性分类器

  • 原始特征

  • 多项式特征

  • 通过优化的SVM

核函数

  • 定义:

  • 当且仅当对于任何数据 ,核矩阵 是半正定的, 才是核函数。

核函数的一些例子

名称 函数
线性核
多项式核
径向核
高斯核
拉普拉斯核
Sigmoid核

假设 是核函数:

  • 的线性组合是核函数

  • 的直接乘积是核函数

  • 对于任何函数 ,如果

    是核函数

SVC vs. SVM

SVC
SVM
内积/核

函数形式

多类别SVM

  • 一对一(OVO)分类

    • 又称为全配对
    • 为每对类别构建一个SVM
    • 使用每个SVM对测试观测值进行分类
    • 将观测值分配给最频繁分配的类别
  • 一对多(OVA)分类

    • 又称为一对剩余
    • 为每个类别拟合 个SVM(该类别编码为"1",其余编码为"-1")
    • 表示参数
    • 将观测值分配给 最大的类别

与逻辑回归的关系

  • 支持向量分类器优化的铰链损失 + 惩罚形式:

    • 优化模型

    • 这与逻辑回归中的"损失"(负对数似然)非常相似。
  • SVM vs. 逻辑回归

    • 当类别(几乎)可分离时,SVM比逻辑回归表现更好。LDA也是如此。
    • 当不可分离时,逻辑回归(带岭惩罚)和SVM非常相似。
    • 如果你希望估计概率,逻辑回归是首选。
    • 对于非线性边界,核SVM很流行。也可以在逻辑回归和LDA中使用核,但计算成本更高。
  • 优点
    • 在高维空间有效
    • 通过核函数处理非线性关系
    • 理论基础扎实
  • 缺点
    • 不直接提供概率估计
    • 参数调优困难
    • 大数据集计算成本高
  • 适用场景
    • 复杂决策边界
    • 中小规模数据集
    • 类别几乎可分的情况

分类算法选择建议

基于数据特征选择

  1. 小样本数据
    • 首选LDA或朴素贝叶斯
    • 避免复杂的非线性SVM
  2. 高维数据
    • 朴素贝叶斯或线性SVM
    • 考虑先降维再使用其他算法
  3. 非线性关系明显
    • 非线性SVM或GAM
    • 如果需要解释性,选GAM
  4. 类别不平衡
    • 调整权重的逻辑回归
    • 结合采样技术的SVM

基于应用需求选择

  1. 需要概率输出
    • 逻辑回归、LDA/QDA、朴素贝叶斯
    • 避免直接使用SVM(需额外校准)
  2. 解释性要求高
    • 逻辑回归或GAM
    • 避免复杂核函数的SVM
  3. 计算资源有限
    • 朴素贝叶斯或逻辑回归
    • 避免非线性SVM和复杂GAM
  4. 预测准确性优先
    • 尝试SVM或多模型集成
    • 通过交叉验证选择最佳模型

基于树的模型

  • 分类与回归树 (CART)
    • 递归地划分输入空间
    • 在输入空间的每个生成区域中建立局部模型
  • CART可用于回归或者分类
  • CART是很多集成学习算法的基础

模型定义

  • 回归树: 所有输入都是实值。

  • 该树由一组嵌套的决策规则组成。在每个节点,输入向 的特征维度与阈值进行比较,然后根据是高于还是低于阈值,输入被传递到左分支或右分支。

  • 在树的叶子处,模型指定了落入输入空间该部分的任何输入的预测输出。

  • 一个例子:
    • 空间区域:

  • 区域1的输出(均值响应)可以使用以下公式估计

  • 形式上,回归树可以定义为

  • 是由第 个叶节点指定的区域, 是该节点的预测输出,
  • 是节点数量。
  • 区域:
    • , 等等。
  • 对于分类输入,我们可以基于将特征 与该特征的每个可能值进行比较来定义分割,而不是与数值阈值比较。
  • 对于分类问题,叶节点包含类别标签的分布,而不仅仅是均值响应。

模型拟合

  • 最小化以下损失:

  • 它是不可微的
  • 找到数据的最优分割是NP完全问题
  • 标准做法是使用贪心过程,我们每次迭代地增加一个节点来生长树。
  • 三个流行的实现: CART, C4.5, 和 ID3。

正则化

  • 过拟合的危险:如果我们让树变得足够深,它可以在训练集上实现0错误(假设没有标签噪声),方法是将输入空间划分成足够小的区域,其中输出是恒定的。
  • 两种主要的防止过拟合方法:
    • 第一种是根据某些启发式规则停止树的生长过程,例如节点样本过少,或达到最大深度。
    • 第二种方法是将树生长到最大深度,不再可能进行分割,然后进行剪枝,将分割的子树合并回其父节点。

CART的优缺点

优点

  • 易于解释和可视化:树结构直观易懂
  • 处理能力强:轻松处理混合类型的输入(离散和连续)
  • 无需数据预处理:对单调变换不敏感,无需标准化
  • 自动特征选择:隐含进行变量筛选
  • 鲁棒性:对异常值相对稳健
  • 效率高:拟合速度快,可扩展到大型数据集
  • 处理缺失值:能处理缺失的输入特征

缺点

  • 准确性受限:由于贪心算法的性质,预测精度不如其他复杂模型
  • 不稳定性:输入数据的细微变化可能导致树结构显著变化
  • 容易过拟合:尤其是树过深时

集成学习

  • 通过平均多个(回归)模型(或对分类器进行多数投票)来减少方差

    • 是第 个基础模型。
    • 集成将具有与基础模型相似的偏差,但更低的方差,通常能获得更好的整体性能
  • 对于分类器: 对输出进行多数投票。(这有时被称为委员会方法。)
    • 假设每个基础模型是一个二元分类器,准确率为 ,假设类别1是正确的类别。
    • 为第 个模型的预测
    • 为类别1的投票数
    • 我们将最终预测器定义为多数投票,即如果 则为类别1,否则为类别0。集成选择类别1的概率为:

Stacking

  • Stacking (stacked generalization): 通过以下方式组合基础模型

    • Stecking使用的组合权重需要在单独的数据集上训练,否则它们会将所有权重集中在表现最好的基础模型上
  • 举例:我们邀请不同专业背景的专家:

    数学老师:根据数学练习表现预测:76分  
    心理咨询师:根据学习态度和压力管理预测:72分  
    历史老师:根据学生逻辑推理能力预测:74分  
    

    最后,校长(元学习器)不直接评估学生,而是根据这三位专家的预测结果做出最终判断:

    校长:分析三位专家预测,考虑每位专家在不同类型学生上的准确率
    最终预测:75分  
    

集成学习vs.贝叶斯模型平均(BMA)

  • 集成考虑形式为以下的更大假设类

  • BMA使用

  • 关键区别
    • 在BMA的情况下,权重 和为1
    • 在无限数据的极限情况下,只会选择一个模型(即MAP模型)
    • 集成权重 是任意的,不会以这种方式折叠到单个模型

Bagging

  • bagging("bootstrap aggregating")
    • 是一种简单的集成学习形式,将不同的基础模型拟合到数据的不同随机抽样版本上
    • 鼓励不同的模型做出多样化的预测
    • 数据集是有放回抽样的(bootstrap sampling)
    • 一个给定的样本可能出现多次,直到我们每个模型有共计 个样本(其中 是原始数据点的数量)。
  • 举例:想象有5位老师,每位老师都使用相同的判断方法,但只能看到班上随机80%的学生的历史成绩和学习情况(有放回抽样):
    老师A:基于自己看到的80%学生数据预测:平均75分  
    老师B:基于不同的80%学生数据预测:平均73分  
    老师C:基于不同的80%学生数据预测:平均78分  
    ...  
    最终预测:所有老师预测分数的平均值 = 75分  
    
  • Bootstrap的缺点

    • 每个基础模型平均只“看到了”63%的唯一输入样本。
    • 没有被特定基础模型使用的37%的训练实例被称为袋外实例(out-of-bag,oob)。
    • 我们可以使用基础模型在这些oob实例上的预测性能作为测试集性能的估计。
    • 这提供了交叉验证的有用替代方案。
  • Bootstrap的主要优点是它防止集成过度依赖任何单个训练样本,从而增强鲁棒性和泛化能力。

  • Bagging并不总是能提高性能。特别是,它依赖于基础模型是不稳定的估计器(决策树),这样忽略一些数据就会显著改变得到的模型拟合结果。

随机森林(Random forests)

  • 随机森林: 基于随机选择的输入变量子集(在树的每个节点处)以及随机选择的数据样本子集来学习树。
  • 特点
    • 基于随机选择的输入变量子集和数据子集学习树
    • 每个节点随机选择特征子集进行分裂
  • 优点
    • 高性能:通常比单纯的装袋决策树效果更好
    • 适用于高维数据:特别适合特征数量多的情况
    • 无需交叉验证:使用OOB样本评估性能
    • 鲁棒性强:受噪声影响小
  • 缺点
    • 可解释性降低
    • 计算开销比单个决策树大
  • 图中显示随机森林比装袋决策树效果好得多,因为许多输入特征是不相关的。
  • 举例:随机森林是Bagging的特殊版本。5位老师不仅看不同的学生样本,而且每次只考虑部分评分因素:
    老师A:只看80%学生的出勤率和作业完成情况  
    老师B:只看80%学生的课堂参与度和小测成绩  
    老师C:只看80%学生的预习情况和课外阅读  
    ...  
    最终预测:所有老师预测的平均值  
    

提升法(Boosting)

  • 无论是通过装袋还是随机森林算法拟合的树集成,对应的模型形式为

  • 是第 棵树
  • 是相应的权重,通常设置为
  • 加法模型:通过允许 函数为一般函数逼近器(如神经网络)而不仅仅是树来泛化这一模型。
  • 我们可以将其视为具有自适应基函数的线性模型。目标仍然是最小化经验损失(带有可选的正则化器):

  • 举例:现在有一组老师依次评估:
    老师A:给全班预测成绩,但对某些学生预测错误较大  
    老师B:专门关注老师A预测不准的学生,并给出新预测  
    老师C:专门关注老师A和B组合后仍预测不准的学生  
    ...  
    最终预测:所有老师的预测加权组合,后面老师意见权重较小  
    
  • 每位老师都在修正前任老师的"错误",特别关注难以预测的学生。
  • 提升法是一种顺序拟合加法模型的算法,其中每个 是一个返回 的二元分类器。

    • 首先在原始数据上拟合
    • 根据 产生的错误给数据样本赋予权重,使得错误分类的样本获得更多权重
    • 在这个加权数据集上拟合
    • 不断重复这个过程,直到我们拟合了所需数量 的组件。
  • 只要每个 的准确率优于随机猜测(即使是在加权数据集上),最终的分类器集成将比任何单一组件具有更高的准确率。

    • 如果 是一个弱学习器(所以它的准确率仅略高于
    • 我们可以通过上述程序提升其性能,使最终的 成为一个强学习器。
  • 提升法、装袋法和随机森林

    • 提升法通过拟合相互依赖的树来减少强学习器的偏差
    • 装袋法和随机森林通过拟合独立的树来减少方差
    • 在许多情况下,提升法可以表现得更好

提升算法的优缺点

  • AdaBoost

    • 指数损失函数
      • 对误分类样本赋予指数增加的权重
    • 优点:通常提供高准确率,可将弱学习器提升为强学习器
    • 缺点:对异常值敏感,容易过拟合
  • 梯度提升

    • 在函数空间中执行梯度下降
    • 使用弱学习器近似负梯度信号
    • 优点:高准确率,可处理各种损失函数
    • 缺点:训练较慢,需要仔细调参
  • XGBoost
    • 特点
      • 添加树复杂度正则化
      • 使用损失的二阶近似
      • 特征采样(类似随机森林)
      • 优化计算效率
    • 优点:高准确率,支持并行处理,内置正则化
    • 缺点:需要调整多个超参数,可解释性不如单一决策树

基于树的学习算法选择建议

基于数据规模

  • 小数据集:决策树或AdaBoost通常足够
  • 大数据集:随机森林或XGBoost更适合

基于问题复杂度

  • 简单问题:单个决策树可能已足够
  • 复杂问题:集成方法通常表现更好,尤其是XGBoost

基于可解释性需求

  • 高可解释性:选择决策树
  • 中等可解释性:随机森林
  • 低可解释性要求:XGBoost或其他提升方法

基于数据质量

  • 有噪声/异常值多的数据:随机森林更稳健
  • 高质量数据:提升方法可能效果最佳

基于计算资源

  • 计算资源有限:决策树或随机森林
  • 可并行计算:XGBoost
  • 资源充足:可尝试各种提升方法和它们的组合

特征特性考虑

  • 高维特征:随机森林特别适合
  • 特征间强相关:XGBoost可能表现更好
  • 混合类型特征:树基方法普遍适用

无监督学习(Unsupervised Learning)

When we’re learning to see, nobody’s telling us what the right answers are — we just look. Every so often, your mother says “that’s a dog”, but that’s very little information. You’d be lucky if you got a few bits of information — even one bit per second — that way. The brain’s visual system has 1014 neural connections. And you only live for 109 seconds. So it’s no use learning one bit per second. You need more like 105 bits per second. And there’s only one place you can get that much information: from the input itself.

--- Geoffrey Hinton, 1996


  • 无监督学习:输入无任何相应的输出
  • 问题
    • 是否有能够突出数据蕴含信息的可视化方案?
    • 我们能否从数据中识别出有意义的分组或模式?
  • 任务:拟合 形式的无条件模型
  • 挑战:分析往往更加主观;分析没有简单明确的目标

降维算法:主成分分析(PCA)


  • 如何可视化高维数据?(鸢尾花分类示例)
    • 具有少量特征的表格数据:成对图表
    • 高维数据:先进行降维,然后在2d或3d中可视化数据
    • PCA的核心思想:寻找数据集的低维表示,尽可能多地包含原始数据的变异

样本在低维线性子空间的投影示例

  • 2d 1d
  • 人脸识别(64*64d 3d)

详细示例

  • 一组(p维)特征
  • 第一主成分

    • 是具有最大方差的特征的归一化线性组合
    • 第一主成分载荷向量,
  • 第二主成分

    • 在所有与 不相关的线性组合中具有最大方差
  • 对于特定点

  • 最具信息量的方向:

主成分的另一种解释:最接近观测值的低维超平面

  • 对第 个观测 的最佳 维近似(以欧氏距离衡量)

  • 优化问题

  • 目标函数的最小可能值是

解释方差比例(PVE)

  • 数据集中存在的总方差定义为

  • 个主成分解释的方差为

  • 个主成分的解释方差比例(PVE)

  • 数据的方差可以分解为前 个主成分的方差加上这个 维近似的均方误差,如下所示:

  • 我们可以将PVE解释为由前 个主成分给出的 近似的

编程:可视化


import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape

# 从64维降至2维
pca = PCA(2)
projected = pca.fit_transform(digits.data)

# 可视化
plt.scatter(
  projected[:, 0], projected[:, 1],
  c=digits.target, edgecolor='none', alpha=0.5,
  cmap=plt.cm.get_cmap('Spectral', 10))
plt.xlabel('component 1')
plt.ylabel('component 2')
plt.colorbar();

聚类算法:K-Means聚类

  • 将数据集划分为K个不同的、不重叠的聚类。
  • 表示包含每个聚类中观测索引的集合。这些集合满足两个性质:
      1. 。换句话说,每个观测至少属于K个聚类中的一个。
      1. 对所有 。换句话说,聚类不重叠:没有观测属于多个聚类。
  • 核心思想
    • 使聚类内变异尽可能小

    • 聚类内变异

主成分回归(PCR):基本概念


  • PCR是结合 主成分分析(PCA) 与标准回归的技术
  • 两阶段方法:
    • 第一阶段:使用PCA降维
    • 第二阶段:对选定的主成分进行回归
  • 解决多重共线性和高维数据问题
  • 特别适用于处理大量相关预测变量的情况

主成分回归(PCR):数学原理与实现步骤

步骤一:标准化

  • 中心化和缩放预测变量矩阵X

步骤二:PCA转换

  • 计算协方差矩阵:
  • 求解特征向量和特征值:
  • 数据转换:,其中V包含特征向量

步骤三:主成分回归

  • 选择k个主成分:
    • 拟合回归模型:
    • 转换回原始空间:
  • 实现步骤

    1. 预处理:标准化/归一化预测变量
    2. PCA:对预测变量执行主成分分析
    3. 组件选择:确定最佳主成分数量
      • 基于解释方差
      • 交叉验证方法
    4. 回归:使用选定的主成分进行回归
    5. 转换:将系数转换回原始变量空间(如需要)
    6. 预测:使用模型对新数据进行预测

主成分回归(PCR): 优缺点

  • 优点
    • 处理多重共线性:消除预测变量间的相关性
    • 降维:适用于高维数据
    • 降噪:通过移除低方差成分过滤噪声
    • 计算效率:可以简化多预测变量的建模过程
    • 缺失数据处理:对某些缺失数据模式具有鲁棒性
    • 可解释性:可以揭示数据的潜在结构
  • 缺点
    • 主成分解释性:主成分可能难以解释
    • 无监督特性:PCA在创建主成分时不考虑响应变量
    • 信息损失:丢弃主成分可能移除有用信息
    • 参数调优:选择最佳主成分数量可能具有挑战性
    • 对异常值敏感:PCA可能受异常值影响较大
    • 线性假设:假设数据存在线性关系

主成分回归(PCR):与其他方法比较

方法 方法特点 是否考虑Y进行转换? 最佳应用场景
PCR 使用PCA后回归 多个相关预测变量
PLS 创建与Y相关的成分 当Y应引导降维时
岭回归 收缩所有系数 当所有预测变量都应保留
Lasso 将部分系数收缩至零 需要特征选择时

机器学习算法选择

Variables Supervised
(Target Variable)
Unsupervised
(No Target Variable)
Continuous Regression
• Linear; Penalized
Regression/LASSO
• Logistic
• Classification and
Regression Tree (CART)
• Random Forest
Dimensionality Reduction
• Principal Components
Analysis (PCA)
Clustering
• K-Means
• Hierarchical
Categorical Classification
• Logit
• Support Vector Machine (SVM)
• K-Nearest Neighbor (KNN)
• Classification and
Regression Tree (CART)
Dimensionality Reduction
• Principal Components
Analysis (PCA)
Clustering
• K-Means
• Hierarchical
Continuous or
Categorical
Neural Networks
Deep Learning
Reinforcement Learning
Neural Networks
Deep Learning
Reinforcement Learning

- **The probabilistic approach** - treat all unknown quantities as random variables - it is the optimal approach to decision making under uncertainty <br> >Almost all of machine learning can be viewed in probabilistic terms, making probabilistic thinking fundamental. It is, of course, not the only view. But it is through this view that <font color="red">we can connect what we do in machine learning to every other computational science, whether that be in stochastic optimisation, control theory, operations research, econometrics, information theory, statistical physics or bio-statistics.</font> For this reason alone, mastery of probabilistic thinking is essential. <p align="right">---Shakir Mohamed, DeepMind<p>

<img src="https://scikit-learn.org/stable/_images/grid_search_workflow.png" width=150%>

--- <div align="center"> <table rules="none"> <tr> <td> <div style="width: 300"> ### 聚类(Clustering) - 在数据中查找**聚类**:将输入划分为包含“相似”点的区域。 </div> </td> <td> <div style="width: 500pt"> <img align="center" style="padding-right:10px;" width=100% src="../myfig/L01/L01-clustering.png"> </div> </td> </tr> </table> </div>

--- ## 7. Python实现案例:基础实现 ```python # PCR基础实现 from sklearn.decomposition import PCA from sklearn.linear_model import LinearRegression from sklearn.pipeline import make_pipeline from sklearn.preprocessing import StandardScaler import numpy as np import matplotlib.pyplot as plt # 创建管道 pcr_model = make_pipeline( StandardScaler(), PCA(n_components=5), # 选择主成分数量 LinearRegression() ) # 拟合模型 pcr_model.fit(X_train, y_train) # 预测 predictions = pcr_model.predict(X_test) ``` --- ## 7. Python实现案例:组件选择 ```python # 使用交叉验证选择最佳主成分数量 from sklearn.model_selection import cross_val_score from sklearn.metrics import mean_squared_error # 测试不同的主成分数量 n_components = range(1, X.shape[1] + 1) cv_scores = [] for n in n_components: pcr_model = make_pipeline( StandardScaler(), PCA(n_components=n), LinearRegression() ) # 使用交叉验证评估性能 scores = -cross_val_score(pcr_model, X, y, cv=5, scoring='neg_mean_squared_error') cv_scores.append(scores.mean()) # 绘制结果 plt.figure(figsize=(10, 6)) plt.plot(n_components, cv_scores, marker='o') plt.xlabel('主成分数量') plt.ylabel('MSE') plt.title('PCR: 主成分数量与MSE关系') ``` --- ## 7. Python实现案例:完整示例 ```python # 完整PCR实现示例 import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.preprocessing import StandardScaler from sklearn.decomposition import PCA from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split, cross_val_score from sklearn.metrics import mean_squared_error, r2_score # 1. 加载数据并划分 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 2. 标准化 scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) # 3. PCA pca = PCA() X_train_pca = pca.fit_transform(X_train_scaled) # 4. 检查累积方差 explained_variance = pca.explained_variance_ratio_ cumulative_variance = np.cumsum(explained_variance) optimal_n = np.argmax(cumulative_variance >= 0.95) + 1 # 解释95%方差所需的成分数 # 5. 使用选择的组件数构建模型 pca = PCA(n_components=optimal_n) X_train_pca = pca.fit_transform(X_train_scaled) X_test_pca = pca.transform(X_test_scaled) # 6. 拟合回归模型 regressor = LinearRegression() regressor.fit(X_train_pca, y_train) # 7. 预测 y_train_pred = regressor.predict(X_train_pca) y_test_pred = regressor.predict(X_test_pca) # 8. 评估模型 train_mse = mean_squared_error(y_train, y_train_pred) test_mse = mean_squared_error(y_test, y_test_pred) test_r2 = r2_score(y_test, y_test_pred) print(f"使用的主成分数: {optimal_n}") print(f"训练集MSE: {train_mse:.4f}") print(f"测试集MSE: {test_mse:.4f}") print(f"测试集R²: {test_r2:.4f}") ```