digits.png 숫자 영상에는 0부터 9까지의 숫자가 각각 가로로 100개, 세로로 다섯 개씩 적혀 있습니다. 각각의 숫자는 20×20 픽셀 크기로 적혀 있으며, digits.png 숫자 영상의 전체 크기는 2000×1000입니다. 이 영상을 이용하여 머신 러닝 알고리즘을 학습시키려면 각각의 숫자 영상을 부분 영상으로 추출하여 훈련 데이터를 생성해야 합니다.
보통 머신 러닝으로 영상을 인식 또는 분류할 경우, 영상으로부터 인식 목적에 적합한 특징 벡터를 추출하여 머신 러닝 입력으로 사용합니다. 그러나 이 절에서는 단순히 20×20 숫자 영상 픽셀 값 자체를 kNN 알고리즘 입력으로 사용하겠습니다. digits.png 숫자 영상에 적혀 있는 필기체 숫자들이 대체로 20×20 부분 영상 정중앙에 위치해 있고, 숫자 크기도 거의 일정하기 때문에 픽셀 값을 그대로 이용해도 충분한 인식 결과를 얻을 수 있기 때문입니다.3 또한 5000개의 숫자 영상 데이터를 훈련 데이터와 테스트 데이터로 구분하지 않고, 5000개 전체를 학습에 사용하겠습니다. 대신 필기체 숫자 인식 테스트를 위한 간단한 GUI 인터페이스를 제공하는 형태로 예제 프로그램을 만들겠습니다.
숫자 영상 픽셀 값 자체를 이용하여 KNearest 훈련 데이터 행렬을 만드는 과정을 그림 15-7에 나타냈습니다. 한 장의 숫자 영상은 20×20 픽셀 크기이고, 이 픽셀 값을 모두 일렬로 늘어놓으면 1×400 크기의 행렬로 변환할 수 있습니다. 즉, 필기체 숫자 훈련 데이터 하나는 400개의 숫자 값으로 표현되고, 이는 400차원 공간에서의 한 점과 같습니다. digits.png 영상에 있는 각각의 숫자 영상을 1×400 행렬로 바꾸고, 이 행렬을 모두 세로로 쌓으면 전체 숫자 영상 데이터를 표현하는 5000×400 크기의 행렬을 만들 수 있습니다. 그리고 이 행렬을 KNearest 클래스의 훈련 데이터로 전달합니다.
▲ 그림 15-7 픽셀 값 자체를 이용한 필기체 숫자 학습
3 숫자 영상에서 유효한 특징 벡터를 추출하여 머신 러닝에서 학습하는 방법은 15.3.3절에서 예제를 통해 알아보도록 하겠습니다.