概述
在机器学习中,“特征提取”(feature extraction)是指将原始数据映射为有助于模型学习的数值表示;而在线性代数里,“特征值”“特征向量”及“特征矩阵”则刻画矩阵的内在性质。二者在 PCA、谱聚类 等算法中交汇:ML 用特征值分解来寻找数据的主方向,但其“特征”本身各有不同的含义和作用。下文将系统对比二者的概念、联系和区别,并辅以 Python 代码示例帮助理解。
一、机器学习中的特征提取
- 定义:将文本、图像、信号等原始数据转换为模型易用的数值特征,减少冗余同时保留判别信息。
- 方法:
- 手工方法:TF–IDF、词袋模型、信号局部统计量等。
- 自动化方法:基于降维(PCA、t-SNE)、深度网络中间层输出等。
- 混合方案:先用 GBDT 提取叶节点特征,再与神经网络结合。
- 目的:提高模型性能、加速训练、降低过拟合风险。
- 工具示例(scikit-learn):
此代码将高维数据降至 3 维主成分,用于后续模型训练。from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler X_scaled = StandardScaler().fit_transform(X_raw) pca = PCA(n_components=3) X_pca = pca.fit_transform(X_scaled) print("方差解释比", pca.explained_variance_ratio_)
二、线性代数中的特征值/向量/矩阵
- 特征值 (Eigenvalue):对方阵 A A A,若存在非零向量 v v v 使 A v = λ v A\,v=\lambda\,v Av=λv,则 λ \lambda λ 称为 A A A 的特征值。
- 特征向量 (Eigenvector):与上述 λ \lambda λ 配对的非零向量 v v v,表示线性变换在该方向的伸缩不改变方向。
- 特征矩阵 (Modal Matrix):由所有特征向量按列构成的矩阵 V V V,若 A = V Λ V − 1 A=V\Lambda V^{-1} A=VΛV−1,则完成对角化。
- Python 示例:
输出 λ \lambda λ 与对应的 v v v,揭示矩阵的主方向与伸缩系数。import numpy as np A = np.array([[6, 8], [2,12]]) vals, vecs = np.linalg.eig(A) print("特征值:", vals) print("特征向量:\n", vecs)
三、二者的交集—PCA 与谱方法
- PCA:对数据协方差矩阵 Σ \Sigma Σ 做特征分解,取最大特征值对应的特征向量作为主成分,实现降维并保留最大方差。
- 谱聚类:构建图拉普拉斯矩阵 L L L,取前 k k k 个最小特征值对应的特征向量作为嵌入,再用 K-Means 聚类。
- 图神经网络:对图邻接矩阵做谱分解,可提取全局图结构特征用于节点分类与链接预测。
四、本质区别
维度 | ML 特征提取 | 线性代数特征 |
---|---|---|
含义 | 数据表示的数字描述 | 矩阵自身的伸缩方向与系数 |
生成方式 | 手工设计或自动学习 | 求解特征分解或 SVD |
用途 | 模型输入、特征工程 | 矩阵分析、降维(PCA)、谱聚类等 |
可解释性 | 与任务语义相关,需人工定义 | 数学固有属性,可直接量化与解释 |
五、完整示例:PCA 与特征值对比
import numpy as np
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
# 构造示例数据
X = np.array([[2.5, 2.4],
[0.5, 0.7],
[2.2, 2.9],
[1.9, 2.2],
[3.1, 3.0],
[2.3, 2.7],
[2.0, 1.6],
[1.0, 1.1],
[1.5, 1.6],
[1.1, 0.9]])
# 标准化
Xs = StandardScaler().fit_transform(X)
# PCA 降至 2 维
pca = PCA(n_components=2)
Xp = pca.fit_transform(Xs)
print("PCA 特征值:", pca.explained_variance_)
# 协方差矩阵特征分解
cov = np.cov(Xs, rowvar=False)
vals, vecs = np.linalg.eig(cov)
print("协方差特征值:", vals)
print("协方差特征向量:\n", vecs)
- 前半段用 PCA 对原始数据降维并输出其“主成分方差”(即特征值);
- 后半段直接对协方差矩阵做特征分解,验证两者结果一致或接近。
通过上述对比与示例,您可以清晰地了解 ML 中的“特征提取” 聚焦于数据输入的构造与转换,而 线性代数的特征分解 则是对矩阵固有属性的数学运算。PCA 等算法将两者天然结合,用矩阵的特征值与向量指导机器学习的特征抽取。