Hướng dẫn covariance matrix from scratch python - ma trận hiệp phương sai từ python đầu

Tôi đang cố gắng mô phỏng chức năng np.cov bằng cách triển khai ma trận hiệp phương sai từ đầu. Tuy nhiên, mã của tôi dường như không cung cấp đầu ra giống như np.cov

Code:

import pandas as pd
import numpy as np

df = pd.read_csv('C:/Users/User/Downloads/Admission_Predict.csv')
X = df.values
N, M = X.shape

means = np.zeros(M)  # M many of them
stdevs = np.zeros(M)
Xcoeff = np.zeros((M, M))

# Mean
for i in range(M):
    means[i] = np.sum(X[:, i]) / N
    stdevs[i] = math.sqrt(sum(pow(x-means[i], 2) for x in X[:, i]) / (N-1))

    # Covariance matrix
    for j in range(M):
        mat0 = mat[i][j] - [means][0].reshape(M, -1)
        covariance = (mat0 * mat0.T) / (N-1)

Giá trị ma trận mong muốn

print(np.cov(df))

> [[14128.00654107 13533.16488393 13222.07435357 ... 13831.92691786
>   13050.78170893 13961.07189821]  [13533.16488393 12968.32105536 12670.19783929 ... 13249.25808929
>   12505.84390893 13372.93946964]  [13222.07435357 12670.19783929 12379.07033571 ... 12944.65915
>   12218.34000357 13065.526925  ]  ...  [13831.92691786 13249.25808929 12944.65915    ... 13542.10545
>   12777.00158214 13668.54191786]  [13050.78170893 12505.84390893 12218.34000357 ... 12777.00158214
>   12060.0142125  12896.28555179]  [13961.07189821 13372.93946964 13065.526925   ... 13668.54191786
>   12896.28555179 13796.19808393]]

Giá trị ma trận đầu ra của tôi

print(covariance)

> [ 3.47493270e+02  1.17319616e+02  2.64636910e+00  2.98987496e+00
>   3.04758394e+00  8.70463072e+00 -1.45646482e-01  4.87503509e-02]

Hỏi ngày 13 tháng 9 năm 2021 lúc 6:51Sep 13, 2021 at 6:51

Hướng dẫn covariance matrix from scratch python - ma trận hiệp phương sai từ python đầu

Melololomelololomelololo

1412 Huy hiệu bạc10 Huy hiệu đồng2 silver badges10 bronze badges

4

Xem mã bên dưới, lưu ý rằng bạn cần đặt rowvar=False trong np.cov để tính toán hiệp phương sai giữa các cột khung dữ liệu.

import pandas as pd
import numpy as np

# Load the data
df = pd.read_csv('Admission_Predict.csv')

# Extract the data
X = df.values

# Extract the number of rows and columns
N, M = X.shape

# Calculate the covariance matrix
cov = np.zeros((M, M))

for i in range(M):

    # Mean of column "i"
    mean_i = np.sum(X[:, i]) / N

    for j in range(M):

        # Mean of column "j"
        mean_j = np.sum(X[:, j]) / N

        # Covariance between column "i" and column "j"
        cov[i, j] = np.sum((X[:, i] - mean_i) * (X[:, j] - mean_j)) / (N - 1)

# Compare with numpy covariance matrix
np_cov = np.cov(df.values, rowvar=False)
np_cov_diff = np.sum(np.abs(cov - np_cov))
print('Difference from numpy cov. mat.: {:.12f}'.format(np_cov_diff))
# Difference from numpy cov. mat.: 0.000000000000

# Compare with pandas covariance matrix
pd_cov = df.cov().values
pd_cov_diff = np.sum(np.abs(cov - pd_cov))
print('Difference from pandas cov. mat.: {:.12f}'.format(pd_cov_diff))
# Difference from pandas cov. mat.: 0.000000000000

Đã trả lời ngày 18 tháng 9 năm 2021 lúc 9:47Sep 18, 2021 at 9:47

Flavia Giammarinoflavia GiammarinoFlavia Giammarino

7.13410 Huy hiệu vàng26 Huy hiệu bạc36 Huy hiệu đồng10 gold badges26 silver badges36 bronze badges

Hướng dẫn về cách tính hiệp phương sai mà không cần sử dụng Numpy.

Hiệp phương sai là độ biến thiên chung của hai biến ngẫu nhiên, tức là nếu giá trị của biến x_ii tăng cách giá trị của x_ij thay đổi. Nếu giá trị của x_ii lớn hơn với giá trị của x_ij ngày càng lớn hơn (và nhỏ hơn với nhau), chúng ta có thể nói hiệp phương sai là dương. Nếu chúng di chuyển ở đối diện, thì hiệp phương sai là âm và nếu chúng không tương quan, hiệp phương sai là 0 (không).x_ii increases how the value of x_ij changes. If the value of x_ii gets larger with the value of x_ij getting larger (and gets smaller together) we can say covariance is positive. If they move in opposite, then covariance is negative and if they are not correlation, covariance is 0 (zero).

Để tính toán 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 npa = [[1,2,3],[6,7,8]]
c1 = np.cov(a)
print(c1)
>>
[[1. 1.]
[1. 1.]]

Chúng tôi có thể thực hiện 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 làm thế nào để tính toán hiệp phương sai. Sự hiệp phương sai của một ma trận có thể được tính toán bằng cách sử dụng công thức dưới đây:

Công thức hiệp phương sai (Nguồn: Wikipedia)

Q_JK là phần tử trong ma trận hiệp phương sai (hàng thứ J, cột K-th). Vì vậy, về cơ bản, chúng tôi tính toán giá trị trung bình của từng vectơ cột và tổng hợp các sản phẩm khác biệt của các vectơ cột từ giá trị trung bình của chúng. is the element in the covariance matrix (j-th row, k-th column). So basically, we calculate the mean of each column vector and sum the products of differences of column vectors from their mean.

Để thực hiện điều này, trước tiên chúng tôi xác định hàm trợ giúp để tìm các giá trị hiệp phương sai Q_JK riêng lẻ được cung cấp hai vectơ cột của ma trận; tức là v_j, v_kq_jk covariance values given two column vectors of a matrix; i.e. v_j, v_k

Sau khi xác định hàm trợ giúp của chúng tôi, chúng tôi đã sẵn sàng để tính toán các giá trị hiệp phương sai cho từng ô trong ma trận. Đối với điều này, chức năng của chúng tôi sẽ nhận được một ma trận làm đầu vào và tạo ra một ma trận hiệp phương sai:

Đây là nó, chúng tôi đã hoàn thành! Ngoài ra, chúng tôi có thể thêm một vài đ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 hay 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 vector trước khi tính toán ma trận hiệp phương sai:

Mã cuối cùng sẽ trông giống như dưới đây:

Thêm nội dung tại Plainenglish.io. Đăng ký nhận bản tin hàng tuần miễn phí của chúng tôi. Nhận quyền truy cập độc quyền vào các cơ hội viết và lời khuyên trong sự bất hòa của cộng đồng của chúng tôi.plainenglish.io. Sign up for our free weekly newsletter. Get exclusive access to writing opportunities and advice in our community Discord.