数据挖掘中特征发现与特征提取的数学原理

好的,我将深入研究数据挖掘中特征发现与特征提取的数学原理,涵盖统计学基础、特征工程的数学方法、以及在机器学习和深度学习中的应用。

我会整理相关数学公式和理论,包括主成分分析(PCA)、独立成分分析(ICA)、线性判别分析(LDA)、信息增益、互信息、方差分析等统计方法,并结合金融量化交易的实际应用,确保内容既有理论深度,又能落地实践。

完成后,我会通知您!

1. 统计学基础:描述性统计、方差分析、相关性与信息理论

在特征工程中,统计学方法提供了基础工具来理解数据分布和变量关系,从而指导特征的发现与选择。

  • 描述性统计与方差(Variance):描述性统计指标(如均值、标准差、偏度、峰度等)刻画了特征的数据分布形态,有助于发现异常值和数据尺度差异。例如,方差衡量数据的离散程度,可用来评估特征是否具有辨别力。方差分析(ANOVA)进一步用于比较多个组的均值差异是否显著。当特征为类别时,可通过单因素ANOVA检验不同类别的目标均值是否存在显著差异,从而判断该特征对区分目标的重要性。ANOVA 的F检验统计量定义为组间方差与组内方差之比,如果某特征按目标分类产生显著不同的均值,其F值会较大,p值较小(低于显著性水平),表示该特征对区分目标有统计学显著性。

  • 皮尔逊相关系数(Pearson Correlation) :相关系数衡量两个变量间的线性相关程度,取值范围[-1,1]。在特征工程中,皮尔逊相关系数常用于筛选与目标变量强相关的特征,或检测特征之间的多重共线性。其计算公式为 r X Y = Cov ( X , Y ) σ X σ Y r_{XY}=\frac{\text{Cov}(X,Y)}{\sigma_X\sigma_Y} rXY=σXσYCov(X,Y),反映特征X与Y线性关系的强弱。绝对值接近1表示强相关(正相关或负相关),接近0表示线性独立。需要注意相关不代表因果,但高相关的特征往往对预测有用。然而若两个特征之间相关性极高(例如 ∣ r ∣ > 0.9 |r|>0.9 ∣r∣>0.9),则可能冗余,可酌情删除其一以减少共线性。

  • 熵(Entropy)与互信息(Mutual Information) :熵是信息的不确定性度量,定义为 H ( X ) = − ∑ x p ( x ) log ⁡ p ( x ) H(X) = -\sum_{x} p(x)\log p(x) H(X)=−∑xp(x)logp(x)。熵越大,变量越不确定。互信息衡量两个变量之间信息的共享程度,公式为 I ( X ; Y ) = H ( X ) + H ( Y ) − H ( X , Y ) I(X;Y) = H(X)+H(Y) - H(X,Y) I(X;Y)=H(X)+H(Y)−H(X,Y)。互信息数值越大,表示知道一个变量可以更大程度地减少对另一个变量的不确定性 (Mutual Information - Kaggle)。在特征选择中,我们可计算特征与目标之间的互信息,互信息高的特征说明包含较多有关目标的信息 (Mutual Information - Kaggle)。例如,对于分类问题,计算每个候选特征与类别标签的互信息值,选择互信息最高的若干特征作为备选。信息增益(Information Gain)是互信息在决策树中的应用,定义为划分数据集前后的熵差: I G ( D , A ) = H ( D ) − H ( D ∣ A ) \mathrm{IG}(D,A)=H(D)-H(D\mid A) IG(D,A)=H(D)−H(D∣A) (An Incremental Majority Voting approach for Intrusion Detection ...)。信息增益大的特征在决策树中优先作为分裂节点,因为它最大程度减少了数据的不确定性 (An Incremental Majority Voting approach for Intrusion Detection ...)。熵和互信息属于非参数方法,对捕捉非线性关系特别有用。

2. 特征选择的数学方法

