sklearn.decomposition.KernelPCA
(核主成分分析,Kernel PCA)
KernelPCA
是 sklearn.decomposition
提供的一种 非线性降维技术,通过使用核技巧将数据映射到高维空间,从而 捕捉数据的非线性结构,适用于 非线性数据的降维和特征提取。
1. KernelPCA
作用
- 适用于非线性数据降维:通过非线性映射(核函数)将数据从低维空间映射到高维空间,从而能捕捉到数据中的非线性结构。
- 应用于复杂数据集:如 图像、信号处理、语音识别 等。
- 通过核函数(如 RBF 核、多项式核)处理数据。
2. KernelPCA
vs. PCA
方法 | 适用情况 | 主要区别 |
---|---|---|
PCA | 线性降维 | 数据必须符合线性结构 |
KernelPCA | 非线性降维 | 通过核函数映射数据到高维空间 |
示例
- PCA:适用于数据在一个线性子空间中的情况。
- KernelPCA:适用于数据不能通过简单的线性转换降维的情况。
3. KernelPCA
代码示例
(1) 训练 KernelPCA
from sklearn.decomposition import KernelPCA
import numpy as np
# 生成非线性数据(例如螺旋数据)
t = np.linspace(0, 2 * np.pi, 100)
X = np.array([np.sin(t), np.cos(t)]).T
# 使用 RBF 核进行 KernelPCA
kpca = KernelPCA(n_components=2, kernel="rbf", gamma=1)
X_kpca = kpca.fit_transform(X)
print("KernelPCA 降维后的数据形状:", X_kpca.shape)
解释
kernel="rbf"
:使用 径向基函数核(RBF) 进行映射。gamma=1
:RBF 核函数的超参数,控制数据映射的非线性程度。
4. KernelPCA
主要参数
KernelPCA(n_components=2, kernel='rbf', gamma=1, degree=3, coef0=1, kernel_params=None)
参数 | 说明 |
---|---|
n_components | 主成分数(降维后的维度,类似于 PCA 的 n_components ) |
kernel | 核函数(常用的有 rbf 、poly 、sigmoid ,也可以使用自定义核) |
gamma | RBF 核的超参数(控制影响范围,默认值为 1 / n_features ) |
degree | 多项式核的度数(适用于 kernel='poly' ) |
coef0 | 多项式核和 Sigmoid 核的常数项(控制模型的复杂度) |
5. KernelPCA
核函数(kernel)
核函数 | 适用情况 | 说明 |
---|---|---|
rbf | 适用于非线性数据 | 径向基函数(Gaussian)核,常用于图像处理、模式识别 |
poly | 适用于多项式关系的非线性数据 | 多项式核,用于描述数据点之间的非线性关系 |
sigmoid | 适用于神经网络样数据 | Sigmoid 核,类似于神经网络中的激活函数 |
6. KernelPCA
可视化
import matplotlib.pyplot as plt
# 可视化降维后的数据
plt.scatter(X_kpca[:, 0], X_kpca[:, 1])
plt.title("KernelPCA 降维结果")
plt.show()
解释
- 通过散点图 可视化降维后的数据。
7. KernelPCA
vs. PCA
的区别
from sklearn.decomposition import PCA
# 使用传统 PCA 进行降维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# 使用 KernelPCA 进行降维
kpca = KernelPCA(n_components=2, kernel="rbf", gamma=1)
X_kpca = kpca.fit_transform(X)
print("PCA 降维后的数据形状:", X_pca.shape)
print("KernelPCA 降维后的数据形状:", X_kpca.shape)
解释
- PCA 适用于 线性数据,而 KernelPCA 可以处理 非线性数据,通过核技巧将数据映射到高维空间。
8. 适用场景
- 图像分割(如 边缘检测)。
- 特征提取(如 语音处理)。
- 数据可视化(如 非线性数据的降维)。
- 模式识别(如 手写数字识别)。
9. 结论
KernelPCA
通过核函数进行非线性降维,适用于无法通过线性方法降维的非线性数据,它提供了 通过核技巧映射数据到高维空间 的强大能力,适用于 复杂的数据模式、图像处理、信号处理等任务。