Covariance matrix - Part 1
Giới thiệu
Trong phần này chúng ta sẽ đi tìm hiểu về covariance matrix và sẽ giải thích nó dưới dạng hình vẽ để chúng ta có thể hình dung tốt hơn.
Chúng ta đã biết về variance và standard deviation.
Hình bên trên chúng ta biểu diên Gaussian distribution với mean
trong đó
Chú ý: Công thức bên trên xác định variance cho sample, đối với population thì chúng ta sử dụng
Tuy nhiên variance chỉ xác được được spread of the data (sự mở rộng) theo một trục nào đó hay single random variable. Còn đối với 2D feature space hay dữ liệu trong không gian 2 chiều thì sao?
Dữ liệu nhiều chiều
Đối với dữ liệu này chúng ta có thể tính variance
Mẫu số là
Lúc này chúng ta có thể xây dựng được covariance matrix như sau:
Nếu
Chúng ta hoàn toàn có thể dựa vào công thức (2) để xác định covariance giữa các biến. Bài tiếp theo chúng ta sẽ đưa ra công thức tổng quát dưới dạng vector.
import numpy as np
import matplotlib.pyplot as plt
def plot_data(means, cov_matrix, xlim=(13, 28), ylim=(13,28)):
data = np.random.multivariate_normal(means, cov_matrix, size=500)
# plot
fig = plt.figure(figsize=(8,6))
plt.scatter(data[:, 0], data[:, 1], s=2)
plt.xlim(xlim)
plt.ylim(ylim)
plt.show()
# tạo data POSITIVE CORRELATION
means = np.array([20, 20])
cov_matrix = np.array([
[2, 1.5],
[1.5, 2]])
plot_data(means, cov_matrix)
Data với các features x, y có tương quan dương với nhau
# tạo data NEGATIVE CORRELATION
means = np.array([20, 20])
cov_matrix = np.array([
[1, -0.5],
[-0.5, 1]])
plot_data(means, cov_matrix)
Data với các features x, y có tương quan âm với nhau
Chú ý: correlation bị giới hạn trong đoạn [-1, 1] tuy nhiên covariance không bị giới hạn. Giá trị cao không đồng nghĩa chúng thay đổi cùng nhau nhiều. Giá trị này phụ thuộc vào khoảng giá trị mà các biến nhận được. Xem hai ví dụ bên dưới.
means = np.array([200, 200])
cov_matrix = np.array([
[20, 20],
[20, 20]])
plot_data(means, cov_matrix, xlim=(180, 220), ylim=(180, 220))
means = np.array([20, 20])
cov_matrix = np.array([
[5, 5],
[5, 5]])
plot_data(means, cov_matrix, xlim=(10, 30), ylim=(10, 30))
Nhận thấy ở đây covariance khác nhau nhưng
Ví dụ
Chúng ta sẽ có một ví dụ để hiểu rõ hơn cách xác định covariance matrix dựa trên data chúng ta có.
Giả sử chúng ta có các dữ liệu, mỗi dữ liệu có 2 thành phần chiều cao và cân nặng của mỗi người được khảo sát. Dữ liệu được cho trong bảng dưới đây.
STT | Chiều cao (m) | Cân nặng (kg) |
---|---|---|
1 | 1.6 | 50 |
2 | 1.7 | 52 |
3 | 1.75 | 55 |
4 | 1.63 | 49 |
Chúng ta làm ví dụ đơn giản như này. Ở đây số examples
Như vậy ta sẽ có covariance matrix cho bộ data trên như sau:
Chúng ta có thể kiểm tra lại kết quả với thư viện Numpy
# Khởi tạo data
x = np.array([
[1.6, 50],
[1.7, 52],
[1.75, 55],
[1.63, 49]
])
cov = np.cov(x.T)
cov
Kết quả nhận được với Numpy
array([[4.60000000e-03, 1.66666667e-01],
[1.66666667e-01, 7.00000000e+00]])
Nhận thấy kết quả đã khớp nhau, như vậy cách chúng ta tính ở trên là đúng.
Phần 1 sẽ dừng ở đây. Phần tiếp theo mình sẽ nói về cách xác định covariance matrix dưới dạng vectorization và tìm hiểu về eigendecomposition cho covariance matrix.