Hướng dẫn python normalize covariance matrix - python chuẩn hóa ma trận hiệp phương sai

Tìm cách tạo ra một ma trận hiệp phương sai bằng Python?

Nếu vậy, bạn sẽ thấy cách tạo ra một ma trận như vậy bằng cả Numpy và Pandas.

Bước 1: Thu thập dữ liệu

Để bắt đầu, bạn sẽ cần thu thập dữ liệu sẽ được sử dụng cho ma trận hiệp phương sai.

Đối với các mục đích trình diễn, hãy để sử dụng dữ liệu sau đây về 3 biến:

Một B C
45 38 10
37 31 15
42 26 17
35 28 21
39 33 12

Bước 2: Nhận ma trận hiệp phương sai dân số bằng cách sử dụng Python

Để có được ma trận hiệp phương sai dân số (dựa trên N), bạn sẽ cần phải đặt sự thiên vị thành đúng trong mã dưới đây.

Đây là mã Python hoàn chỉnh để lấy ma trận hiệp phương sai dân số bằng cách sử dụ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 biểu diễn trực quan của ma trận

Bạn có thể sử dụng các gói Seaborn và Matplotlib để đại diệ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()

Xuất phát ma trận hiệp phương sai mẫu

Để có được hiệp phương sai mẫu (dựa trên N-1), bạn sẽ cần phải đặt sai 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 để có được ma trận hiệp phương sai mẫu.

Sau đó, bạn có thể áp dụng 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 có thể nhận được cùng một ma trận như được bắt nguồn 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ể đại 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ể kiểm tra hướng dẫn này cho các bước để tạo ma trận tương quan trong Python.

