OpenCV:MachineLearning
Algorithms
- ANN_MLP - 인공 신경망(artificial neural network) 다층 퍼셉트론(multi-layer perceptron) 입니다. 여러 개의 은닉층을 포함한 신경망을 학습시킬 수 있고, 입력 데이터에 대한 결과를 예측할 수 있습니다.
- DTrees - 이진 의사 결정 트리(decision trees)알고리즘입니다. DTrees 클래스는 부스팅 알고리즘은 구현한 ml::Boost 클래스와 랜덤 트리(random tree) 알고리즘을 구현한 ml::RTree 클래스의 부모 클래스 역할을 합니다.
- Boost - 부스팅(boostring) 알고리즘입니다. 다수의 약한 불류기(weak classifier)에 적절한 가중치를 부여하여 성능이 좋은 분류기를 만드는 방법입니다.
- RTrees - 랜덤 트리(random tree) 또는 랜덤 포레스트(random forest) 알고리즘입니다. 입력 특징 벡터를 다수의 트리로 예측하고, 그 결과를 취합하여 분류 또는 회귀를 수행합니다.
- EM - 기댓값 최대화(Expectation Maximizaion)를 의미합니다. 가우시안 혼합 모델(Gaussian mixture model)을 이용한 군집화 알고리즘입니다.
- KNearest - k 최근접 이웃(K-Nearest Neighbors) 알고리즘입니다. K 최근접 이웃 알고리즘은 샘플 데이터와 인접한 k개의 학습 데이터를 찾고, 이 중 가장 많은 개수에 해당하는 클래스를 샘플 데이터 클래스로 지정합니다.
- LogisticRegression - 로지스틱 회귀(logistic regression). 이진 분류 알고리즘의 일종입니다.
- NormalBayesClassifier - 정규 베이즈 분류기 입니다. 정규 베이즈 분류기는 각 클래스의 특징 벡터가 정규 분포를 따른다고 가정합니다. 따라서 전체 데이터 분포는 가우시안 혼합 모델로 표현 가능합니다. 정규 베이즈 분류기는 학습 데이터로부터 각 클래스의 평균 벡터와 공분산 행렬을 계산하고, 이를 예측에 사용합니다.
- SVM - 서포트 벡터 머신(sipport vector machine) 알고리즘 입니다. 두 클래스의 데이터를 가장 여유있게 분리하는 초평면을 구합니다. 커널 기법을 이용하여 비선형 데이터 분류에도 사용할 수 있으며, 다중 클래스 분류 및 회귀에도 적용할 수 있습니다.
- SVMSDG - 통계적 그래디언트 하향(stochastic gradient descent) SVM. 통계적 그래디언트 하향 방법을 SVM에 적용함으로써 대용량 데이터에 대해서도 빠른 학습이 가능합니다.
APIs
머신 러닝 알고리즘 객체 생성
cv2.ml.XXX_create()
객체를 생성할 수 있습니다.
-
cv2.ml.SVM_create()
-
cv2.ml.KNearet_create()
- etc ...
반환값으로 각 머신 러닝 알고리즘 객체를 생성합니다.
머신 러닝 알고리즘 학습
cv2.ml_SVM.train
과 같은 train
함수로 학습을 할 수 있습니다. 적절한 인자를 입력해줘야 합니다.
Arguments:
-
samples
- 학습 데이터 행렬. -
layout
- 학습 데이터 배치 방법.-
cv2.ROW_SAMPLE
- 하나의 데이터가 한 행으로 구성됨 -
cv2.COL_SAMPLE
- 하나의 데이터가 한 열로 구성됨
-
responses
- 각 학습 데이터에 대응되는 응답(레이블) 행렬. retval
- 학습이 성공하면 True. 머신 러닝 알고리즘 예측
cv2.ml_SVM.predict
와 같은 predict
함수로 추론을 할 수 있습니다.
Arguments:
-
samples
- 입력 벡터가 행 단위로 저장된 행렬. -
results
- 각 입력 샘플에 대한 예측(분류 또는 회귀) 결과를 저장한 행렬. -
flags
- 추가적인 플래그.- 기본값은 0.
-
cv2.ml.STAT_MODEL_RAW_OUTPUT
을 지정하면 클래스 레이블이 아닌 실제 계산 결과 값을 출력.
retval
- 알고리즘에 따라 다름