Está en la página 1de 5

#include <iostream>

#include <math.h>
#include <string>
#include <opencv/cv.h>
#include <opencv/ml.h>
#include <opencv/highgui.h>
//utilizando cv espacio de nombres;
using namespace std;
bool plotSupportVectors = true;
int numTrainingPoints = 200;
int numTestPoints = 2,000;
int tamao = 200;
int eq = 0;
// exactitud
float evaluar (cv :: Mat & predicho, cv :: Mat & real) {
value (predichos filas == reales filas..);
int t = 0;
int f = 0;
for (int i = 0; i <filas. reales; i ++) {
. flotador p = predicho a <float> (i, 0);
flotar a = real a <float> (i, 0).;
if ((p> = 0.0 && a> = 0.0) || (p <= 0.0 && a <= 0.0)) {
t ++;
} Else {
f ++;
}
}
retorno (T * 1,0) / (t + f);
}
// Datos de trama y de clase
plot_binary vaco (cv :: Mat & datos, cv :: Mat & clases, nombre de cadena) {
cv :: parcela Mat (tamao, tamao, CV_8UC3);
. parcela setTo (cv :: Escalar (255,0, 255,0, 255,0));
for (int i = 0; i <filas de datos;. i ++) {
float x = datos a <float> (i, 0) * tamao.;
flotar y = datos a <float> (i, 1) * tamao.;
si (clases. a <float> (i, 0)> 0) {
cv :: crculo (trama, punto (x, y), 2, CV_RGB (255, 0, 0), 1);
} Else {
cv :: crculo (trama, punto (x, y), 2, CV_RGB (0, 255, 0), 1);
}
}
cv :: imshow (nombre, parcela);
}
// Funcin para aprender
int f (x float, float y, la ecuacin int) {
interruptor (ecuacin) {
caso 0:
y volver> sen (x * 10) - 1: 1;?
romper;
Caso 1:
y volver> cos (x * 10) - 1: 1;
romper;
Caso 2:
return y> 2 * x - 1: 1;?
romper;
Caso 3:
y volver> tan (x * 10) - 1: 1;
romper;
por defecto:
y volver> cos (x * 10) - 1: 1;
}
}
// Datos de la etiqueta con la ecuacin
cv :: Mat labelData (puntos cv :: Mat, la ecuacin int) {
etiquetas cv :: Mat (puntos filas, 1, CV_32FC1.);
for (int i = 0; i <puntos filas;. i ++) {
float x = puntos a <float> (i, 0).;
flotar y = puntos a <float> (i, 1).;
. etiquetas a <float> (i, 0) = f (x, y, la ecuacin);
}
Las etiquetas de devolucin;
}
void SVM (cv :: Mat & trainingData, cv :: Mat & trainingClasses, cv :: Mat & Te
stData, cv :: Mat & testClasses) {
CvSVMParams param = CvSVMParams ();
param = svm_type CvSVM :: C_SVC.;
param = kernel_type CvSVM :: RBF;. :: // CvSVM RBF, CvSVM :: LINEAL ...
. param grado = 0; // para el poli
. param gamma = 20; // para el poli / RBF / sigmoide
. param coef0 = 0; // para el poli / sigmoide
. param C = 7; // para CV_SVM_C_SVC, CV_SVM_EPS_SVR y CV_SVM_NU_SVR
. param nu = 0.0; // para CV_SVM_NU_SVC, CV_SVM_ONE_CLASS, y CV_SVM_NU_SVR
. param p = 0,0; // para CV_SVM_EPS_SVR
param class_weights = NULL;. // para CV_SVM_C_SVC
.. param term_crit type = CV_TERMCRIT_ITER + CV_TERMCRIT_EPS;
.. param term_crit max_iter = 1000;
.. param term_crit psilon = 1e-6;
// SVM formacin (el uso de automviles tren para OpenCV> = 2.0)
CvSVM SVM (trainingData, trainingClasses, cv :: Mat (), cv :: Mat (), param
);
cv :: Mat predijo (testClasses filas, 1, CV_32F.);
for (int i = 0; i <TestData filas;. i ++) {
. :: Mat muestra cv = TestData fila (i);
flotar x = muestra a <float> (0, 0).;
flotar y = muestra a <float> (0, 1).;
predicho a <float> (i, 0) = SVM predecir (muestra)..;
}
cout << "Accuracy_ {SVM} =" << evaluar (predicho, testClasses) << endl;
plot_binary (TestData, predijo, "Predicciones SVM");
// Vectores de soporte parcela
if (plotSupportVectors) {
cv :: Mat plot_sv (tamao, tamao, CV_8UC3);
plot_sv setTo (cv :: Escalar (255,0, 255,0, 255,0).);
. int svec_count = SVM get_support_vector_count ();
for (int vecNum = 0; vecNum <svec_count; vecNum ++) {
float const * vec = SVM get_support_vector (vecNum).;
cv :: crculo (plot_sv, Point (vec [0] * tamao, vec [1] * El tamao), 3,
CV_RGB (0, 0, 0));
}
cv :: imshow ( "vectores de soporte", plot_sv);
}
}
MLP void (cv :: Mat & trainingData, cv :: Mat & trainingClasses, cv :: Mat & Te
stData, cv :: Mat & testClasses) {
cv :: capas Mat = CV :: Mat (4, 1, CV_32SC1);
. capas fila (0) = cv :: escalar (2);
. capas fila (1) = cv :: Escalar (10);
. capas fila (2) = cv :: Escalar (15);
. capas fila (3) = cv :: Escalar (1);
MLP CvANN_MLP;
Params CvANN_MLP_TrainParams;
CvTermCriteria criterios;
. criterios max_iter = 100;
. criterios epsilon = 0.00001f;
criterios type = CV_TERMCRIT_ITER | CV_TERMCRIT_EPS.;
params = train_method CvANN_MLP_TrainParams :: Backprop.;
params bp_dw_scale = 0.05f.;
params bp_moment_scale = 0.05f.;
params criterios term_crit =.;
. MLP crear (capas);
// entrenar
MLP tren (trainingData, trainingClasses, cv :: Mat (), cv :: Mat (), params
).;
cv :: respuesta Mat (1, 1, CV_32FC1);
cv :: Mat predijo (testClasses filas, 1, CV_32F.);
for (int i = 0; i <TestData filas;. i ++) {
cv :: respuesta Mat (1, 1, CV_32FC1);
. :: Mat muestra cv = TestData fila (i);
MLP predecir (la muestra, la respuesta).;
predicho a <float> (i, 0) = respuesta a <float> (0, 0)..;
}
cout << "Accuracy_ {MLP} =" << evaluar (predicho, testClasses) << endl;
plot_binary (TestData, predijo, "Predicciones retropropagacin");
}
knn void (cv :: Mat & trainingData, cv :: Mat & trainingClasses, cv :: Mat & Te
stData, cv :: Mat & testClasses, int K) {
CvKNearest knn (trainingData, trainingClasses, cv :: Mat (), falsa, K);
cv :: Mat predijo (testClasses filas, 1, CV_32F.);
for (int i = 0; i <TestData filas;. i ++) {
. :: cv const muestra Mat = TestData fila (i);
. predicho a <float> (i, 0) = knn find_nearest (muestra, K).;
}
cout << "Accuracy_ {KNN} =" << evaluar (predicho, testClasses) << endl;
plot_binary (TestData, predijo, "Predicciones KNN");
}
Bayes void (cv :: Mat & trainingData, cv :: Mat & trainingClasses, cv :: Mat &
TestData, cv :: Mat & testClasses) {
CvNormalBayesClassifier Bayes (trainingData, trainingClasses);
cv :: Mat predijo (testClasses filas, 1, CV_32F.);
for (int i = 0; i <TestData filas;. i ++) {
. :: cv const muestra Mat = TestData fila (i);
. predicha a <float> (i, 0) = Bayes predecir (muestra).;
}
cout << "Accuracy_ {BAYES} =" << evaluar (predicho, testClasses) << endl;
plot_binary (TestData, predijo, "Las predicciones de Bayes");
}
vaco rbol de decisin (cv :: Mat & trainingData, cv :: Mat & trainingClasses, cv ::
Mat & TestData, cv :: Mat & testClasses) {
Dtree CvDTree;
cv :: var_type Mat (3, 1, CV_8U);
// Definir atributos como numrica
. var_type a <unsigned int> (0, 0) = CV_VAR_NUMERICAL;
. var_type a <unsigned int> (0, 1) = CV_VAR_NUMERICAL;
// Definir nodo de salida como numrica
. var_type a <unsigned int> (0, 2) = CV_VAR_NUMERICAL;
dtree . train ( trainingData , CV_ROW_SAMPLE , trainingClasses , cv :: Mat (
), cv :: Mat (), var_type , cv :: Mat (), CvDTreeParams ());
cv :: Mat predijo (testClasses filas, 1, CV_32F.);
for (int i = 0; i <TestData filas;. i ++) {
. :: cv const muestra Mat = TestData fila (i);
CvDTreeNode * = prediccin dtree predecir (muestra).;
predicho a <float> (i, 0) = prediccin -> valor.;
}
cout << "Accuracy_ {RBOL} =" << evaluar (predicho, testClasses) << endl;
plot_binary (TestData, predijo, "Predicciones del rbol");
}

int main () {
cv :: Mat trainingData (numTrainingPoints, 2, CV_32FC1);
cv :: Mat TestData (numTestPoints, 2, CV_32FC1);
cv :: randu (trainingData, 0, 1);
cv :: randu (TestData, 0, 1);
cv :: Mat trainingClasses = labelData (trainingData, eq);
cv :: Mat testClasses = labelData (TestData, eq);
plot_binary (trainingData, trainingClasses, "Formacin de datos");
plot_binary (TestData, testClasses, "Datos de Prueba");
SVM (trainingData, trainingClasses, TestData, testClasses);
MLP (trainingData, trainingClasses, TestData, testClasses);
KNN (trainingData, trainingClasses, testdata, testClasses, 3);
Bayes (trainingData, trainingClasses, TestData, testClasses);
rbol de decisin (trainingData, trainingClasses, TestData, testClasses);
cv :: WAITKEY ();
return 0;
}

También podría gustarte