特征选择旨在从原始特征集中挑选出最有用的子集,以提高模型的性能和可解释性。主要有基于线性代数、统计检验和机器学习的多种方法:

  • 线性代数方法

    • 主成分分析(PCA) :PCA是一种无监督线性降维方法,通过正交线性变换将原始特征映射到新的特征子空间。PCA的数学原理是对数据的协方差矩阵做特征分解,找到其特征向量和特征值。特征向量(主成分)对应数据最大的方差方向,特征值则表示沿该方向的方差大小 (Principal Component Analysis) (Principal Component Analysis)。通过选择最大 k k k个特征值对应的特征向量作为投影基底,就构造了一个保留最多信息的 k k k维子空间 (Principal Component Analysis)。公式上,第一个主成分 w 1 \mathbf{w}_1 w1是使得方差最大化的单位向量: w 1 = arg ⁡ max ⁡ ∣ ∣ w ∣ ∣ = 1 V a r ( w T X ) \mathbf{w}1=\arg\max{||\mathbf{w}||=1} \mathrm{Var}(\mathbf{w}^T X) w1=argmax∣∣w∣∣=1Var(wTX)。这一优化可转换为协方差矩阵 Σ \Sigma Σ的特征值问题: Σ w = λ w \Sigma \mathbf{w} = \lambda \mathbf{w} Σw=λw,解的 w \mathbf{w} w即特征向量。PCA找到的主成分彼此正交、不相关,常用于降维和去除共线性 (Principal Component Analysis)。PCA本质上忽略了样本的类别信息,只关注数据整体分布的方差结构 (Principal Component Analysis)。在金融领域,PCA常用来提取整体市场因子:例如对资产收益率矩阵做PCA,第一主成分常对应"市场因子",其特征值大小表示解释的方差比例(信息量)。

    • 独立成分分析(ICA) :ICA也是线性降维方法,但与PCA最大化方差不同,ICA追求分离出统计上彼此独立的信号成分。数学上,ICA假设观测数据 x \mathbf{x} x是若干独立源信号 s \mathbf{s} s通过线性混合得到: x = A s \mathbf{x}=A\mathbf{s} x=As,ICA试图求出解混矩阵 W ≈ A − 1 W\approx A^{-1} W≈A−1使得 u = W x \mathbf{u}=W\mathbf{x} u=Wx成为彼此独立的成分。由于仅凭二阶统计量(协方差)无法度量高阶独立性,ICA利用非高斯性 作为独立的判据(中心极限定理表明混合信号趋向于高斯分布,而源信号若明显偏离高斯则更可能相互独立)。常用方法包括最大化峭度(kurtosis)或熵的逼近(如负熵)。总之,ICA通过优化使得提取的分量彼此独立且尽可能非高斯 (Independent component analysis: recent advances - PMC)。与PCA相比,ICA能分离出隐藏因素(例如语音信号分离中的不同说话人信号)。在特征工程中,ICA可用于金融数据的因子分解,将资产收益拆解为独立因子,有助于风险因子的提取。如果独立成分对应某种市场异常(如某交易策略收益),则可将其作为交易因子。

    • 线性判别分析(LDA) :LDA是一种有监督的降维与特征选择方法,目标是投影到一条直线(或低维子空间)上使得不同类别之间的均值差异相对于类内方差最大 (Linear Discriminant Analysis (LDA), Maximum Class Separation!) (8.3 Fisher's linear discriminant rule | Multivariate Statistics)。以二分类为例,Fisher判别分析定义投影方向 w \mathbf{w} w优化准则: J ( w ) = w T S B w w T S W w J(\mathbf{w}) = \frac{\mathbf{w}^T S_B \mathbf{w}}{\mathbf{w}^T S_W \mathbf{w}} J(w)=wTSWwwTSBw,其中 S B S_B SB是类别间散布矩阵, S W S_W SW是类别内散布矩阵。最大化该比值可通过广义特征值问题求解: S W − 1 S B w = λ w S_W^{-1}S_B\mathbf{w}=\lambda \mathbf{w} SW−1SBw=λw。解得的顶几个 w \mathbf{w} w即判别特征方向。LDA与PCA的区别在于:PCA不使用类别信息,只关注整体方差,而LDA利用类别标签信息,寻找最能区分类别的投影方向 (Principal Component Analysis) (Linear Discriminant Analysis)。因此在分类任务的特征降维上,LDA往往比PCA更有效。当特征服从高斯分布且类别方差相同假设成立时,LDA也是贝叶斯最优的线性分类器。实践中,若数据满足近似线性可分,LDA投影能显著提高分类器性能。例如,在金融信用风控中,可用LDA将多维财务指标压缩成一维评分,以最大化好坏客户的区分度。

  • 统计学方法

    • 信息增益(Information Gain) :前述信息增益是用于特征选择的典型指标,尤其在基于熵的决策树中应用广泛。信息增益定义为选择特征A进行划分后熵的降低量 : I G ( D , A ) = H ( D ) − H ( D ∣ A ) \mathrm{IG}(D,A) = H(D) - H(D\mid A) IG(D,A)=H(D)−H(D∣A) (An Incremental Majority Voting approach for Intrusion Detection ...)。这里 H ( D ) H(D) H(D)是数据集D的熵, H ( D ∣ A ) H(D|A) H(D∣A)是按特征A划分后的条件熵(即加权平均熵)。信息增益等价于互信息 I ( A ; Target ) I(\text{A}; \text{Target}) I(A;Target),数值越大表示使用特征A可以带来越大的纯度提升 (An Incremental Majority Voting approach for Intrusion Detection ...)。决策树算法(如ID3/C4.5)在每个节点选择信息增益最高的特征分裂 (An Incremental Majority Voting approach for Intrusion Detection ...),这相当于一次次选择最有辨别力的特征。对于特征工程,我们可以单独计算每个特征对目标的IG,来排序特征的重要性。需要注意信息增益对偏好取值较多的特征(因为细分后熵降低更明显),因此演化出了信息增益比等变体进行校正。

    • 卡方检验(Chi-square) :卡方检验用于评估分类特征与类别标签 之间的独立性。对于分类任务,把特征离散化后可构建列联表,卡方统计量计算为 χ 2 = ∑ ( O − E ) 2 E \chi^2=\sum \frac{(O - E)^2}{E} χ2=∑E(O−E)2,衡量观察频数(O)偏离独立假设下期望频数(E)的程度。如果特征的取值分布在不同类别上有显著差异,卡方统计量会较高,对应很小的独立性 p p p值,表示特征和类别并非独立 (How exactly does Chi-square feature selection work?)。例如,假设我们有特征A(取值a1,a2,...)和目标类别Y(取值y1,y2),可计算每种组合(a_i,y_j)的频数,进而算出 χ 2 \chi^2 χ2值并与临界值比较。如果 χ 2 \chi^2 χ2显著超出阈值(对应 p < 0.05 p<0.05 p<0.05),则拒绝独立性假设,说明特征A对区分Y有贡献 (How exactly does Chi-square feature selection work?)。在特征选择中,我们可以对每个候选特征进行卡方检验,选择那些 p p p值很小的特征。常用于文本分类中选择与类别显著相关的词汇特征等。Sklearn提供了chi2方法计算卡方分数 (chi2 --- scikit-learn 1.6.1 documentation)。需要注意卡方检验要求期望频数不要过低,否则结果不可靠。

    • 方差分析(ANOVA)和F检验 :ANOVA前面提到可用于比较多组均值差异,对于二分类问题,ANOVA退化为t检验(F检验)比较正负两类样本在某连续特征上的均值是否有显著差异。Sklearn实现中,f_classif函数计算每个连续特征对分类目标的F值 (f_classif --- scikit-learn 1.6.1 documentation)。高F值(对应低 p p p)的特征意味着不同类别之间均值差距大,可能是好的判别特征。例如在股票涨跌(二分类)预测中,如果特征"过去5日收益率"在上涨天和下跌天之间均值差异显著,经F检验 p < 0.01 p<0.01 p<0.01,则该特征有助于分类。同样地,在回归问题中也可对每个特征做F检验(意义等价于检验该特征的回归系数是否显著非零)。这些统计检验假设数据满足正态和方差齐性等条件,否则需谨慎解释结果。

  • 机器学习方法

    • L1/L2正则化 :在回归和分类模型中,正则化通过在损失函数中加入参数范数惩罚来收缩模型系数,从而实现特征选择或降低过拟合。L1正则化(Lasso)使用 L 1 L1 L1范数惩罚 λ ∑ i ∣ w i ∣ \lambda\sum_i |w_i| λ∑i∣wi∣,几何上对应参数空间的菱形约束,倾向于产生稀疏解 ,即将一些权重推到精确的0 (The difference between L1 and L2 regularization)。因此L1正则可以实现内嵌的特征选择:被赋予0权重的特征可视为被模型剔除了 (The difference between L1 and L2 regularization)。L2正则化(Ridge)使用 L 2 L2 L2惩罚 λ ∑ i w i 2 \lambda\sum_i w_i^2 λ∑iwi2,对应圆形约束,会均匀收缩权重但通常不会使任何权重恰为0 (The difference between L1 and L2 regularization)。因此L2主要是防止过拟合和处理多重共线性 (The difference between L1 and L2 regularization)。实践中,Lasso常用于从高维稀疏特征(如基因数据、文本词袋)中选择有效特征,而Ridge在特征数量多于样本数的情况下稳定模型、防止系数不稳。还有弹性网(Elastic Net)结合L1和L2的优点。在金融因子选取中,Lasso回归可用于从大量候选技术指标中筛选出最有预测力的一小部分因子。下例演示使用L1正则的逻辑回归进行特征选择:
    python 复制代码
    import numpy as np
    from sklearn.linear_model import LogisticRegression
    
    # 假设我们有100个特征的合成数据,其中只有前10个是真正有用的
    X = np.random.randn(500, 100)
    true_coef = np.zeros(100); true_coef[:10] = 1.0  # 前10个特征对y有影响
    y_prob = 1/(1+np.exp(-X.dot(true_coef)))         # 根据sigmoid生成概率
    y = (y_prob > 0.5).astype(int)                   # 二分类标签
    
    # 使用带L1正则的逻辑回归(C为正则强度倒数)
    model = LogisticRegression(penalty='l1', solver='liblinear', C=0.1)
    model.fit(X, y)
    print("非零特征个数:", np.sum(model.coef_ != 0))
    print("模型系数(前20维):", model.coef_[0,:20])

    *示例说明:*上例中仅10个特征真实相关。训练带L1正则的逻辑回归后,大部分无关特征的系数被压缩为0,非零特征数接近10。这验证了L1正则自动执行了特征选择。相比之下,如果将penalty='l2',则几乎所有系数都会是非零但数值较小。

    • 决策树及树模型的特征重要性 :决策树/随机森林等树模型能够依据训练自动给出特征的重要性评分。通常的计算方式是基于节点纯度的降低 (如基尼不纯度或信息增益)。直观来说,特征的重要性等于以该特征作为分裂所带来的损失函数减少总和 ,在随机森林中再取平均 (machine learning - Interpreting Decision Tree in context of feature importances - Data Science Stack Exchange)。Scikit-learn 中每棵树的feature_importances_即基于规范化的纯度减少总量 (machine learning - Interpreting Decision Tree in context of feature importances - Data Science Stack Exchange)(也称"基尼重要度")。值越高表示该特征在树模型决策中贡献越大。需要注意,树模型的重要性有偏向高基数特征和分裂较多的特征的倾向,解释时应结合业务。尽管如此,在实践中随机森林的重要性经常用于初步筛选变量。例如,在金融风险模型中训练随机森林预测违约率,然后根据特征重要性排名选择前N个因子构建更简单的模型。另一个更稳健的方法是Permutation Importance(基于置换的特征重要性),通过随机打乱某特征的值观察模型性能下降程度来评估其重要性。

    • 递归特征消除(RFE) :RFE是一种贪心的包裹式特征选择方法。其过程是:训练一个基学习器(如线性回归、SVM或树模型)→ 移除最不重要的特征 → 在剩余特征上重新训练模型 → 重复此过程直到达到预定特征数量。比如使用线性回归的RFE,每次移除绝对系数最小的特征;使用树模型的RFE则每次移除最不常用于分裂的特征。RFE通过多轮训练逐步淘汰特征,兼顾了特征之间的交互影响,往往比单次过滤的方法效果好。Sklearn提供了RFE类实现这一过程。需要注意RFE计算开销较大(每次迭代需重训模型),在高维数据上可能较慢。

3. 特征提取的数学方法

特征提取强调从原始数据中衍生新的特征表示,尤其在信号处理和非线性降维方面:

  • 信号处理方法

    • 傅里叶变换(Fourier Transform) :傅里叶变换用于将时域信号分解到频域。数学上,连续信号 x ( t ) x(t) x(t)的傅里叶变换定义为: X ( f ) = ∫ − ∞ + ∞ x ( t ) e − i 2 π f t d t X(f)=\int_{-\infty}^{+\infty}x(t)e^{-i2\pi ft}dt X(f)=∫−∞+∞x(t)e−i2πftdt。对于离散序列,常用快速傅里叶变换(FFT)求频谱系数。傅里叶变换的意义在于把原始信号表示成一系列正弦波/余弦波的叠加 (Time series features extraction using Fourier and Wavelet transforms on ECG data - OCTO Talks !)。通过频谱,我们可以提取出主要频率成分 及其能量。例如,在一段价格时间序列中应用FFT,发现某个周期对应的频率分量幅度突出,则可以据此构造特征"该频率成分的能量"来描述周期性。频域特征常用于季节趋势提取、振动信号分析等。在金融交易中,FFT可帮助识别市场周期(例如某股票存在周周期成分)。实践案例:对合成信号(例如两个不同频率的正弦波相加)做FFT,代码如下:

      python 复制代码
      import numpy as np
      import numpy.fft as fft
      
      # 生成含两种频率成分的信号:freq1=5Hz, freq2=20Hz
      fs = 100.0  # 采样率100Hz
      t = np.arange(0, 1, 1/fs)  # 1秒时间序列
      signal = np.sin(2*np.pi*5*t) + 0.5*np.sin(2*np.pi*20*t)  # 叠加信号
      
      spectrum = fft.fft(signal)  # 频谱
      freqs = fft.fftfreq(len(signal), 1/fs)
      # 找出主要频率分量
      main_freqs = freqs[np.argsort(np.abs(spectrum))[-2:]]  # 取幅值最大的两个频率
      print("主要频率分量:", main_freqs)

      上例中,FFT成功提取出主要的5Hz和20Hz频率分量。对于特征工程,我们可将这些显著频率及其能量作为特征。例如,周期性强的经济指标可以用频域能量百分比(某几个频带能量占比)来表征。值得注意的是,傅里叶变换假设信号平稳且全局特性一致,对于非平稳信号可能需要结合窗口或小波方法。

    • 小波变换(Wavelet Transform) :傅里叶变换虽然提供了全局频率信息,但无法体现频率随时间的变化。小波变换通过一套时频局部化 的基函数(小波)来分析信号,可同时获得时间和频率局部的信息 (Time series features extraction using Fourier and Wavelet transforms on ECG data - OCTO Talks !) (Time series features extraction using Fourier and Wavelet transforms on ECG data - OCTO Talks !)。连续小波变换以一对缩放参数 a a a、平移参数 b b b来伸缩和滑动"母小波" ψ ( t ) \psi(t) ψ(t),计算信号与 ψ a , b ( t ) = 1 a ψ ( t − b a ) \psi_{a,b}(t)=\frac{1}{\sqrt{a}}\psi(\frac{t-b}{a}) ψa,b(t)=a 1ψ(at−b)的卷积。这样在不同尺度和位置上分析信号,能够捕捉瞬时频谱变化。例如在心电、地震等信号中,小波分析能检测出某时刻出现的特定频率成分(突发模式)。常用的小波基如Haar、Daubechies等 (Time series features extraction using Fourier and Wavelet transforms on ECG data - OCTO Talks !)。小波系数可用作特征,如在故障检测中,不同故障会在小波某尺度下产生异常高的系数能量。对于金融时间序列,小波可以用于构造多尺度的特征,例如短期和长期趋势成分分别对应不同尺度的近似/细节系数。总之,小波特征是一种多尺度分析手段,特别适合处理非平稳的时间序列信号 (Time series features extraction using Fourier and Wavelet transforms on ECG data - OCTO Talks !)。

    • 时间序列自回归特征(AR特征) :许多时间序列具有自相关结构,利用这一点可以提取自回归系数 作为特征。自回归模型AR§假设当前值由过去p阶值线性回归得到: x t = ϕ 1 x t − 1 + ϕ 2 x t − 2 + . . . + ϕ p x t − p + ε t x_t = \phi_1 x_{t-1} + \phi_2 x_{t-2} + ... + \phi_p x_{t-p} + \varepsilon_t xt=ϕ1xt−1+ϕ2xt−2+...+ϕpxt−p+εt。通过对历史序列估计这些 ϕ \phi ϕ系数,就得到了反映序列动态特性的特征。例如, ϕ 1 \phi_1 ϕ1的大小表示一阶滞后相关性:若 ϕ 1 \phi_1 ϕ1为正且接近1,表示动量效应 (最近趋势延续);若 ϕ 1 \phi_1 ϕ1为负,表示均值回归效应 (涨后容易跌,跌后容易涨)。在交易中,可以计算价格序列的AR(1)系数,作为判断市场是趋势主导( ϕ 1 > 0 \phi_1>0 ϕ1>0)还是均值回复( ϕ 1 < 0 \phi_1<0 ϕ1<0)的因子。除了AR系数,时间序列的其他特征还包括移动平均(MA)模型参数、波动率(如一定窗口的标准差)、偏度峰度等统计量、或者技术指标(RSI、MACD等),都可看作特征提取的一部分。总之,对于时间序列数据,通过拟合合适的统计模型(ARIMA、GARCH等)并提取其参数,可以将隐藏的动态模式显式化为特征。

  • 降维和流形学习方法

    • 核主成分分析(Kernel PCA) :核PCA是PCA的非线性推广。它利用**核技巧(kernel trick)**先将数据映射到高维特征空间 Φ ( x ) \Phi(x) Φ(x),再在该高维空间做PCA。由于高维空间可能无法显式表示,核PCA通过核函数 K ( x i , x j ) = ⟨ Φ ( x i ) , Φ ( x j ) ⟩ K(x_i,x_j)=\langle \Phi(x_i),\Phi(x_j)\rangle K(xi,xj)=⟨Φ(xi),Φ(xj)⟩间接进行。具体地,假设中心化后的核矩阵为K,核PCA要求解 K α = λ α K\alpha = \lambda \alpha Kα=λα,得到的 α \alpha α系数用于构造主成分投影。当数据在原空间中呈现非线性分布但在某高维空间近似线性可分时,核PCA可以提取非线性主成分,实现更有效的降维。例如,对"同心圆"数据施加RBF核的核PCA,可提取出对应径向方向的主成分,将数据在一维上分开,这是线性PCA无法做到的。核PCA需要选择合适的核函数及参数(如高斯核宽度),否则可能过拟合或效果不佳。在实践中,核PCA可用于提取图像的非线性特征、或金融资产收益率中的非线性因子(比如基于相关性的核)。

    • t-分布随机邻域嵌入(t-SNE) :t-SNE是一种流形学习算法,善于在低维(通常2维)空间呈现高维数据的局部结构。它通过概率分布匹配 来保留邻近关系:在原高维空间,用高斯分布计算点 j j j对点 i i i的条件邻居概率 p j ∣ i p_{j|i} pj∣i;在低维嵌入空间,用 t t t分布计算类似的 q j ∣ i q_{j|i} qj∣i。t-SNE通过最小化Kullback-Leibler散度 K L ( P ∥ Q ) \mathrm{KL}(P\|Q) KL(P∥Q)来优化嵌入点的位置,使得高维的邻居概率分布 P P P尽可能被低维的 Q Q Q所近似。这会把原本距离近的点在低维上拉近,距离远的推远,从而形成清晰的簇。t-SNE常用于可视化高维数据,比如文本向量或图像特征的聚类。需要注意t-SNE主要用于可视化而非严格的特征提取,因为它没有显式的逆变换且低维坐标主要用于人眼观察。但在特征工程中,可以将高维特征用t-SNE降到2-3维,再将这些坐标作为新的特征加入模型(有时能提升效果,尤其是在聚类明显时)。另外t-SNE的超参数"perplexity"需调试,它影响保持局部邻域的规模。

    • UMAP(Uniform Manifold Approximation and Projection):UMAP是近年来流行的另一种流形降维方法。相比t-SNE,UMAP通常能更好地保留全局结构,并且速度更快,可扩展性更好。UMAP的数学基础是测度空间上的局部简并推理和Graph布局优化。它通过构造一个拓扑图:先在高维空间基于一定邻域距离构建无向图(近邻连接),赋予边权重表示局部相似度;然后在低维空间通过优化(类似于拉弹簧的过程)来布局节点,使得邻近点保持邻接。UMAP的结果往往在可视化上与t-SNE类似,但更稳定,且低维点之间的距离可以一定程度上解释远近关系(t-SNE则主要保证局部结构,可能扭曲全局距离)。UMAP也可用于特征工程,将复杂非线性数据映射到低维。例如,在图像识别中,可用UMAP将最后一层卷积特征降到10维左右作为新的紧凑特征,再供下游模型使用。

4. 深度学习特征提取

深度学习模型能够通过层层非线性变换从原始数据中学得高级特征表示。这些特征在计算机视觉、NLP等领域表现出强大的表征能力。以下介绍几种典型深度特征提取机制:

  • 自编码器(Autoencoder) :自编码器是一种人工神经网络,训练目标是重构输入 。它由编码器 f : x → h f: \mathbf{x}\to \mathbf{h} f:x→h和解码器 g : h → x ^ g: \mathbf{h}\to \mathbf{\hat{x}} g:h→x^组成,中间的隐含表示 h \mathbf{h} h即为提取的特征。典型自编码器结构如:输入维度 d d d,隐层编码维度 p p p( p < d p<d p<d),输出重构为 d d d维。训练通过最小化重构误差 L ( x , x ^ ) L(\mathbf{x},\mathbf{\hat{x}}) L(x,x^)(如均方误差或交叉熵)来调整参数,使 x ^ ≈ x \mathbf{\hat{x}}\approx \mathbf{x} x^≈x。由于隐层维度更低,自编码器被迫学到一种压缩表示来尽可能保留信息。数学原理 :对于线性激活和MSE损失的自编码器,可以证明其学到的特征空间实际上与PCA求得的主成分空间相同 (machine learning - What're the differences between PCA and autoencoder? - Cross Validated)------编码器权重张成的子空间与前若干主成分相符。因此,自编码器被视作PCA的非线性版本,允许多层网络和非线性激活来捕捉复杂结构 (machine learning - What're the differences between PCA and autoencoder? - Cross Validated)。例如,堆叠若干非线性层的自编码器可以学到数据的逐级抽象特征。训练好的自编码器,其瓶颈隐层 h \mathbf{h} h可以作为输入数据的低维表示/特征 用于下游任务。实践中,有去噪自编码器 (训练时加入噪声让网络学去噪能力)、稀疏自编码器 (对 h \mathbf{h} h加稀疏正则)等变体,目的都是学到更有意义的特征。自编码器在金融中可以用于降维风险因子、合成指标的压缩表示等。例如,对多只股票的K线数据训练自编码器,隐层输出可视为综合了各种技术指标的"交易信号"特征。下例展示一个简单自编码器在MNIST数据上的构建与训练代码(TensorFlow):

    python 复制代码
    import tensorflow as tf
    # 构建自编码器网络:784->128->32(编码器),32->128->784(解码器)
    encoding_dim = 32
    input_img = tf.keras.Input(shape=(784,))
    encoded = tf.keras.layers.Dense(128, activation='relu')(input_img)
    encoded = tf.keras.layers.Dense(encoding_dim, activation='relu')(encoded)
    decoded = tf.keras.layers.Dense(128, activation='relu')(encoded)
    decoded = tf.keras.layers.Dense(784, activation='sigmoid')(decoded)
    autoencoder = tf.keras.Model(input_img, decoded)
    autoencoder.compile(optimizer='adam', loss='binary_crossentropy')
    
    # 加载MNIST数据,将像素值压缩到0-1并展开为784维向量
    (x_train, _), (x_test, _) = tf.keras.datasets.mnist.load_data()
    x_train = x_train.astype('float32') / 255.0
    x_train = x_train.reshape(-1, 784)
    # 训练自编码器
    autoencoder.fit(x_train, x_train, epochs=5, batch_size=256)
    # 提取中间层编码器模型,用于获得特征表示
    encoder = tf.keras.Model(input_img, encoded)
    encoded_imgs = encoder.predict(x_test.reshape(-1,784))
    print("提取的特征维度:", encoded_imgs.shape[1])

    示例说明 :上述自编码器将MNIST图像从784维编码为32维的隐含表示。训练完成后,用encoder模型对测试集进行变换,可得到每张图片的32维特征向量。这32维特征是模型自主学到的高效表示,可用于替代原始像素用于分类等任务。由于深度网络的非线性,这种表示能够捕获一些主成分以外更复杂的模式(如笔画粗细、局部形状等),往往比线性降维效果更佳。

  • 卷积神经网络(CNN) :卷积网络通过卷积层提取局部空间模式特征,已成为图像、语音等任务的标准方法。CNN中,卷积层通过若干可学习的卷积核(滤波器)与输入张量做卷积运算,提取出特征映射(feature map) 。数学上,二维卷积计算形式为: ( f ∗ g ) ( i , j ) = ∑ m ∑ n f ( m , n )   g ( i − m , j − n ) (f * g)(i,j) = \sum_{m}\sum_{n} f(m,n)\,g(i-m,j-n) (f∗g)(i,j)=∑m∑nf(m,n)g(i−m,j−n),其中 f f f是卷积核(也称滤波器), g g g是输入图像。网络通过反向传播学习滤波器的参数,使得这些特征映射对任务有用。低层卷积核往往学到类似边缘、纹理 的基本特征,高层卷积核组合低层特征形成轮廓、物体部件 等更复杂特征 (Filters In Convolutional Neural Networks | DigitalOcean)。这种层次化特征提取机制模仿了生物视觉中从边缘到形状的处理过程 (Filters In Convolutional Neural Networks | DigitalOcean)。例如,在图像分类中,第一层卷积可能学习到水平方向边缘检测滤波器,激活表示图像中哪些位置存在该方向的边;第二层可能将这些边组合成简单的形状;越往深层,特征的语义层次越高(如人脸的眼睛、轮廓等)。CNN的优点在于局部感受野参数共享:卷积核在图像各位置滑动,使得平移不变模式能被捕捉,同时参数大大少于全连接网络。对于特征提取,我们可以利用预训练CNN模型的中间特征作为通用图像表示(称为CNN做"特征提取器")。例如,使用在ImageNet上训练好的ResNet网络,截断其最后的分类层,之前的全局平均池化输出(2048维)可作为任意输入图像的高层特征向量,在新的图像任务上作为输入喂给轻量模型就能取得不俗表现。这种迁移学习依赖于CNN所提取的特征具有普适性。下面通过一个小例子说明卷积如何提取边缘特征:

    python 复制代码
    import tensorflow as tf
    import numpy as np
    
    # 构造一个简单的5x5图像:左半部为0,右半部为1,代表一条垂直边界
    img = np.zeros((1,5,5,1), dtype=np.float32)
    img[:, :, :2, 0] = 0.0   # 左侧2列0
    img[:, :, 2:, 0] = 1.0   # 右侧3列1
    
    # 定义一个Sobel垂直边缘检测卷积核(滤波器)
    kernel = np.array([[-1, 0, 1],
                       [-2, 0, 2],
                       [-1, 0, 1]], dtype=np.float32).reshape(3,3,1,1)
    # 应用卷积运算
    image = tf.constant(img)
    kernel = tf.constant(kernel)
    feature_map = tf.nn.conv2d(image, kernel, strides=1, padding='VALID')
    print("输出特征图尺寸:", feature_map.shape)

    在上述示例中,我们手工设置了一个垂直边缘检测滤波器,并将其应用于一个包含垂直边的图像。输出feature_map的中心区域会有较高的数值,表示检测到了垂直边特征。这模拟了CNN第一层滤波器的工作原理:学到的卷积核对于特定方向的边缘响应强烈。实际训练中,CNN会自行调整卷积核参数以提取任务相关的特征。对于图像以外的一维序列数据,也可以使用一维卷积提取局部模式特征(例如NLP中的n-gram特征抽取)。卷积神经网络的特征提取能力使得我们不必手工设计图像特征(如SIFT、HOG),而是由模型自动学习。

  • Transformer模型 :Transformer通过自注意力机制(Self-Attention)来提取序列数据中的特征关系。与CNN侧重局部相邻关系不同,Transformer的注意力可以直接建模序列中任意两位置的依赖。具体来说,对于输入序列 { x 1 , . . . , x n } \{x_1,...,x_n\} {x1,...,xn},Transformer先将其映射为向量表示 { e 1 , . . . , e n } \{\mathbf{e}_1,...,\mathbf{e}_n\} {e1,...,en},然后在每一层计算新的表示: A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d ) V \mathrm{Attention}(Q,K,V) = \mathrm{softmax}\left(\frac{QK^T}{\sqrt{d}}\right)V Attention(Q,K,V)=softmax(d QKT)V,其中 Q = W Q [ e 1 , . . . , e n ] T Q=W_Q [\mathbf{e}_1,...,\mathbf{e}_n]^T Q=WQ[e1,...,en]T, K = W K [ e 1 , . . . , e n ] T K=W_K [\mathbf{e}_1,...,\mathbf{e}_n]^T K=WK[e1,...,en]T, V = W V [ e 1 , . . . , e n ] T V=W_V [\mathbf{e}_1,...,\mathbf{e}_n]^T V=WV[e1,...,en]T( W Q , W K , W V W_Q,W_K,W_V WQ,WK,WV为可训练矩阵)。这样,输出是原序列经过加权求和得到的新特征,其中权重由序列内部各元素两两之间的相关性(点积)决定。自注意力机制的效果是:每个位置的表示 h i \mathbf{h}_i hi融合了整个序列中与 i i i相关的信息 (Understanding and Coding the Self-Attention Mechanism of Large Language Models From Scratch)。"注意力"告诉模型应该着重看哪里,从而在全局范围提取特征。例如,在机器翻译任务中,注意力能够让词语的表示结合句子中相关的上下文词特征(如动词关注主语性别,用于正确翻译词形)。Transformer堆叠多层自注意力后,每个词的最终表示都包含了与其相关的长程依赖特征。这些表示向量可用于下游任务(例如把句子开头特殊[CLS]位置的向量作为句子特征用于分类)。与CNN/RNN不同,Transformer没有平移不变的卷积或循环结构,但通过位置编码加入位置信息,再靠自注意力捕捉任意依赖关系,因而有更大的灵活性。特征表示学习方面,Transformer在预训练语言模型(如BERT)中展示了强大的能力:预训练后的Transformer可以提供词或句子的通用向量表示(embedding),在情感分析、问答等任务上微调时直接用这些表示即可,效果远超传统手工特征。总的来说,Transformer通过自注意力学习到了数据的全局特征关系,是当前NLP和越来越多CV任务中的主流特征提取范式。

