Tính hiệp phương sai trong Python

Để 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.0
1

đầu ra

2.0
2

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)

Tính hiệp phương sai trong Python

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

cov() trong Python là gì?

hàm cov(). Hiệp phương sai cung cấp thước đo độ mạnh của mối tương quan giữa hai biến hoặc nhiều tập hợp biến . Phần tử ma trận hiệp phương sai Cij là hiệp phương sai của xi và xj. Phần tử Cii là phương sai của xi.

NumPy tính toán hiệp phương sai như thế nào?

NumPy không có chức năng tính trực tiếp hiệp phương sai giữa hai biến. Thay vào đó, nó có một hàm tính toán ma trận hiệp phương sai được gọi là cov() mà chúng ta có thể sử dụng để truy xuất hiệp phương sai.