机器学习数据预处理preprocessing之KernelCenterer

sklearn.preprocessing.KernelCenterer

对矩阵 X X X执行中心化操作,即使得核矩阵的行和列的均值为零

给定二维矩阵 X X X,可以下式得到其核变换矩阵 K K K
K ( X , X ) = ϕ ( X ) . ϕ ( X ) T K(X,X) =\phi(X).\phi(X)^T K(X,X)=ϕ(X).ϕ(X)T

  • 式中 ϕ ( X ) \phi(X) ϕ(X)是一种将 X X X从原始空间映射到希尔伯特空间的函数
  • 希尔伯特空间是一种完备的内积空间,通常用于处理高维或无限维的特征空间

去中心化的核矩阵 K ~ \widetilde{K} K 可表示为:

K ~ ( X , X ) = ϕ ~ ( X ) . ϕ ~ ( X ) T = K ( X , X ) . K ( X , X ) T \widetilde{K}(X,X) =\widetilde \phi(X).\widetilde\phi(X)^T=K(X,X).K(X,X)^T K (X,X)=ϕ (X).ϕ (X)T=K(X,X).K(X,X)T
然而,核函数的好处之一就是可以使用代数计算避免复杂的空间映射:

K ~ = K − 1 n s a m p l e s K − K 1 n s a m p l e s + 1 n s a m p l e s K 1 n s a m p l e s \widetilde{K} =K-1_{n_{samples}}K-K1_{n_{samples}}+1_{n_{samples}}K1_{n_{samples}} K =K1nsamplesKK1nsamples+1nsamplesK1nsamples

  • 式中 1 n s a m p l e s 1_{n_{samples}} 1nsamplesshape(n_samples, n_samples)所有值为 1 n s a m p l e s \frac{1}{n_{samples}} nsamples1的矩阵

官网示例如下:

from sklearn.preprocessing import KernelCenterer
from sklearn.metrics.pairwise import pairwise_kernels
X = [[ 1., -2.,  2.],
     [ -2.,  1.,  3.],
     [ 4.,  1., -2.]]
K = pairwise_kernels(X, metric='linear')
K
array([[  9.,   2.,  -2.],
       [  2.,  14., -13.],
       [ -2., -13.,  21.]])
transformer = KernelCenterer().fit(K)
transformer.transform(K)
array([[  5.,   0.,  -5.],
       [  0.,  14., -14.],
       [ -5., -14.,  19.]])

上述结果具体是如何计算得出的呢?

  1. X X X 是一个 3x3 的矩阵,表示三个样本,每个样本有三个特征
  2. pairwise_kernels(X, metric='linear') 计算样本之间的线性核矩阵$ K$。线性核矩阵的计算公式是 K = X ∗ X T K = X * X^T K=XXT,即样本矩阵与其转置的乘积

K = X ∗ X T = [ 1 − 2 2 − 2 1 3 4 1 − 2 ] [ 1 − 2 2 − 2 1 3 4 1 − 2 ] T = [ 1 − 2 2 − 2 1 3 4 1 − 2 ] [ 1 − 2 4 − 2 1 1 2 3 − 2 ] = [ 9 2 − 2 2 14 − 13 − 2 − 13 21 ] \begin{aligned} K&=X * X^T \\ &= \left[\begin{matrix} 1 & -2 & 2\\ -2 & 1 & 3\\ 4 & 1 & -2 \end{matrix} \right] \left[\begin{matrix} 1 & -2 & 2\\ -2 & 1 & 3\\ 4 & 1 & -2 \end{matrix} \right]^T \\ &= \left[\begin{matrix} 1 & -2 & 2\\ -2 & 1 & 3\\ 4 & 1 & -2 \end{matrix} \right] \left[\begin{matrix} 1 & -2 & 4\\ -2 & 1 & 1\\ 2 & 3 & -2 \end{matrix} \right] \\ &= \left[\begin{matrix} 9 & 2 & -2\\ 2 & 14 & -13\\ -2 & -13 & 21 \end{matrix} \right] \\ \end{aligned} K=XXT= 124211232 124211232 T= 124211232 122213412 = 9222141321321
3. KernelCenterer().fit(K) 创建一个KernelCenterer对象,并调用.fit(K) 方法计算出核矩阵 K K K中心化所需的均值等参数,并返回KernelCenterer对象
4. transformer.transform(K)使用KernelCenterer对象对核矩阵 K K K进行中心化变换,得到最终结果:

K ~ = K − 1 n s a m p l e s K − K 1 n s a m p l e s + 1 n s a m p l e s K 1 n s a m p l e s = [ 9 2 − 2 − 2 14 − 13 − 2 − 13 21 ] − [ 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 ] [ 9 2 − 2 2 14 − 13 − 2 − 13 21 ] − [ 9 2 − 2 2 14 − 13 − 2 − 13 21 ] [ 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 ] + [ 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 ] [ 9 2 − 2 2 14 − 13 − 2 − 13 21 ] [ 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 ] = [ 9 2 − 2 2 14 − 13 − 2 − 13 21 ] − [ 3 1 2 3 1 2 3 1 2 ] − [ 3 3 3 1 1 1 2 2 2 ] + [ 2 2 2 2 2 2 2 2 2 ] = [ 5 0 − 5 0 14 − 14 − 5 − 14 19 ] \begin{aligned} \widetilde{K} & =K-1_{n_{samples}}K-K1_{n_{samples}}+1_{n_{samples}}K1_{n_{samples}} \\ &= \left[\begin{matrix} 9 & 2 & -2\\ -2 & 14 & -13\\ -2 & -13 & 21 \end{matrix} \right] - \left[\begin{matrix} 1/3 & 1/3 & 1/3\\ 1/3 & 1/3 & 1/3\\ 1/3 & 1/3 & 1/3 \end{matrix} \right] \left[\begin{matrix} 9 & 2 & -2\\ 2 & 14 & -13\\ -2 & -13 & 21 \end{matrix} \right] - \left[\begin{matrix} 9 & 2 & -2\\ 2 & 14 & -13\\ -2 & -13 & 21 \end{matrix} \right] \left[\begin{matrix} 1/3 & 1/3 & 1/3\\ 1/3 & 1/3 & 1/3\\ 1/3 & 1/3 & 1/3 \end{matrix} \right] + \left[\begin{matrix} 1/3 & 1/3 & 1/3\\ 1/3 & 1/3 & 1/3\\ 1/3 & 1/3 & 1/3 \end{matrix} \right] \left[\begin{matrix} 9 & 2 & -2\\ 2 & 14 & -13\\ -2 & -13 & 21 \end{matrix} \right] \left[\begin{matrix} 1/3 & 1/3 & 1/3\\ 1/3 & 1/3 & 1/3\\ 1/3 & 1/3 & 1/3 \end{matrix} \right] \\ &= \left[\begin{matrix} 9 & 2 & -2\\ 2 & 14 & -13\\ -2 & -13 & 21 \end{matrix} \right] - \left[\begin{matrix} 3 & 1 & 2\\ 3 & 1 & 2\\ 3 & 1 & 2\\ \end{matrix} \right]- \left[\begin{matrix} 3 & 3 & 3\\ 1 & 1 & 1\\ 2 & 2 & 2\\ \end{matrix} \right]+ \left[\begin{matrix} 2 & 2 & 2\\ 2 & 2 & 2\\ 2 & 2 & 2\\ \end{matrix} \right] \\ &= \left[\begin{matrix} 5 & 0 & -5\\ 0 & 14 & -14\\ -5 & -14 & 19 \end{matrix} \right] \\ \end{aligned} K =K1nsamplesKK1nsamples+1nsamplesK1nsamples= 9222141321321 1/31/31/31/31/31/31/31/31/3 9222141321321 9222141321321 1/31/31/31/31/31/31/31/31/3 + 1/31/31/31/31/31/31/31/31/3 9222141321321 1/31/31/31/31/31/31/31/31/3 = 9222141321321 333111222 312312312 + 222222222 = 5050141451419

如果觉得矩阵相乘不直观,可从按元素操作(Element -wise operation)角度计算中心化矩阵

4 ∗ 4^* 4. transformer.transform(K)使用KernelCenterer对象对核矩阵 K K K进行中心化变换,得到最终结果:

  • 从上述计算结果中可以看出, 1 n s a m p l e s K 1_{n_{samples}}K 1nsamplesK相当于计算核矩阵 K K K每一列的均值, K 1 n s a m p l e s K1_{n_{samples}} K1nsamples相当于计算核矩阵 K K K每一行的均值, 1 n s a m p l e s K 1 n s a m p l e s 1_{n_{samples}}K1_{n_{samples}} 1nsamplesK1nsamples则相当于计算整个核矩阵 K K K的均值,即:

m e a n _ c o l = 1 3 [ 9 + 2 − 2 2 + 14 − 13 − 2 − 13 + 21 ] = 1 3 [ 9 3 6 ] = [ 3 1 2 ] m e a n _ r o w = [ 9 + 2 − 2 2 + 14 − 13 − 2 − 13 + 21 ] 1 3 = [ 9 3 6 ] 1 3 = [ 3 1 2 ] m e a n _ a l l = 1 3 [ 9 + 2 − 2 + 2 + 14 − 13 − 2 − 13 + 21 ] 1 3 = [ 9 3 6 ] 1 3 = 1 3 [ 18 ] 1 3 = 2 \begin{aligned} mean\_{col}&= \frac{1}{3}\left[\begin{matrix} 9 + 2 -2\\ 2 + 14 -13\\ -2 -13 + 21\end{matrix} \right] = \frac{1}{3}\left[\begin{matrix} 9\\ 3\\ 6\end{matrix} \right] = \left[\begin{matrix} 3\\ 1\\ 2\end{matrix} \right] \\ mean\_{row}&= \left[\begin{matrix} 9 + 2 -2\\ 2 + 14 -13\\ -2 -13 + 21 \end{matrix} \right]\frac{1}{3} = \left[\begin{matrix} 9\\ 3\\ 6 \end{matrix} \right] \frac{1}{3}= \left[\begin{matrix} 3\\ 1\\ 2 \end{matrix} \right] \\ mean\_{all}&= \frac{1}{3} \left[\begin{matrix} 9 + 2 -2+2 + 14 -13-2 -13 + 21 \end{matrix} \right]\frac{1}{3} = \left[\begin{matrix} 9\\ 3\\ 6 \end{matrix} \right] \frac{1}{3}=\frac{1}{3} \left[\begin{matrix} 18\\ \end{matrix} \right] \frac{1}{3}=2\\ \end{aligned} mean_colmean_rowmean_all=31 9+222+1413213+21 =31 936 = 312 = 9+222+1413213+21 31= 936 31= 312 =31[9+22+2+1413213+21]31= 936 31=31[18]31=2

  • 基于按元素操作,计算中心化后的每个矩阵
    K ~ i j = K i j − m e a n _ r o w i − m e a n _ c o l j + m e a n _ a l l K ~ 11 = 9 − 3 − 3 + 2 = 5 K ~ 12 = 2 − 3 − 1 + 2 = 0 K ~ 13 = − 2 − 3 − 2 + 2 = − 5 K ~ 21 = 2 − 1 − 3 + 2 = 0 K ~ 22 = 14 − 1 − 1 + 2 = 14 K ~ 23 = − 13 − 1 − 2 + 2 = − 14 K ~ 31 = − 2 − 2 − 3 + 2 = − 5 K ~ 32 = − 13 − 2 − 1 + 2 = − 14 K ~ 33 = 21 − 2 − 2 + 2 = 19 \begin{aligned} \widetilde{K}_{ij}&={K}_{ij}-mean\_{row_i}-mean\_{col_j}+mean\_{all}\\ \widetilde{K}_{11}&=9-3-3+2=5\\ \widetilde{K}_{12}&=2-3-1+2=0\\ \widetilde{K}_{13}&=-2-3-2+2=-5\\ \widetilde{K}_{21}&=2-1-3+2=0\\ \widetilde{K}_{22}&=14-1-1+2=14\\ \widetilde{K}_{23}&=-13-1-2+2=-14\\ \widetilde{K}_{31}&=-2-2-3+2=-5\\ \widetilde{K}_{32}&=-13-2-1+2=-14\\ \widetilde{K}_{33}&=21-2-2+2=19\\ \end{aligned} K ijK 11K 12K 13K 21K 22K 23K 31K 32K 33=Kijmean_rowimean_colj+mean_all=933+2=5=231+2=0=232+2=5=213+2=0=1411+2=14=1312+2=14=223+2=5=1321+2=14=2122+2=19
  • 中心化后的核矩阵
    K ~ i j = [ 5 0 − 5 0 14 − 14 − 5 − 14 19 ] \widetilde{K}_{ij}= \left[\begin{matrix} 5 & 0 & -5\\ 0 & 14 & -14\\ -5 & -14 & 19 \end{matrix} \right] K ij= 5050141451419

你可能感兴趣的:(机器学习,人工智能)