5. 金融量化交易中的应用:交易因子构建

在金融领域,特征工程体现为**交易因子(Alpha因子)**的设计与提取。量化投资中,因子是用于预测资产回报或风险的特征变量。上述方法可用于金融数据的特征发现,例如:

  • 动量因子(Momentum Factor) :动量效应指价格上涨的证券往往继续上涨,下跌的证券往往继续下跌 (Momentum definition - Risk.net)。对应的因子设计通常取过去一段时间的累积回报率。例如经典的12-1动量因子计算过去12个月减去最近1个月的累计收益率: MOM 12 − 1 = P t − 1 / P t − 12 − 1 \text{MOM}{12-1} = P{t-1}/P_{t-12} - 1 MOM12−1=Pt−1/Pt−12−1(即过去11个月的动量),或者直接用最近 n n n日收益的均值。高动量因子值的股票预期未来仍有相对较高的超额收益 (Momentum definition - Risk.net)。在特征提取上,可以将动量看作时间序列的一阶滞后特征 :如果收益序列的自相关系数为正,则体现出动量。我们可以通过计算收益序列的AR(1)系数 ϕ 1 \phi_1 ϕ1来度量这种趋势性( ϕ 1 \phi_1 ϕ1正则趋势延续)。还有诸如RSI(相对强弱指数)也是衡量一定周期动量的技术指标特征。实操中,可将不同周期的动量指标作为特征供模型选择,例如5日动量、20日动量、250日动量等。

  • 均值回归因子(Mean Reversion Factor) :均值回归假说认为价格偏离长期平均后最终会回归平均 (Statistical Arbitrage | AwesomeFinTech Blog)。因此此类因子捕捉资产价格的相对高估或低估程度。例如,常见设计是计算价格相对于一定窗口均线的偏离程度: Reversion 20 = P t − MA 20 ( P t ) MA 20 ( P t ) \text{Reversion}{20} = \frac{P_t - \text{MA}{20}(P_t)}{\text{MA}_{20}(P_t)} Reversion20=MA20(Pt)Pt−MA20(Pt),该值越大表示价格高于20日均线越多,倾向于未来回落。或者使用布林带指标(价格与上下轨距离)作为均值回复特征。如果资产价格存在均值回归特性,那么滞后收益的负相关 是显著的,即AR(1)模型中的 ϕ 1 \phi_1 ϕ1为负。这可以用来构建简易因子:取上一期收益率的负值作为预测因子(期望收益将反转)。Serban等研究将最近3个月收益 作为动量因子,将价格偏离历史均值 作为均值回复因子,结合起来预测下一月收益 (Combining Mean Reversion And Momentum In Forex Market - QuantConnect.com)。具体地,均值回复因子可以定义为过去 n n n日收益率之和的相反数或者价格相对均线的z-score。实证中,短周期(如1周)的反转因子和长周期(如3年)的均值回复因子都被广泛研究。

  • 其他常见因子 :除动量和均值回复,量化因子还有很多类别,例如大小因子(市值大小)、价值因子(市盈率、账面市值比)、质量因子(财务稳健性)、情绪因子(交易量、波动率指标)等。许多因子提取可以直接利用上述统计和机器学习方法。例如,用PCA对一篮子股票收益做降维可提取"主因子"作为广义市场因子或风格因子;用决策树模型可以从大量候选因子中挑选信息增益高的关键因子;用正则化回归在考虑多因子的同时防止过拟合并实现特征选择。在高频算法交易中,信号处理技术也被用来提取微观结构特征,如订单流的频域特征、短周期小波分量等,以捕捉短暂的套利信号。总之,金融量化特征工程是上述所有数学工具的综合运用:既需要统计检验验证因子显著性,又需要机器学习手段从海量数据中挖掘潜在模式,还需借助信号处理和深度学习去提取人眼难以察觉的复杂特征,从而构建丰富的alpha因子库,支撑量化策略的开发和迭代。

