?給定數據矩陣X,如何求其質心、中心化數據、標準化數據、格拉姆矩陣、協方差矩陣、相關系數矩陣。
??設數據矩陣 X X X是一個 n × p n\times p n×p的矩陣,其中 n n n是樣本數量, p p p是變量數量, X = ( x i j ) X = (x_{ij}) X=(xij?), i = 1 , 2 , ? , n i = 1,2,\cdots,n i=1,2,?,n, j = 1 , 2 , ? , p j = 1,2,\cdots,p j=1,2,?,p。
1. 質心 X ˉ \bar{X} Xˉ
??質心是數據矩陣 X X X每一列的均值所構成的向量。對于第 j j j列,其均值 x ˉ j = 1 n ∑ i = 1 n x i j \bar{x}_j=\frac{1}{n}\sum_{i = 1}^{n}x_{ij} xˉj?=n1?∑i=1n?xij?, j = 1 , 2 , ? , p j = 1,2,\cdots,p j=1,2,?,p。所以質心向量 X ˉ = ( x ˉ 1 , x ˉ 2 , ? , x ˉ p ) \bar{X}=(\bar{x}_1,\bar{x}_2,\cdots,\bar{x}_p) Xˉ=(xˉ1?,xˉ2?,?,xˉp?)。
2. 中心化數據 X c X_c Xc?
??中心化是將數據矩陣X的每一個樣本點減去其質心。中心化后的數據矩陣 X c X_c Xc?的元素 x i j c = x i j ? x ˉ j x_{ij}^c=x_{ij}-\bar{x}_j xijc?=xij??xˉj?, i = 1 , 2 , ? , n i = 1,2,\cdots,n i=1,2,?,n, j = 1 , 2 , ? , p j = 1,2,\cdots,p j=1,2,?,p。
3. 標準化數據 X s X_s Xs?
- 首先計算每一列的標準差 s j = 1 n ? 1 ∑ i = 1 n ( x i j ? x ˉ j ) 2 s_j=\sqrt{\frac{1}{n - 1}\sum_{i = 1}^{n}(x_{ij}-\bar{x}_j)^2} sj?=n?11?∑i=1n?(xij??xˉj?)2?, j = 1 , 2 , ? , p j = 1,2,\cdots,p j=1,2,?,p。
- 標準化后的數據矩陣 X s X_s Xs?的元素 x i j s = x i j ? x ˉ j s j x_{ij}^s=\frac{x_{ij}-\bar{x}_j}{s_j} xijs?=sj?xij??xˉj??, i = 1 , 2 , ? , n i = 1,2,\cdots,n i=1,2,?,n, j = 1 , 2 , ? , p j = 1,2,\cdots,p j=1,2,?,p。
(減均值、除方差)
4.格拉姆矩陣 G G G
??格拉姆矩陣 G G G的元素 g i j = X T X g_{ij}=X^T X gij?=XTX,即 g i j = ∑ k = 1 n x k i x k j g_{ij}=\sum_{k = 1}^{n}x_{ki}x_{kj} gij?=∑k=1n?xki?xkj?, i = 1 , 2 , ? , p i = 1,2,\cdots,p i=1,2,?,p, j = 1 , 2 , ? , p j = 1,2,\cdots,p j=1,2,?,p。
(每一個元素,都是 X X X中兩個向量的內積)
5.協方差矩陣 C C C
- 協方差矩陣C可以通過中心化后的數據矩陣 X c X_c Xc?來計算, C = 1 n ? 1 X c T X c C=\frac{1}{n - 1}X_c^T X_c C=n?11?XcT?Xc?。
- 其元素 c i j = 1 n ? 1 ∑ k = 1 n ( x k i ? x ˉ i ) ( x k j ? x ˉ j ) c_{ij}=\frac{1}{n - 1}\sum_{k = 1}^{n}(x_{ki}-\bar{x}_i)(x_{kj}-\bar{x}_j) cij?=n?11?∑k=1n?(xki??xˉi?)(xkj??xˉj?), i = 1 , 2 , ? , p i = 1,2,\cdots,p i=1,2,?,p, j = 1 , 2 , ? , p j = 1,2,\cdots,p j=1,2,?,p。
6.相關系數矩陣 R R R
-
可以由標準化后的數據矩陣 X s X_s Xs?來計算相關系數矩陣R, R = 1 n ? 1 X s T X s R=\frac{1}{n - 1}X_s^T X_s R=n?11?XsT?Xs?。
-
也可以根據協方差矩陣C計算, r i j = c i j c i i c j j r_{ij}=\frac{c_{ij}}{\sqrt{c_{ii}c_{jj}}} rij?=cii?cjj??cij??, i = 1 , 2 , ? , p i = 1,2,\cdots,p i=1,2,?,p, j = 1 , 2 , ? , p j = 1,2,\cdots,p j=1,2,?,p,其中 r i j r_{ij} rij?是相關系數矩陣R的元素
python實現
import numpy as npdef calculate_statistics(X):# 質心centroid=np.mean(X,axis=0)# 中心化數據X_cX_centered=X-centroid# 標準化數據X_sstd_dev=np.std(X,axis=0,ddof=1)# 格拉姆矩陣Ggram_matrix=np.dot(X.T,X)# 協方差矩陣Ccov_matrix=np.cov(X,rowvar=False)# 相關系數矩陣Rcorr_matrix=np.corrcoef(X,rowvar=False)return centroid, X_centered, std_dev, gram_matrix, cov_matrix, corr_matrix# Test the function
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
centroid, X_centered, std_dev, gram_matrix, cov_matrix, corr_matrix = calculate_statistics(X)print("Centroid:", centroid)
print("Centered data:", X_centered)
print("Standard deviation:", std_dev)
print("Gram matrix:", gram_matrix)
print("Covariance matrix:", cov_matrix)
print("Correlation matrix:", corr_matrix)
Centroid: [4. 5. 6.]
Centered data: [[-3. -3. -3.][ 0. 0. 0.][ 3. 3. 3.]]
Standard deviation: [3. 3. 3.]
Gram matrix: [[ 66 78 90][ 78 93 108][ 90 108 126]]
Covariance matrix: [[9. 9. 9.][9. 9. 9.][9. 9. 9.]]
Correlation matrix: [[1. 1. 1.][1. 1. 1.][1. 1. 1.]]