[ML] 데이터 다루기

이지호·2023년 9월 25일
1

ML

목록 보기
2/6

이 포스트는 ⌜혼자 공부하는 머신러닝+딥러닝⌟ 도서를 참고하여 작성하였습니다.

1. 훈련 세트와 테스트 세트

(1) 지도 학습과 비지도 학습

머신러닝 알고리즘은 크게 지도학습과 비지도 학습으로 나눌 수 있다. 지도 학습 알고리즘은 훈련하기 위한 데이터와 정답이 필요하다. 도미와 빙어의 예에서는 생선의 길이와 무게를 알고리즘에 사용했다. 이 경우 정답은 도미인지 아닌지의 여부이다. 지도 학습에서는 데이터와 정답을 입력(input)과 타깃(target)이라 부르고, 이 둘을 합쳐 훈련 데이터(training data)라고 부른다.

앞서 언급했듯이 입력으로 사용된 길이와 무게를 특성(feature)이라고 한다. 도미와 빙어를 구분하는 데 사용한 길이와 무게가 특성이 된다.

지도 학습은 정답(타겟, target)이 있으니 알고리즘이 정답을 맞히는 것을 학습한다. 반면 비지도 학습 알고리즘은 타깃 없이 입력 데이터만 사용한다. 이런 종류의 알고리즘은 정답을 사용하지 않으므로 무언가를 맞히기보다 데이터 처리에 도움을 준다.

k-최근접 이웃 알고리즘의 경우 입력 데이터와 타깃(정답)을 사용했으므로 당연히 지도 학습 알고리즘이다.

(2) 훈련 세트와 테스트 세트

도미와 빙어의 데이터와 타깃을 주고 훈련한 후, 같은 데이터로 테스트 한다면 당연히 전부 맞출 것이다. 연습문제와 시험문제가 달라야 올바르게 학생의 능력을 평가할 수 있듯이 머신러닝 알고리즘의 성능을 제대로 평가하려면 훈련 데이터와 평가에 사용할 데이터가 각각 달라야 한다.

이러한 문제를 해결하기 위해 우리는 이미 준비된 데이터에서 일부를 분리해 사용하는 방식을 대체로 사용한다. 평가에 사용하는 데이터를 테스트 세트(test set), 훈련에 사용하는 데이터를 훈련 세트(train set)라고 부른다.

1) 샘플링 편향

훈련 세트와 테스트 세트에 샘플이 골고루 섞여 있지 않으면 샘플링이 한쪽으로 치우쳤다는 의미로 샘플링 편향(sampling bias)라고 부른다. 샘플링 편향을 해결하기 위해 훈련 세트와 테스트 세트를 나누기 전에 섞는 단계 혹은 샘플을 골고루 뽑는 방법을 택해야 한다.

(3) NumPy

Python의 대표적인 배열 라이브러리이다. Python의 리스트로 2차원 리스트를 표현할 수 있지만, 고차원 리스트를 표현하려면 매우 번거롭다. NumPy는 고차원의 배열을 손쉽게 만들고 조작할 수 있는 간편한 도구를 많이 제공한다.

  • seed()는 NumPy에서 난수를 생성하기 위한 정수 초깃값을 지정한다. 초깃값이 같으면 동일한 난수를 뽑을 수 있기 때문이다. 따라서 랜덤 함수의 결과를 동일하게 재현하고 싶을 때 사용한다.
  • arange()는 일정한 간격의 정수 or 실수 배열을 만든다. 기본 간격은 1이다. parameter가 하나이면 배열에 포함되지 않는 종료 숫자를 의미한다.
print(np.arange(3))
-> [0, 1, 2]

print(np.arange(1, 3))
-> [1, 2]

print(np.arange(1, 3, 0.2))
-> [1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4, 2.6, 2.8]
  • shuffle()은 주어진 배열을 랜덤하게 섞는다. 다차원 배열일 경우 첫 번째 축에 대해서만 섞는다.
arr = np.array([[1, 2], [3, 4], [5, 6]])
np.random.shuffle(arr)
print(arr)

-> [[3 4]
	[5 6]
	[1 2]]

핵심 포인트:

  • 지도 학습 : 입력과 타깃을 전달하며 모델을 훈련한 다음 새로운 데이터를 예측하는 데 필요하다.
  • 비지도 학습 : 타깃 데이터가 없어 입력 데이터에서 어떤 특징을 찾아내는데 주로 활용한다.
  • 훈련 세트 : 모델을 훈련할 때 사용하는 데이터이다. 클수록 좋아, 테스트 세트를 제외한 모든 데이터를 사용한다.
  • 테스트 세트 : 전체 데이터에서 20~30%를 테스트 세트로 사용하는 경우가 많다. 만약 전체 데이터가 굉장히 크다면 1%만 덜어내도 충분할 수 있다.
profile
새내기의 코딩일지

0개의 댓글

관련 채용 정보