相关推荐
图扑软件2 小时前
图扑农牧林数据分析可视化平台:智慧农业的“数字大脑”
javascript·人工智能·信息可视化·数据挖掘·数据分析·数字孪生·可视化
维维180-3121-14552 小时前
AI与机器学习、深度学习在气候变化预测中的应用
人工智能·深度学习·机器学习
调皮的芋头3 小时前
【数据挖掘在量化交易中的应用:特征发现与特征提取】
人工智能·神经网络·数据挖掘
Matlab程序猿小助手5 小时前
【MATLAB源码-第268期】基于simulink的永磁同步电机PMSM双闭环矢量控制系统SVPWM仿真,输出转速响应曲线。
开发语言·人工智能·单片机·嵌入式硬件·算法·matlab·simulink
suishenwifi5 小时前
边缘计算+多模态感知:户外监控核心技术解析与工程部署实践!户外摄像头监控哪种好?户外摄像头监控十大品牌!格行视精灵VS海康威视VS大华横评!
人工智能·安全·边缘计算
Quz5 小时前
使用DeepSeek实现自动化编程:类的自动生成
数据库·c++·人工智能·qt
小蟹dal6 小时前
广义线性模型下的数据分析(R语言)
数据挖掘·数据分析
阿_旭6 小时前
基于YOLO11深度学习的遥感视角农田检测与分割系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分割、人工智能
人工智能·python·深度学习·毕业设计·农田分割