Để có được ma trận hiệp phương sai dân số [dựa trên N], bạn sẽ cần đặt độ lệch thành True trong mã bên dưới
Đây là mã Python hoàn chỉnh để lấy ma trận hiệp phương sai dân số bằng gói NumPy
import numpy as np A = [45, 37, 42, 35, 39] B = [38, 31, 26, 28, 33] C = [10, 15, 17, 21, 12] data = np.array[[A, B, C]] cov_matrix = np.cov[data, bias=True] print[cov_matrix]
Chạy mã và bạn sẽ nhận được ma trận sau
[[ 12.64 7.68 -9.6 ]
[ 7.68 17.36 -13.8 ]
[ -9.6 -13.8 14.8 ]]
Bước 3. Nhận một đại diện trực quan của ma trận
Bạn có thể sử dụng các gói seaborn và matplotlib để thể hiện trực quan ma trận hiệp phương sai
Đây là mã hoàn chỉnh mà bạn có thể áp dụng trong Python
import numpy as np import seaborn as sn import matplotlib.pyplot as plt A = [45, 37, 42, 35, 39] B = [38, 31, 26, 28, 33] C = [10, 15, 17, 21, 12] data = np.array[[A, B, C]] cov_matrix = np.cov[data,bias=True] sn.heatmap[cov_matrix, annot=True, fmt='g'] plt.show[]
Rút ra ma trận hiệp phương sai mẫu
Để lấy hiệp phương sai mẫu [dựa trên N-1], bạn cần đặt độ lệch thành Sai trong mã bên dưới
Đây là mã dựa trên gói NumPy
import numpy as np A = [45, 37, 42, 35, 39] B = [38, 31, 26, 28, 33] C = [10, 15, 17, 21, 12] data = np.array[[A, B, C]] covMatrix = np.cov[data, bias=False] print[covMatrix]
Và đây là ma trận mà bạn sẽ nhận được
[[ 15.8 9.6 -12. ]
[ 9.6 21.7 -17.25]
[-12. -17.25 18.5 ]]
Bạn cũng có thể sử dụng gói Pandas để lấy ma trận hiệp phương sai mẫu
Sau đó, bạn có thể áp dụng đoạn mã sau bằng Pandas
import pandas as pd data = {'A': [45, 37, 42, 35, 39], 'B': [38, 31, 26, 28, 33], 'C': [10, 15, 17, 21, 12] } df = pd.DataFrame[data] cov_matrix = pd.DataFrame.cov[df] print[cov_matrix]
Bạn sẽ nhận được cùng một ma trận như được tạo ra bởi NumPy
A B C
A 15.8 9.60 -12.00
B 9.6 21.70 -17.25
C -12.0 -17.25 18.50
Cuối cùng, bạn có thể biểu diễn trực quan ma trận hiệp phương sai bằng cách sử dụng các gói seaborn và matplotlib
import pandas as pd import seaborn as sn import matplotlib.pyplot as plt data = {'A': [45, 37, 42, 35, 39], 'B': [38, 31, 26, 28, 33], 'C': [10, 15, 17, 21, 12] } df = pd.DataFrame[data] cov_matrix = pd.DataFrame.cov[df] sn.heatmap[cov_matrix, annot=True, fmt='g'] plt.show[]
Bạn cũng có thể muốn kiểm tra nguồn sau giải thích các bước đầy đủ để tạo Ma trận nhầm lẫn bằng Python. Ngoài ra, bạn có thể xem hướng dẫn này để biết các bước tạo Ma trận tương quan trong Python
Mối quan hệ có cấu trúc trong một ma trận các biến ngẫu nhiên được phân tách bằng công cụ cung cấp bởi ma trận hiệp phương sai. Nó được sử dụng để giải mã các biến và được thực hiện như một phép biến đổi sang các biến khác. Nó được gọi là yếu tố chính được sử dụng trong PCA [Phân tích thành phần chính]
Bây giờ, chúng ta lấy một ví dụ về hai vectơ 9 phần tử và tính ma trận hiệp phương sai thẳng
Thí dụ
2.01
đầu ra
2.02
Phần kết luận
Trong bài viết trên, chúng ta đã tìm hiểu về hiệp phương sai trong Python, nhờ đó chúng ta có thể xác định sự khác biệt giữa các biến
Hiệp phương sai là độ biến thiên chung của hai biến ngẫu nhiên, i. e. nếu giá trị của biến x_ii tăng thì giá trị của x_ij thay đổi như thế nào. Nếu giá trị của x_ii lớn hơn với giá trị của x_ij lớn hơn [và nhỏ hơn cùng nhau] thì chúng ta có thể nói hiệp phương sai là dương. Nếu chúng ngược chiều nhau thì hiệp phương sai là âm và nếu chúng không tương quan thì hiệp phương sai là 0 [không]
Để tính hiệp phương sai, chúng ta có thể sử dụng phương pháp hiệp phương sai của NumPy
import numpy as np
a = [[1,2,3],[6,7,8]]
c1 = np.cov[a]
print[c1]
>>
[[1. 1.]
[1. 1.]]
Chúng tôi có thể triển khai nó mà không cần sử dụng NumPy hoặc bất kỳ gói bên ngoài nào trong Python. Trước hết, chúng ta cần hiểu cách tính hiệp phương sai. Hiệp phương sai của ma trận có thể được tính bằng công thức dưới đây [nguồn. Wikipedia]
q_jk là phần tử trong ma trận hiệp phương sai [hàng thứ j, cột thứ k]. Vì vậy, về cơ bản, chúng tôi tính giá trị trung bình của từng vectơ cột và tính tổng các tích của sự khác biệt của các vectơ cột từ giá trị trung bình của chúng
Để thực hiện điều này, trước tiên chúng tôi xác định một hàm trợ giúp để tìm các giá trị hiệp phương sai q_jk riêng lẻ cho hai vectơ cột của ma trận; . e. v_j, v_k
def cov_value[x,y]:
mean_x = sum[x] / float[len[x]]
mean_y = sum[y] / float[len[y]]
sub_x = [i - mean_x for i in x]
sub_y = [i - mean_y for i in y]
sum_value = sum[[sub_y[i]*sub_x[i] for i in range[len[x]]]]
denom = float[len[x]-1]
cov = sum_value/denom
return cov
Sau khi xác định hàm trợ giúp, chúng ta sẵn sàng tính các giá trị hiệp phương sai cho từng ô trong ma trận. Đối với điều này, hàm của chúng ta sẽ lấy một ma trận làm đầu vào và tạo ra một ma trận hiệp phương sai
def covariance[arr]:
c = [[cov_value[a,b] for a in arr] for b in arr]
return c
Đây là nó, chúng ta đã hoàn thành. Ngoài ra, chúng tôi có thể thêm một số điều khiển bổ sung để kiểm tra xem định dạng và kích thước của đầu vào có chính xác không. Chúng ta có thể viết một hàm trợ giúp như bên dưới để kiểm tra độ dài vectơ trước khi tính ma trận hiệp phương sai