网站抬头怎么做,设计师网站prinest,珠海关键词优化软件,设计师导航网址文章目录 算法介绍实验分析 算法介绍
核化线性降维是一种使用核方法#xff08;Kernel Methods#xff09;来进行降维的技术。在传统的线性降维方法中#xff0c;例如主成分分析#xff08;PCA#xff09;和线性判别分析#xff08;LDA#xff09;#xff0c;数据被映… 文章目录 算法介绍实验分析 算法介绍
核化线性降维是一种使用核方法Kernel Methods来进行降维的技术。在传统的线性降维方法中例如主成分分析PCA和线性判别分析LDA数据被映射到一个低维线性子空间中。而核化线性降维则通过使用核技巧将数据映射到一个非线性的低维空间中。
核技巧的核心思想是通过一个非线性映射将原始数据转换到一个高维的特征空间然后在该特征空间中应用线性降维方法。这种映射可以使用核函数来实现例如径向基函数核RBF核或多项式核。
下面我们以核主成分分析KPCA为例子
假定我们将高维特征空间中把数据投影到由 W \mathbf{W} W确定的超平面上即PCA欲求解 ( ∑ i 1 m z i z i T ) W λ W (1) \bigg(\sum_{i1}^mz_iz_i^T\bigg)\mathbf{W}\lambda\mathbf{W}\tag{1} (i1∑mziziT)WλW(1)
其中 z i z_i zi是样本点 x i x_i xi在高维特征空间中的像可知 W 1 λ ( ∑ i 1 m z i z i T ) W ∑ i 1 m z i z i T W λ ∑ i 1 m z i α i (2) \begin{aligned} \mathbf{W}\frac{1}{\lambda}\bigg(\sum_{i1}^mz_iz_i^T\bigg)\mathbf{W}\sum_{i1}^mz_i\frac{z_i^T\mathbf{W}}{\lambda}\\ \sum_{i1}^mz_i\alpha_i \end{aligned} \tag{2} Wλ1(i1∑mziziT)Wi1∑mziλziTWi1∑mziαi(2)
其中 α i 1 λ z i T W \alpha_i\frac{1}{\lambda}z_i^T\mathbf{W} αiλ1ziTW(权重)。假设 z i z_i zi是通过原始空间中的样本点 x i x_i xi通过映射 ϕ \phi ϕ产生即 z i ϕ ( x i ) , i 1 , 2 , . . . , m z_i\phi(x_i),i1,2,...,m ziϕ(xi),i1,2,...,m。若能被 ϕ \phi ϕ显式的表达出来通过它将样本映射到高维特征空间再从高维特征空间中使用PCA可将式1变化为 ( ∑ i 1 m ϕ ( x i ) ϕ ( x i ) T ) W λ W (3) \bigg(\sum_{i1}^m\phi(x_i)\phi(x_i)^T\bigg)\mathbf{W}\lambda\mathbf{W}\tag{3} (i1∑mϕ(xi)ϕ(xi)T)WλW(3)
式2变化为 W ∑ i 1 m ϕ ( x i ) α i (4) \mathbf{W}\sum_{i1}^m\phi(x_i)\alpha_i\tag{4} Wi1∑mϕ(xi)αi(4)
一般情况下我们不知道 ϕ \phi ϕ的 形式故引入核函数 κ ( x i , x j ) ϕ ( x i ) T ϕ ( x j ) (5) \kappa(x_i,x_j)\phi(x_i)^T\phi(x_j)\tag{5} κ(xi,xj)ϕ(xi)Tϕ(xj)(5)
将式4和式5带入式3中有
已知 z i ϕ ( x i ) z_i\phi(x_i) ziϕ(xi)类比 X { x 1 , x 2 , . . . , x m } \mathbf{X}\{x_1,x_2,...,x_m\} X{x1,x2,...,xm}可以构造出 Z { z 1 , z 2 , . . . , z m } \mathbf{Z}\{z_1,z_2,...,z_m\} Z{z1,z2,...,zm}。 ( ∑ i 1 m ϕ ( x i ) ϕ ( x i ) T ) w j λ j w j ( ∑ i 1 m z i z i T ) w j λ j w j Z Z T w j λ j w j Z Z T ∑ i 1 m ϕ ( x i ) α i j λ j ∑ i 1 m ϕ ( x i ) α i j Z Z T ∑ i 1 m z i α i j λ j ∑ i 1 m z i α i j Z Z T Z α j λ j Z α j Z Z T Z α j Z λ j α j Z T Z α j λ j α j (6) \begin{aligned} \bigg(\sum_{i1}^m\phi(x_i)\phi(x_i)^T\bigg)w_j\lambda_jw_j\\ \bigg(\sum_{i1}^mz_iz_i^T\bigg)w_j\lambda_jw_j\\ \mathbf{ZZ^T}w_j\lambda_jw_j\\ \mathbf{ZZ^T}\sum_{i1}^m\phi(x_i)\alpha_i^j\lambda_j\sum_{i1}^m\phi(x_i)\alpha_i^j\\ \mathbf{ZZ^T}\sum_{i1}^mz_i\alpha_i^j\lambda_j\sum_{i1}^mz_i\alpha_i^j\\ \mathbf{ZZ^TZ}\alpha^j\lambda_j\mathbf{Z}\alpha^j\\ \mathbf{ZZ^TZ}\alpha^j\mathbf{Z}\lambda_j\alpha^j\\ \mathbf{Z^TZ}\alpha^j\lambda_j\alpha^j\\ \end{aligned} \tag{6} (i1∑mϕ(xi)ϕ(xi)T)wj(i1∑mziziT)wjZZTwjZZTi1∑mϕ(xi)αijZZTi1∑mziαijZZTZαjZZTZαjZTZαjλjwjλjwjλjwjλji1∑mϕ(xi)αijλji1∑mziαijλjZαjZλjαjλjαj(6) 其中 α j ( α 1 j ; α 2 j ; … ; α m j ) ∈ R m × 1 \boldsymbol{\alpha}^j\left(\alpha_1^j ; \alpha_2^j ; \ldots ; \alpha_m^j\right) \in \mathbb{R}^{m \times 1} αj(α1j;α2j;…;αmj)∈Rm×1
令 Z Z T K \mathbf{ZZ^TK} ZZTK那么上式可化为 K α j λ j α j (7) \mathbf{K}\alpha^j\lambda_j\alpha^j\tag{7} Kαjλjαj(7)
其中矩阵 K \mathbf{K} K的第 i i i行第 j j j列的元素 K i j z i T z j ϕ ( x i ) T ϕ ( x j ) κ ( x i , x j ) \mathbf{K}_{ij}z_i^Tz_j\phi(x_i)^T\phi(x_j)\kappa(x_i,x_j) KijziTzjϕ(xi)Tϕ(xj)κ(xi,xj)。
显然式7是一个特征值分解问题取 K \mathbf{K} K最大的 d ′ d^\prime d′个特征值所对应的特征向量即可。
对新样本 x ( x 1 , x 2 , . . . , x m ) x(x_1,x_2,...,x_m) x(x1,x2,...,xm)向量其向高维特征空间的投影后的第 j ( j 1 , 2 , . . . , d ′ ) j(j1,2,...,d^\prime) j(j1,2,...,d′)维坐标是 z j w j T ϕ ( x ) ∑ i 1 m α i j ϕ ( x i ) T ϕ ( x ) ∑ i 1 m α i j κ ( x i , x ) (8) \begin{aligned} z^jw_j^T\phi(x)\\ \sum_{i1}^m\alpha_i^j\phi(x_i)^T\phi(x)\\ \sum_{i1}^m\alpha_i^j\kappa(x_i,x) \end{aligned} \tag{8} zjwjTϕ(x)i1∑mαijϕ(xi)Tϕ(x)i1∑mαijκ(xi,x)(8)
算法过程与PCA算法类似。
实验分析
数据集如下图所示 读入数据集
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt# 读取数据集
data pd.read_csv(data/correlated_dataset.csv)# 提取特征和目标
X data.drop(Target, axis1).values
y data[Target].values定义核函数
# 核函数径向基函数
def rbf_kernel(x, y, gamma1.0):return np.exp(-gamma * np.linalg.norm(x - y)**2)计算以及中心化核矩阵
# 计算核矩阵
def compute_kernel_matrix(X, gamma1.0):n_samples X.shape[0]K np.zeros((n_samples, n_samples))for i in range(n_samples):for j in range(n_samples):K[i, j] rbf_kernel(X[i], X[j], gamma)return K# 中心化核矩阵
def center_kernel_matrix(K):n_samples K.shape[0]one_n np.ones((n_samples, n_samples)) / n_samplesK_centered K - one_n.dot(K) - K.dot(one_n) one_n.dot(K).dot(one_n)return K_centered计算特征值与特征向量
# 计算特征值和特征向量
def compute_eigenvectors(K_centered, n_components):eigvals, eigvecs np.linalg.eigh(K_centered)# 选择前n_components个最大特征值对应的特征向量idx np.argsort(eigvals)[::-1][:n_components]return eigvecs[:, idx]执行KPCA并绘制降维可视化结果
# 数据中心化
X_centered X - np.mean(X, axis0)# 计算核矩阵
K compute_kernel_matrix(X_centered)# 中心化核矩阵
K_centered center_kernel_matrix(K)# 选择降维后的维度
n_components 6# 计算特征向量
eigenvectors compute_eigenvectors(K_centered, n_components)# 降维
X_pca K_centered.dot(eigenvectors)# 可视化降维结果
plt.scatter(X_pca[:, 0], X_pca[:, 1], cy, cmapviridis)
plt.title(Kernelized PCA - 2D Projection)
plt.xlabel(Principal Component 1)
plt.ylabel(Principal Component 2)
plt.show()