본문 바로가기
AI Naver boost camp/[Week 01] Pytorch

Numpy - 표준편차, randn

by AI-BT 2024. 8. 5.
728x90
반응형

편차, 분산, 표준편차

1. 편차 (Deviation)

  • 각 데이터 포인트와 평균 사이의 차이
  • 개별 데이터 값과 평균의 차이를 계산

하나의 변량이 평균으로부터 얼마나 떨어져 있는가를 나타내는 값이며,

모든 편차의 합은 무조건 0이 나오므로 의미있는 결과물을 얻기 위해 편차에 제곱하여 평균을 구한 후 분산을 구한다.

 

2. 분산 (Variance)

  • 데이터가 평균을 중심으로 얼마나 퍼져 있는지를 나타낸다.
  • 편차의 제곱을 평균한 값
  • 분산을 구하면 양수 값을 가지게 되어 편차의 분호에 영향을 받지 않는다.

 

3. 표준편차

  • 분산의 제곱근 
  • 데이터 퍼짐 정도를 원래 데이터와 동일한 단위로 표현한다.

분산하고 표준편차하고 무슨 차이가 있을까?

분산은 데이터와 평균 사이의 차이의 제곱의 평균인데, 
예를들어 데이터가 "달러" 이라면 분산은 달러^2 이다.

 

근데 표준편차는 분산의 제곱근이니깐,

원래 데이터와 동일한 단위를 가지므로 해석이 더 직관적 이다.

 

import numpy as np

# 예시 데이터
data = np.array([1, 2, 3, 4, 5])

# 평균
mean = np.mean(data)

# 편차
deviations = data - mean

# 분산 (표본 분산)
variance_sample = np.var(data)

# 표준편차 (표본 표준편차)
std_dev_sample = np.std(data)


print("데이터:", data)
print("평균:", mean)
print("편차:", deviations)
print("표본 분산:", variance_sample)
print("표본 표준편차:", std_dev_sample)

 

결과

데이터: [1 2 3 4 5]
평균: 3.0
편차: [-2. -1.  0.  1.  2.]
표본 분산: 2.0
표본 표준편차: 1.4142135623730951

 

 

randn, rand, randint 차이

1. randn

설명: 표준 정규분포 (평균 0, 표준편차 1)를 따르는 난수를 생성

용도: 통계적 분석, 모형 생성 등에서 정규 분포된 데이터를 생성할 때 유용합니다.

import numpy as np
data = np.random.randn(5)
print(data)

 

2. rand

설명: 0과 1 사이의 균등 분포를 따르는 난수를 생성

용도: 균일한 확률로 값을 뽑아야 할 때, 예를 들어 무작위 추출, 시뮬레이션 등에 사용합니다.

import numpy as np
data = np.random.rand(5)
print(data)

 

3. randint

설명: 주어진 범위 내에서 정수형 난수를 생성합니다.

용도: 정수형 난수를 필요로 하는 경우, 예를 들어 인덱스 선택, 샘플링 등에 사용합니다

import numpy as np
data = np.random.randint(1, 10, size=5)
print(data)

 

 

matplotlib 를 사용하여 비교

 

import numpy as np
import matplotlib.pyplot as plt

# 난수 데이터 생성
data_randn = np.random.randn(1000)  # 표준 정규 분포 난수 1000개
data_rand = np.random.rand(1000)    # 0과 1 사이의 균등 분포 난수 1000개
data_randint = np.random.randint(1, 10, size=1000)  # 1과 9 사이의 정수 난수 1000개

# 그래프 그리기
fig, axs = plt.subplots(3, 1, figsize=(10, 15))

# randn 히스토그램
axs[0].hist(data_randn, bins=30, color='blue', alpha=0.7)
axs[0].set_title('randn: 표준 정규 분포')
axs[0].set_xlabel('값')
axs[0].set_ylabel('빈도')

# rand 히스토그램
axs[1].hist(data_rand, bins=30, color='green', alpha=0.7)
axs[1].set_title('rand: 0과 1 사이의 균등 분포')
axs[1].set_xlabel('값')
axs[1].set_ylabel('빈도')

# randint 히스토그램
axs[2].hist(data_randint, bins=np.arange(1, 11) - 0.5, color='red', alpha=0.7, rwidth=0.8)
axs[2].set_title('randint: 1과 9 사이의 정수형 난수')
axs[2].set_xlabel('값')
axs[2].set_ylabel('빈도')

# 그래프 간격 조정
plt.tight_layout()
plt.show()

 

 

728x90
반응형

댓글