Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 두 데이터 집합의 공분산(Covariance) 계산하기

이번 글에서는 C++를 이용해 두 데이터 집합의 공분산(Covariance)을 계산하는 프로그램을 만들어 보겠습니다.

공분산이란?

공분산은 두 확률 변수가 함께 얼마나 변하는지를 나타내는 통계적 척도입니다. 두 값이 같은 방향으로 움직이면 공분산은 양수가 되고, 반대 방향으로 움직이면 음수가 됩니다. 즉, 한 변수가 증가할 때 다른 변수도 증가하는 경향이 있으면 양의 공분산을, 하나는 증가하고 다른 하나는 감소하는 경향이 있으면 음의 공분산을 갖습니다.

표본 공분산은 다음 수식으로 정의됩니다.

cov(X, Y) = Σ (xi − x̄)(yi − ȳ) / (n − 1)

여기서 x̄와 ȳ는 각 배열의 평균이며, n은 데이터의 개수입니다.

C++ 구현 예제

아래 코드는 먼저 배열의 평균을 구하는 mean() 함수를 정의한 뒤, 이를 활용해 공분산을 계산하는 covariance() 함수를 구현한 예제입니다.

#include <bits/stdc++.h>
using namespace std;

// 평균을 구하는 함수
float mean(float arr[], int n){
    float sum = 0;
    for(int i = 0; i < n; i++)
        sum = sum + arr[i];
    return sum / n;
}

// 공분산을 계산하는 함수
float covariance(float arr1[], float arr2[], int n){
    float sum = 0;
    for(int i = 0; i < n; i++)
        sum = sum + (arr1[i] - mean(arr1, n)) * (arr2[i] - mean(arr2, n));
    return sum / (n - 1);
}

int main(){
    float arr1[] = {65.21, 64.75, 65.26, 65.76, 65.96};
    int n = sizeof(arr1) / sizeof(arr1[0]);

    float arr2[] = {67.25, 66.39, 66.12, 65.70, 66.64};
    int m = sizeof(arr2) / sizeof(arr2[0]);

    // 두 배열의 크기가 같을 때만 계산 수행
    if (m == n)
        cout << covariance(arr1, arr2, m);
    return 0;
}

코드 설명

  • mean() 함수: 배열의 모든 요소를 더한 뒤 요소 개수 n으로 나누어 평균을 반환합니다.
  • covariance() 함수: 각 배열의 편차(값 − 평균)를 서로 곱해 모두 더한 후, (n − 1)로 나누어 표본 공분산을 구합니다.
  • main() 함수: 두 개의 실수 배열을 준비하고, 두 배열의 크기가 동일한 경우에만 공분산을 계산하여 출력합니다.

실행 결과

-0.0580511

결과가 음수(−0.0580511)로 나온 것을 확인할 수 있습니다. 이는 두 데이터 집합이 대체로 반대 방향으로 움직이는, 즉 음의 상관 관계를 가진다는 것을 의미합니다.