[패스트캠퍼스 환급챌린지]딥러닝/Chapter 1. 통계

[패스트캠퍼스][환급 챌린지]Chapter 1. 딥러닝을 위한 통계 01-17 데이터 추출

포리셔 2023. 3. 8. 11:14

01-17 데이터 추출

자, 어느덧 통계 이론 파트의 마지막입니다. 그럼에도 이번 데이터 추출 부분은 그 중요성을 절대로 간과할 수 없는 부분입니다. ML 분야에서는 데이터를 랜덤으로 추출해야 하는 경우가 많기 때문입니다.

데이터 추출 예시

Case 1. 한 개의 원소 랜덤 추출

100개의 데이터 중 랜덤으로 1개를 추출하는 상황을 가정해보겠습니다(이를 데이터를 샘플링한다라고도 표현합니다).

import numpy as np
import random

arr = np.arange(1, 101)
sampled = random.choice(arr)
print(sampled)
28

넘파이의 arange 함수를 이용해 1부터 100까지 총 100개의 정수로 채워진 배열을 만들고, random 모듈의 choice() 메서드를 이용해 arr 배열의 100가지 원소 중 한 가지를 랜덤으로 선택(추출)합니다. 랜덤으로 결과가 출력되기 때문에 저는 이 예시에서 28이라는 결과를 얻었지만, 코드를 다시 한 번 돌려보신다면 28이 아닌 다른 값을 출력할 수도 있다는 점 알아주세요.

Case 2. 중복 없이 여러 개의 원소 랜덤 추출

다음으로 임의로 $k$개의 데이터를 중복 없이 추출하는 경우를 알아보겠습니다. 이번에는 choice()를 대신해 sample() 메서드를 사용해보겠습니다. sample() 메서드는 주어진 배열에서 $k$개의 데이터를 중복 없이 추출하는 메서드입니다. 단, 원본 배열의 데이터 개수, 즉 원소의 개수를 초과할 수는 없습니다. 예를 들어 아래와 같이 배열 내의 개수가 100개일 경우, $k$는 100을 초과할 수 없습니다.

import numpy as np
import random

arr = list(np.arange(1, 101)) # list로 바꾸지 않으면 에러가 발생하므로 list 형태로 바꾸어주었습니다.
sampled = random.sample(arr, 5)
print(sampled)
[84, 2, 29, 39, 88]

이번에는 중복되지 않는 5개의 원소를 갖는 리스트를 반환합니다. 이 예제도 Case 1과 마찬가지로 여러분이 코드를 실행했을 때 이 결과와 다른 원소가 추출될 수 있습니다.

Case 3. 중복이 허용될 경우에 여러 개의 원소 랜덤 추출

한 걸음 더 나아가서 중복이 허용될 때 $k$개의 원소를 추출하는 방법을 알아보겠습니다. 크게 두 가지 방법이 있습니다.
첫 번째 방법은 choice() 메서드와 반복문을 활용한 방법입니다.

import numpy as np
import random

arr = list(np.arange(1, 101))
sampled = [random.choice(arr) for i in range(5)]
print(sampled)
# 원소가 100개로 많은 편이기 때문에 반드시 중복되는 수가 나오지는 않을 수도 있습니다!
# 실제로 강의 예제에서는 원소 5개 중에서 3개를 무작위로 추출하는 방식이었기 때문에,
# arr의 원소 개수를 줄이면 중복되는 원소가 잘 나올 것입니다.
[51, 30, 51, 53, 94]

두 번째 방법은 random 라이브러리에 내장된 choices()라는 메서드를 활용하는 방법입니다. choice라는 이름 뒤에 s가 붙어 있으니 구별에 주의하세요! 이 메서드는 choice() 메서드에 더해 몇 개의 데이터를 추출할 지를 결정하는 k라는 인수를 추가로 입력받습니다. 참고로 이 메서드는 중복을 허용한 추출을 실행하기 때문에 sample()과 달리 $k$가 원소의 개수보다 크더라도 괜찮습니다.

import numpy as np
import random

arr = list(np.arange(1, 101))
sampled = random.choices(arr, k=5)
print(sampled)
[20, 80, 25, 25, 45]

균등분포에서의 추출

$\left[0,1\right]$ 범위의 균등 분포에서 5개의 데이터를 추출해보겠습니다. 파이썬의 random 라이브러리가 기본으로 제공되는 것과 별개로, 넘파이 라이브러리에도 독자적인 random 모듈이 존재합니다. 이번에는 이 random 모듈의 uniform() 메서드를 이용해 균등 분포에서의 추출을 실행하는 코드입니다.

import numpy as np

sampled = np.random.uniform(0, 1, 5)
print(sampled)
[0.508445   0.53027992 0.23235765 0.17037083 0.39544973]

정규분포에서의 추출

이번에는 정규분포를 따르는 데이터에서의 추출을 보여드리겠습니다. 편의상 표준정규분포를 가정하고, random 모듈의 normal() 메서드를 이용해 5개의 데이터를 추출합니다. 이 메서드에서 첫번째 인수는 평균($\mu$)을, 두번째 인수는 표준편차($\sigma$)를 뜻합니다.

import numpy as np

sampled = np.random.normal(0, 1, 5)
print(sampled)
[-0.24988833 -1.04608114 -0.18948975 -1.20839426  0.95628756]

17일차 후기

커리큘럼 상 통계 파트는 이것으로 종료됩니다. 제가 대학원에 있던 동안에도 학부, 대학원 확률및통계 과목은 비단 머신러닝이 아니더라도 여러 분야에서 써 볼 여지가 많은, 유용한 강의였습니다. 앞으로도 ML 분야를 공부하다보면 잊을만 할 때 튀어나오니 잘 공부해두심이 좋을 듯 합니다. 반대로 꼭 이 커리큘럼에서 다룬 내용이 아니더라도 ML 분야에 많이 적용되니 따로 통계 공부를 더 하시는 것도 나쁘지는 않습니다.
그럼 이제 내일부터는 자료구조...

뭔 미지의 영역으로 들어가는 기분

http://bit.ly/3Y34pE0

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.