centering matrix
对于每个[m,n]的矩阵X,当Cm乘X得到的结果是,每个元素减去每一列的平均值。
当X乘Cn得到的结果是,每个元素减去每一行的平均值。
对于每个[n,n]的矩阵X,当Cn乘X乘Cn得到的结果是,双中心矩阵,行和列的平均值都是0。
对于每个[m,n]的矩阵X,XCnX’结果是协方差矩阵。(每个行是一个变量,列是一个样本)
(CnX)’(CnX)=X’CnX(列是一个变量,行是样本)
代码演示
H2和H3如上。
KH和HK(对应减去row/column的均值)验证完毕。
对于每个[m,n]的矩阵X,XCnX’结果是协方差矩阵。(每个行是一个变量,列是一个样本)
对于每个[m,n]的矩阵X,(CmX)’(CmX)=X’CmX是协方差矩阵(列是一个变量,行是样本)
双中心矩阵
HKH结果为双中心矩阵,HKH 或者HKH 都等价
相当于把行和列的平均值依次做了减法,最终得到的矩阵就是双中心矩阵,行和列的平均值都是0.
线性核转化为rbf核
将核函数转换为
先给定一个矩阵K
线性核应该是K乘K的转置
线性核的a[i][j]表示的是i向量和j向量的内积
将其转化为RBF核矩阵
RBF核的a[i][j]表示的是i向量和j向量的距离然后除以一个常数
首先转换为两个向量的距离 即(a-b)2=a2+b2-2ab
dot_products = x.dot(x.T)#求得线性核
sq_norms = np.diag(dot_products) #线性核的对角线 即各个向量的平方
sq_distances = -2 * dot_products + sq_norms[:, None] + sq_norms[None, :]
#-2*dot_products得到的矩阵的各个元素为:-2ab,加上后面两个即 a2+b2
结果无误。
第二种方法也可以
GX = np.dot(X, X.T)
KX = np.diag(GX) - GX + (np.diag(GX) - GX).T
sigma值的确定
mdist = np.median(KX[KX != 0]) #除了对角线的所有距离
sigma = math.sqrt(mdist) #中位数取平方