________ 12 ________ 13 (m, y = none, rowvar = true(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None, aweights=None)[source]

Ước tính một ma trận hiệp phương sai, dữ liệu và trọng số được đưa ra.

Hiệp phương sai chỉ ra mức độ mà hai biến khác nhau. Nếu chúng ta kiểm tra các mẫu n chiều, x = [x_1, x_2, ... x_n]^t, thì phần tử ma trận hiệp phương sai c_ {ij} là hiệp phương sai của x_i và x_j. Phần tử C_ {ii} là phương sai của x_i.X = [x_1, x_2, ... x_N]^T, then the covariance matrix element C_{ij} is the covariance of x_i and x_j. The element C_{ii} is the variance of x_i.

Xem các ghi chú cho một phác thảo của thuật toán.

Parameters:m:array_like : array_like

Một mảng 1-D hoặc 2-D chứa nhiều biến và quan sát. Mỗi hàng m đại diện cho một biến và mỗi cột một quan sát duy nhất của tất cả các biến đó. Cũng xem Rowvar dưới đây.

y: mảng_like, tùy chọn : array_like, optional

Một tập hợp các biến và quan sát bổ sung. y có hình thức tương tự như của m.

Rowvar: Bool, Tùy chọn : bool, optional

Nếu RowVar là đúng (mặc định), thì mỗi hàng đại diện cho một biến, với các quan sát trong các cột. Mặt khác, mối quan hệ được chuyển đổi: mỗi cột đại diện cho một biến, trong khi các hàng chứa các quan sát.

Xu hướng: Bool, tùy chọn : bool, optional

Bình thường hóa mặc định (sai) là của

[[ 12.64   7.68  -9.6 ]
 [  7.68  17.36 -13.8 ]
 [ -9.6  -13.8   14.8 ]]
4, trong đó
[[ 12.64   7.68  -9.6 ]
 [  7.68  17.36 -13.8 ]
 [ -9.6  -13.8   14.8 ]]
5 là số lượng quan sát được đưa ra (ước tính không thiên vị). Nếu sai lệch là đúng, thì bình thường hóa là bằng
[[ 12.64   7.68  -9.6 ]
 [  7.68  17.36 -13.8 ]
 [ -9.6  -13.8   14.8 ]]
5. Các giá trị này có thể được ghi đè bằng cách sử dụng từ khóa
[[ 12.64   7.68  -9.6 ]
 [  7.68  17.36 -13.8 ]
 [ -9.6  -13.8   14.8 ]]
7 trong các phiên bản Numpy> = 1.5.

DDOF: int, tùy chọn : int, optional

Nếu không

[[ 12.64   7.68  -9.6 ]
 [  7.68  17.36 -13.8 ]
 [ -9.6  -13.8   14.8 ]]
8 Giá trị mặc định được ngụ ý bởi sự thiên vị bị ghi đè. Lưu ý rằng
[[ 12.64   7.68  -9.6 ]
 [  7.68  17.36 -13.8 ]
 [ -9.6  -13.8   14.8 ]]
9 sẽ trả về ước tính không thiên vị, ngay cả khi cả hai đối thủ và sự kinh ngạc được chỉ định và
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()
0 sẽ trả về mức trung bình đơn giản. Xem các ghi chú cho các chi tiết. Giá trị mặc định là
[[ 12.64   7.68  -9.6 ]
 [  7.68  17.36 -13.8 ]
 [ -9.6  -13.8   14.8 ]]
8.

Mới trong phiên bản 1.5.

Feights: Array_like, int, Tùy chọn : array_like, int, optional

Mảng 1-D trọng lượng tần số nguyên; Số lần mỗi vectơ quan sát nên được lặp lại.

Mới trong phiên bản 1.10.

Aweights: Array_like, Tùy chọn : array_like, optional

Mảng 1-D trọng lượng vector quan sát. Các trọng số tương đối này thường lớn đối với các quan sát được coi là quan trọng và nhỏ hơn đối với các quan sát được coi là ít quan trọng hơn. Nếu

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()
0, mảng các trọng số có thể được sử dụng để gán xác suất cho các vectơ quan sát.

Mới trong phiên bản 1.10.

Returns:out:ndarray : ndarray

Ma trận hiệp phương sai của các biến.

Xem thêm

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()
3 Ma trận hiệp phương sai

Ghi chú

Giả sử rằng các quan sát nằm trong các cột của mảng quan sát M và cho

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()
4 và
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()
5 cho sự ngắn gọn. Các bước để tính toán hiệp phương sai có trọng số như sau:

>>> w = f * a
>>> v1 = np.sum(w)
>>> v2 = np.sum(w * a)
>>> m -= np.sum(m * w, axis=1, keepdims=True) / v1
>>> cov = np.dot(m * w, m.T) * v1 / (v1**2 - ddof * v2)

Lưu ý rằng khi

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()
6, hệ số chuẩn hóa
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()
7 đi qua
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()
8 như bình thường.

Ví dụ

Hãy xem xét hai biến, x_0 và x_1, tương quan hoàn hảo, nhưng theo hướng ngược lại:x_0 and x_1, which correlate perfectly, but in opposite directions:

>>> x = np.array([[0, 2], [1, 1], [2, 0]]).T
>>> x
array([[0, 1, 2],
       [2, 1, 0]])

Lưu ý cách x_0 tăng trong khi x_1 giảm. Ma trận hiệp phương sai cho thấy điều này rõ ràng:x_0 increases while x_1 decreases. The covariance matrix shows this clearly:

[[ 12.64   7.68  -9.6 ]
 [  7.68  17.36 -13.8 ]
 [ -9.6  -13.8   14.8 ]]
0

Lưu ý rằng phần tử C_ {0,1}, hiển thị mối tương quan giữa X_0 và X_1, là âm.C_{0,1}, which shows the correlation between x_0 and x_1, is negative.

Hơn nữa, lưu ý cách kết hợp x và y:

[[ 12.64   7.68  -9.6 ]
 [  7.68  17.36 -13.8 ]
 [ -9.6  -13.8   14.8 ]]
1