더북(TheBook)

KNearest 객체는 기본적으로 분류를 위한 용도로 생성됩니다. KNearest 객체를 분류가 아닌 회귀에 적용하려면 KNearest::setIsClassifier() 멤버 함수에 false를 지정하여 호출해야 합니다.

virtual void KNearest::setIsClassifier(bool val);

val

이 값이 true이면 분류로 사용하고, false이면 회귀로 사용합니다.

 

KNearest 객체를 생성하고 속성을 설정한 후에는 StatModel::train() 함수를 이용하여 학습을 진행할 수 있습니다. KNearest 클래스의 경우에는 train() 함수에서 실제적인 학습이 진행되지는 않으며 단순히 훈련 데이터와 레이블 데이터를 KNearest 클래스 멤버 변수에 모두 저장하는 작업이 이루어집니다.

KNearest 클래스에서 훈련 데이터를 학습한 후, 테스트 데이터에 대한 예측을 수행할 때에는 주로 KNearest::findNearest() 멤버 함수를 사용합니다. KNearest 클래스에서도 StatModel:: predict() 함수를 사용할 수 있지만, KNearest::findNearest() 함수가 예측 결과와 관련된 정보를 더 많이 반환하기 때문에 유용합니다. KNearest::findNearest() 함수 원형은 다음과 같습니다.

virtual float KNearest::findNearest(InputArray samples, 
 int k,
                                    OutputArray results,
                                    OutputArray neighborResponses = noArray(),
                                    OutputArray dist = noArray()) const;

samples

테스트 데이터 벡터가 행 단위로 저장된 행렬. 입력 벡터의 차원은 훈련 벡터의 차원과 같아야 하며, 행렬 타입은 CV_32FC1이어야 합니다.

k

사용할 최근접 이웃 개수. 1보다 같거나 커야 합니다.

results

각 입력 샘플에 대한 예측(분류 또는 회귀) 결과를 저장한 행렬. samples.rows×1 크기를 갖고, 타입은 CV_32FC1입니다.

neighborResponses

예측에 사용된 k개의 최근접 이웃 클래스 정보를 담고 있는 행렬. samples.rows×k 크기를 갖고, 타입은 CV_32FC1입니다.

dist

입력 벡터와 예측에 사용된 k개의 최근접 이웃과의 거리를 저장한 행렬. samples.rows×k 크기를 갖고, 타입은 CV_32FC1입니다.

반환값

입력 벡터가 하나인 경우에 대한 응답이 반환됩니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.