对矩阵 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
去中心化的核矩阵 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 =K−1nsamplesK−K1nsamples+1nsamplesK1nsamples
shape
为(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.]])
上述结果具体是如何计算得出的呢?
pairwise_kernels(X, metric='linear')
计算样本之间的线性核矩阵$ K$。线性核矩阵的计算公式是 K = X ∗ X T K = X * X^T K=X∗XT,即样本矩阵与其转置的乘积 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=X∗XT= 1−24−21123−2 1−24−21123−2 T= 1−24−21123−2 1−22−21341−2 = 92−2214−13−2−1321
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 =K−1nsamplesK−K1nsamples+1nsamplesK1nsamples= 9−2−2214−13−2−1321 − 1/31/31/31/31/31/31/31/31/3 92−2214−13−2−1321 − 92−2214−13−2−1321 1/31/31/31/31/31/31/31/31/3 + 1/31/31/31/31/31/31/31/31/3 92−2214−13−2−1321 1/31/31/31/31/31/31/31/31/3 = 92−2214−13−2−1321 − 333111222 − 312312312 + 222222222 = 50−5014−14−5−1419
4 ∗ 4^* 4∗. transformer.transform(K)
使用KernelCenterer
对象对核矩阵 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+2−22+14−13−2−13+21 =31 936 = 312 = 9+2−22+14−13−2−13+21 31= 936 31= 312 =31[9+2−2+2+14−13−2−13+21]31= 936 31=31[18]31=2