Python和R及MATLAB和C与Lua去相关生物医学图像处理和神经网络物理学及数学变换算法

🎯要点

  1. 主成分分析降维
  2. 显微镜成像精度评估算法
  3. 脑电图磁共振成像降噪算法
  4. 图像颜色分离显现特征
  5. 球面转换:主成分分析和零相位分量分析
  6. 零相位分量分析和主成分分析平均互相关算法
  7. 图像白化
  8. 计算噪声协方差和绘制白化数据
  9. 高能物理分类器分离不同信号
  10. 白化变换优化批量归一化
  11. 去相关对比特征学习
  12. 生物图像去相关分析引擎

Python白化

白化变换或球面变换是一种线性变换,它将具有已知协方差矩阵的随机变量向量转换为一组协方差为单位矩阵的新变量,这意味着它们不相关且每个变量的方差为 1。这种变换被称为"白化",因为它将输入向量更改为白噪声向量。

其他几个转变与白化密切相关:

  • 去相关变换仅删除相关性,但保持方差不变。
  • 标准化变换将方差设置为 1,但保持相关性不变。
  • 着色变换将白色随机变量向量变换为具有指定协方差矩阵的随机向量。

假设 X X X 是一个随机(列)向量,具有非奇异协方差矩阵 Σ \Sigma Σ 和平均值 0 。然后,使用满足条件 W T W = Σ − 1 W^{ T } W=\Sigma^{-1} WTW=Σ−1 的白化矩阵 W W W 进行变换 Y = W X Y=W X Y=WX,生成具有单位对角协方差的白化随机向量 Y Y Y。

有无限多个可能的白化矩阵 W W W都满足上述条件。常用的选择是 W = Σ − 1 / 2 W=\Sigma^{-1 / 2} W=Σ−1/2(零相位分量分析白化), W = L T W=L^T W=LT,其中 L L L是 Σ − 1 \Sigma^{-1} Σ−1的Cholesky分解( Cholesky 白化),或 Σ \Sigma Σ 的特征系统(主成分分析白化)。

可以通过研究 X X X 和 Y Y Y 的互协方差和互相关来选出最佳白化变换。 例如,在原始 X X X 和白化后的 Y Y Y 之间实现最大分量相关性的唯一最优白化变换是由白化矩阵 W = P − 1 / 2 V − 1 / 2 W=P^{-1 / 2} V^{-1 / 2} W=P−1/2V−1/2,其中 P P P 是相关矩阵, V V V 是方差矩阵。

协方差矩阵

x variance = ∑ i = 1 n ( x i − x mean ) 2 n x_{\text {variance }}=\frac{\sum_{i=1}^n\left(x_i-x_{\text {mean }}\right)^2}{n} xvariance =n∑i=1n(xi−xmean )2

x covariance = ∑ i = 1 n ( x i − x mean ) ( y i − y mean ) n x_{\text {covariance }}=\frac{\sum_{i=1}^n\left(x_i-x_{\text {mean }}\right)\left(y_i-y_{\text {mean }}\right)}{n} xcovariance =n∑i=1n(xi−xmean )(yi−ymean )

x variance = ∑ i = 1 n ( x i − x mean ) 2 n − 1 x_{\text {variance }}=\frac{\sum_{i=1}^n\left(x_i-x_{\text {mean }}\right)^2}{n-1} xvariance =n−1∑i=1n(xi−xmean )2

x covariance = ∑ i = 1 n ( x i − x mean ) ( y i − y mean ) n − 1 x_{\text {covariance }}=\frac{\sum_{i=1}^n\left(x_i-x_{\text {mean }}\right)\left(y_i-y_{\text {mean }}\right)}{n-1} xcovariance =n−1∑i=1n(xi−xmean )(yi−ymean )

其中,

  • x variance : x _{\text {variance }}: xvariance : 是特征的方差
  • x covariance x_{\text {covariance }} xcovariance :是特征 x x x 和 y y y 之间的协方差
  • x i x_i xi 和 y i y_i yi :是特征 x x x 和 y y y 的单独数据点
  • Σ \Sigma Σ :表示值的总和
  • n :是某个特征的观察次数

特征值和特征向量

A − λ I = 0 A-\lambda I=0 A−λI=0

A v = λ v A v=\lambda v Av=λv

  • A:特征的协方差矩阵
  • λ \lambda λ :是特征值矩阵
  • I:是单位矩阵
  • v:是特征向量的矩阵

主成分分析白化方程

W P C A = Λ − 1 2 U T X W_{P C A}=\Lambda^{\frac{-1}{2}} U^T X WPCA=Λ2−1UTX

零相位分量分析白化方程

W Z C A = U Λ − 1 2 U T X W_{Z C A}=U \Lambda^{\frac{-1}{2}} U^T X WZCA=UΛ2−1UTX

Python白化

Python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from scipy import linalg
 
x = np.array([[1,2,3,4,5],  
              [11,12,13,14,15]]) 
print('x.shape:', x.shape)

xc = x.T - np.mean(x.T, axis=0)
xc = xc.T
print('xc.shape:', xc.shape, '\n')

xcov = np.cov(xc, rowvar=True, bias=True)
print('Covariance matrix: \n', xcov, '\n')

w, v = linalg.eig(xcov)

print("Eigenvalues:\n", w.real.round(4), '\n')
print("Eigenvectors:\n", v, '\n')
 
diagw = np.diag(1/(w**0.5)) 
diagw = diagw.real.round(4) 
print("Diagonal matrix for inverse square root of Eigenvalues:\n", diagw, '\n')
 
xrot = np.dot(v, xc)
wpca = np.dot(np.dot(diagw, v.T), xc)
wzca = np.dot(np.dot(np.dot(v, diagw), v.T), xc)

plt.scatter(xc[0,:], xc[1,:], s=150, label='centered', alpha=0.5)
plt.scatter(xrot[0,:], xrot[1,:], s=150, label='rotated')
plt.scatter(wpca[0,:], wpca[1,:], s=150, marker='+', label='wpca')
plt.scatter(wzca[0,:], wzca[1,:], s=150, marker='x', label='wzca')
plt.xlabel('Height', fontsize=16)
plt.ylabel('Weight', fontsize=16)
plt.rc('xtick',labelsize=16)
plt.rc('ytick',labelsize=16)
plt.legend()
plt.tight_layout()
plt.savefig('whiten_1.png', dpi=300)
x.shape: (2, 5)
xc.shape: (2, 5) 
 
Covariance matrix: 
 [[2. 2.]
 [2. 2.]] 
 
Eigenvalues:
 [4. 0.] 
 
Eigenvectors:
 [[ 0.70710678 -0.70710678]
 [ 0.70710678  0.70710678]] 
 
Diagonal matrix for inverse square root of Eigenvalues:
 [[5.00000000e-01 0.00000000e+00]
 [0.00000000e+00 4.74531328e+07]] 

👉更新:亚图跨际