이 포스트는 ⌜혼자 공부하는 머신러닝+딥러닝⌟ 도서를 참고하여 작성하였습니다.
머신러닝 알고리즘은 크게 지도학습과 비지도 학습으로 나눌 수 있다. 지도 학습 알고리즘은 훈련하기 위한 데이터와 정답이 필요하다. 도미와 빙어의 예에서는 생선의 길이와 무게를 알고리즘에 사용했다. 이 경우 정답은 도미인지 아닌지의 여부이다. 지도 학습에서는 데이터와 정답을 입력(input)과 타깃(target)이라 부르고, 이 둘을 합쳐 훈련 데이터(training data)라고 부른다.
앞서 언급했듯이 입력으로 사용된 길이와 무게를 특성(feature)이라고 한다. 도미와 빙어를 구분하는 데 사용한 길이와 무게가 특성이 된다.
지도 학습은 정답(타겟, target)이 있으니 알고리즘이 정답을 맞히는 것을 학습한다. 반면 비지도 학습 알고리즘은 타깃 없이 입력 데이터만 사용한다. 이런 종류의 알고리즘은 정답을 사용하지 않으므로 무언가를 맞히기보다 데이터 처리에 도움을 준다.
k-최근접 이웃 알고리즘의 경우 입력 데이터와 타깃(정답)을 사용했으므로 당연히 지도 학습 알고리즘이다.
도미와 빙어의 데이터와 타깃을 주고 훈련한 후, 같은 데이터로 테스트 한다면 당연히 전부 맞출 것이다. 연습문제와 시험문제가 달라야 올바르게 학생의 능력을 평가할 수 있듯이 머신러닝 알고리즘의 성능을 제대로 평가하려면 훈련 데이터와 평가에 사용할 데이터가 각각 달라야 한다.
이러한 문제를 해결하기 위해 우리는 이미 준비된 데이터에서 일부를 분리해 사용하는 방식을 대체로 사용한다. 평가에 사용하는 데이터를 테스트 세트(test set), 훈련에 사용하는 데이터를 훈련 세트(train set)라고 부른다.
훈련 세트와 테스트 세트에 샘플이 골고루 섞여 있지 않으면 샘플링이 한쪽으로 치우쳤다는 의미로 샘플링 편향(sampling bias)라고 부른다. 샘플링 편향을 해결하기 위해 훈련 세트와 테스트 세트를 나누기 전에 섞는 단계 혹은 샘플을 골고루 뽑는 방법을 택해야 한다.
Python의 대표적인 배열 라이브러리이다. Python의 리스트로 2차원 리스트를 표현할 수 있지만, 고차원 리스트를 표현하려면 매우 번거롭다. NumPy는 고차원의 배열을 손쉽게 만들고 조작할 수 있는 간편한 도구를 많이 제공한다.
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]
arr = np.array([[1, 2], [3, 4], [5, 6]])
np.random.shuffle(arr)
print(arr)
-> [[3 4]
[5 6]
[1 2]]