预测模型及超参数:2.传统机器学习:PLS及其改进
把PLS与SVR、KNN统一归为传统机器学习并不严谨,但是符合模型的复杂程度。继续该系列第一篇的例子,我们来探讨一下PLS及其改进方法。
一、原始PLS
我们经营着一家水果商店,目标是根据水果的外观(如形状、颜色、大小等特征)预测水果的甜度(一个连续值,比如 0 到 10)。为了实现这个目标,我们采集了大量水果的光谱数据(比如 1024 个波长的反射率),但面临以下问题:
- 特征维度太高:我们记录了 1024 个波长特征,但实际样本数量只有 100 个,特征比样本多得多。
- 特征间高度相关:很多波长的数据可能高度相关(比如相邻波长的反射率非常相似),导致传统的回归算法(如线性回归)失效。
- 目标变量的解释性不足:我们不知道哪些波长对甜度的影响最大。
在这种情况下,偏最小二乘回归(PLS) 是一个非常合适的选择。PLS 模型可以同时解决高维问题和特征间的多重共线性问题。
PLS 的核心思想是:
从原始特征中提取少量的“潜在变量”,这些变量不仅能代表原始数据的主要信息,还与目标变量(甜度)高度相关。
- 这些潜在变量是原始特征的线性组合,用数学公式表示为:T=XW
其中,T是提取出的潜在变量矩阵,X是原始特征矩阵,W 是线性组合的权重矩阵。
- 提取出潜在变量后,我们在低维空间中建立一个线性回归模型,用来预测目标变量 Y:Y≈TQ
其中,Q是回归系数矩阵。
这一过程既保留了原始特征的重要信息,又增强了它们与目标变量的关联性。
模型的超参数解释:
1. n_components(潜在变量数量)
- 作用:决定从原始特征中提取多少个潜在变量。
- 通俗解释:
假设我们记录了 1024 个特征,n_components 决定提取出几个与甜度高度相关且能代表原始特征的潜在变量。比如:- 如果 n_components=2,模型会提取出 2 个潜在变量,这 2 个变量是 1024 个特征的线性组合,与甜度高度相关。
- 如果 n_components=10,模型会提取出 10 个潜在变量。
- 数学性解释:
- 每个潜在变量 ti的计算公式为:ti=Xwi 。其中,ti是第 i个潜在变量,wi是特征的投影方向向量。
- PLS 模型通过找到 wi,确保提取的潜在变量既能解释特征矩阵 X的主要信息,又能最大程度地关联目标变量 Y。
- 取值范围:
- ncomponents的最大值为特征数量或样本数量的较小值。
- 常见取值为 2-10,取值太大会导致过拟合。
- 如何选择:
- 如果 ncomponents太小,模型可能无法充分解释数据(欠拟合)。
- 如果 ncomponents 太大,模型可能包含冗余信息(过拟合)。
在水果商店的例子中:
假设我们设置 n_components=2,这意味着模型会提取出两个关键潜在变量,比如:
- 第 1 个潜在变量可能代表水果的整体颜色。
- 第 2 个潜在变量可能代表水果的光泽度。
这两个变量既减少了维度,又与甜度高度相关。
二、KPLS
核偏最小二乘回归(KPLS)引入了非线性映射的能力,通过核技巧对数据进行高维投影,使得模型能够捕捉到复杂的非线性关系,同时继承了 PLS 在处理高维数据和特征共线性问题上的优势。
KPLS 相比 PLS 的改进:
1. 从线性到非线性
- PLS 的限制:PLS 提取潜在变量(latent variables)时假设数据之间的关系是线性的,这在水果甜度的预测中可能无法满足实际需求。
- KPLS 的改进:通过核函数(Kernel Function),KPLS 将原始特征映射到一个隐式的高维空间(特征空间),在高维空间中提取潜在变量,从而捕捉非线性关系。
2. 核函数带来的灵活性
- 非线性映射:KPLS 使用核矩阵 K代替原始特征矩阵 X,从而不需要显式地计算高维空间中的特征,而是通过核函数直接计算特征之间的相似度。
- 适应复杂问题:例如,水果的光谱数据可能与甜度呈现复杂的非线性关系(如某些波长的联合作用),KPLS 的核技巧可以很好地捕捉这种非线性。
3. 对小样本适应性更强
- 在样本数量较少(如 100 个水果样本)而特征维度较高(如 1024 个波长数据)时,KPLS 能通过核函数构造相关矩阵,有效规避维度灾难问题。
模型参数解析:
1. n_components(潜在变量数量)
- 作用:决定从核矩阵中提取的潜在变量(latent variables)的数量。
- 通俗解释:
在水果商店的例子中,假设我们有 1024 个特征。KPLS 会将原始数据映射到特征空间,并提取出数量为 n_components 的潜在变量。例如:- 如果 n_components=2,模型会提取出 2 个非线性的潜在变量,如:
- 第 1 个潜在变量可能代表水果的整体颜色对甜度的影响。
- 第 2 个潜在变量可能代表水果的光泽度或其它特征对甜度的影响。
- 如果 n_components=10,模型会提取出 10 个潜在变量,可能代表更复杂的特征组合。
- 如果 n_components=2,模型会提取出 2 个非线性的潜在变量,如:
- 通俗解释:
- 数学解释:
每个潜在变量 ti是核矩阵 K 的线性组合,且与目标变量 Y的相关性最大化。 - 取值范围:
- ncomponents ≤ min(样本数量,特征数量)。
- 通常设置为 2-10,以避免过拟合。
- 选择建议:
- 如果 n_components 太小,模型可能无法充分解释数据(欠拟合)。
- 如果 n_components 太大,模型可能会引入噪声(过拟合)。
2. gamma(核函数参数)
- 作用:控制核函数(如 RBF 核)的“带宽”,影响相似度的计算方式。
- 通俗解释:
gamma 决定两点之间的相似度随距离变化的速度。在水果商店中:- 如果 gamma 很大(如 0.1),即使波长反射率的差距很小,模型也会认为它们不相似。
- 如果 gamma 很小(如 0.0001),即使波长反射率差距很大,模型也可能认为它们相似。
- 数学解释:
对于 Radial Basis Function (RBF) 核函数,核矩阵的元素计算公式为:
K(xi,xj)=exp(−γ||xi−xj||2)
-
- γ 控制了两个样本之间的距离对相似度的影响。
- 取值范围:
- γ>0,通常在 10−5 到 10−1 之间。
- 使用对数尺度调整(如代码中的 log=True)。
- 选择建议:
- gamma 越大,模型越偏向于局部拟合(关注小范围相似性)。
- gamma 越小,模型越偏向于全局拟合(关注整体相似性)。
3. K_train 和 K_test(核矩阵)
- 作用:表示特征空间中样本之间的相似度。
- 通俗解释:
在水果商店中,核矩阵用于描述两个水果样本之间的“相似度”。例如:- 如果两个水果的光谱数据非常相似(即波长反射率的差别很小),核矩阵中的相应值会很高。
- 如果两个水果的光谱数据差别很大,核矩阵中的相应值会很低。
- 数学解释:
核矩阵 K的每一项表示样本 xi 和 xj之间的相似性:Kij=ϕ(xi)⋅ϕ(xj),ϕ(xi) 表示样本 xi 的非线性映射。
4. dualpls(KPLS 的核心回归步骤)
- 作用:在核空间中提取潜在变量,并进行回归。
- 过程解释:
- 使用核矩阵 K提取潜在变量 τ,通过对 K进行迭代更新,使目标变量 Y 的残差逐渐减小。
- 输出的回归系数 α 用于预测目标值。
- 改进之处:
- 在核空间中执行 PLS 计算,能够捕捉复杂的非线性关系。
三、NNPLS
在处理高维光谱数据和复杂非线性关系时,传统的线性模型(如PLS)和非线性扩展模型(如KPLS)都存在一定的局限性。为此,NNPLS(神经网络偏最小二乘回归) 将神经网络引入到偏最小二乘回归中,用以更全面地捕捉特征与目标之间的复杂非线性关系,一般引入的神经网络就是简单的两层全连接。
1、核心参数
1. hidden_layer_1 和 hidden_layer_2(隐藏层神经元数量)
作用:控制神经网络的结构复杂度。
通俗解释:
第一隐藏层(hidden_layer_1)可以看作是“水果特征提取器”,通过学习原始特征(如
光谱波长的组合)来提取重要的非线性特征。
第二隐藏层(hidden_layer_2,可选)是“特征组合器”,进一步将隐藏特征进行组合。若设置为 0,表示只使用单层网络。
与PLS和KPLS的区别:
PLS 和 KPLS 都通过固定的线性方法提取潜在变量,而 NNPLS 灵活地通过神经网络学习非线性特征,可适应更复杂的模式。
建议取值:
hidden_layer_1:在 10 到 200 之间,值越大越复杂。
hidden_layer_2:在 0 到 200 之间,如果关系较复杂,可考虑使用双层。
2. activation(激活函数)
作用:控制神经网络每一层的输出如何映射到下一层,决定非线性的表达能力。
通俗解释:
激活函数决定了神经网络“理解”水果特征的方式:
identity:纯线性映射,相当于传统的线性回归。
logistic:S型映射,适用于数据关系较平滑的场景。
tanh:强化非线性相关性,适用于数据分布较复杂的场景。
relu:对正值敏感,计算高效,适用于大数据集。
与PLS和KPLS的区别:
PLS 是完全线性模型,KPLS 虽然可以通过核函数映射到非线性空间,但核函数形式是固定的。而 NNPLS 通过激活函数对非线性关系进行动态调整。
建议取值:根据数据分布选择,通常 relu 是默认推荐值。
3. solver(优化算法)
作用:控制神经网络的权重更新方式,影响训练收敛速度和结果稳定性。
通俗解释:
lbfgs:一种优化方法,适合小数据集,计算速度快。
sgd:随机梯度下降法,适合大数据集,但可能需要更多迭代来收敛。
adam:自适应优化方法,适合大多数场景,综合表现较好。
与PLS和KPLS的区别:
PLS 和 KPLS 使用的都是固定的线性或核回归方法,而 NNPLS 的优化方式更加灵活,可根据数据规模和复杂度选择不同算法。
建议取值:若不确定,推荐使用 adam。
4. max_iter(最大迭代次数)
作用:限制神经网络的训练次数,避免过长时间的计算。
通俗解释:
就像告诉水果研究员:“最多尝试这么多次,超过了就停止。” 如果限制太低,可能导致训练未完成;但设置过高又可能浪费时间。
与PLS和KPLS的区别:
PLS 和 KPLS 的训练过程通常较快,而 NNPLS 的训练复杂度较高,迭代次数可能显著影响训练结果。
建议取值:在 100 到 1000 之间,视数据复杂度而定。
NNPLS 参数总结表:
参数名 | 模型 | 通俗解释 | 取值范围 |
hidden_layer_1 | NNPLS | 第一层隐藏层的神经元数量,相当于“水果特征提取器”,提取复杂非线性特征。 | 10-200,步长为 10 |
hidden_layer_2 | NNPLS | 第二层隐藏层的神经元数量,相当于“特征组合器”,进一步组合之前提取的隐藏特征。可选,值为 0 时不启用第二层。 | 0-200,步长为 10 |
activation | NNPLS | 激活函数,决定每层输出如何映射到下一层,控制模型的非线性表达能力。 | ['identity', 'logistic', 'tanh', 'relu'] |
solver | NNPLS | 优化算法,用于更新神经网络的权重,影响训练的收敛速度和结果稳定性。 | ['lbfgs', 'sgd', 'adam'] |
max_iter | NNPLS | 最大迭代次数,限制模型训练的尝试次数,避免训练时间过长。 | 100-1000 |
原始PLS及其改进的KPLS和NNPLS的严格推导如下视频,有兴趣的可以看看
PLS及改进方法的原理与超参数