//+------------------------------------------------------------------+
//| PNN_Iris.mq4 |
//+------------------------------------------------------------------+
#include <stdlib.mqh>
#include <WinUser32.mqh>
// Import PNN library
#import "PNN_parzen.ex4"
double PNN(int N, int d, double sigma, double test_example[d], double Examples[N][d]);
#import
//+------------------------------------------------------------------+
int init()
{
double versi[0][4], virgi[0][4], setosa[0][4];
// Iris-versicolor
ArrayResize(versi, 0);
add_arr(versi, 7.0,3.2,4.7,1.4);
add_arr(versi, 6.4,3.2,4.5,1.5);
add_arr(versi, 6.9,3.1,4.9,1.5);
add_arr(versi, 5.5,2.3,4.0,1.3);
add_arr(versi, 6.5,2.8,4.6,1.5);
add_arr(versi, 5.7,2.8,4.5,1.3);
add_arr(versi, 6.3,3.3,4.7,1.6);
add_arr(versi, 4.9,2.4,3.3,1.0);
add_arr(versi, 6.6,2.9,4.6,1.3);
add_arr(versi, 5.2,2.7,3.9,1.4);
add_arr(versi, 5.0,2.0,3.5,1.0);
add_arr(versi, 5.9,3.0,4.2,1.5);
add_arr(versi, 6.0,2.2,4.0,1.0);
add_arr(versi, 6.1,2.9,4.7,1.4);
add_arr(versi, 5.6,2.9,3.6,1.3);
add_arr(versi, 6.7,3.1,4.4,1.4);
add_arr(versi, 5.6,3.0,4.5,1.5);
add_arr(versi, 5.8,2.7,4.1,1.0);
add_arr(versi, 6.2,2.2,4.5,1.5);
add_arr(versi, 5.6,2.5,3.9,1.1);
add_arr(versi, 5.9,3.2,4.8,1.8);
add_arr(versi, 6.1,2.8,4.0,1.3);
add_arr(versi, 6.3,2.5,4.9,1.5);
add_arr(versi, 6.1,2.8,4.7,1.2);
add_arr(versi, 6.4,2.9,4.3,1.3);
add_arr(versi, 6.6,3.0,4.4,1.4);
add_arr(versi, 6.8,2.8,4.8,1.4);
add_arr(versi, 6.7,3.0,5.0,1.7);
add_arr(versi, 6.0,2.9,4.5,1.5);
add_arr(versi, 5.7,2.6,3.5,1.0);
add_arr(versi, 5.5,2.4,3.8,1.1);
add_arr(versi, 5.5,2.4,3.7,1.0);
add_arr(versi, 5.8,2.7,3.9,1.2);
add_arr(versi, 6.0,2.7,5.1,1.6);
add_arr(versi, 5.4,3.0,4.5,1.5);
add_arr(versi, 6.0,3.4,4.5,1.6);
add_arr(versi, 6.7,3.1,4.7,1.5);
add_arr(versi, 6.3,2.3,4.4,1.3);
add_arr(versi, 5.6,3.0,4.1,1.3);
add_arr(versi, 5.5,2.5,4.0,1.3);
add_arr(versi, 5.5,2.6,4.4,1.2);
add_arr(versi, 6.1,3.0,4.6,1.4);
add_arr(versi, 5.8,2.6,4.0,1.2);
add_arr(versi, 5.0,2.3,3.3,1.0);
add_arr(versi, 5.6,2.7,4.2,1.3);
add_arr(versi, 5.7,3.0,4.2,1.2);
add_arr(versi, 5.7,2.9,4.2,1.3);
add_arr(versi, 6.2,2.9,4.3,1.3);
add_arr(versi, 5.1,2.5,3.0,1.1);
//add_arr(versi, 5.7,2.8,4.1,1.3); // óáåðåì èç íàáîðà ïî îäíîìó ïàòòåðíó è ïîïûòàåìñÿ èõ ðàñïîçíàòü, îñòàëîñü ïî 49 â êàæäîì
// remove from the set of one pattern and try to understand, is for 49 each
//Print("print versi");print_arr(versi);
// Iris-virginica
ArrayResize(virgi, 0);
add_arr(virgi,6.3,3.3,6.0,2.5);
add_arr(virgi,5.8,2.7,5.1,1.9);
add_arr(virgi,7.1,3.0,5.9,2.1);
add_arr(virgi,6.3,2.9,5.6,1.8);
add_arr(virgi,6.5,3.0,5.8,2.2);
add_arr(virgi,7.6,3.0,6.6,2.1);
add_arr(virgi,4.9,2.5,4.5,1.7);
add_arr(virgi,7.3,2.9,6.3,1.8);
add_arr(virgi,6.7,2.5,5.8,1.8);
add_arr(virgi,7.2,3.6,6.1,2.5);
add_arr(virgi,6.5,3.2,5.1,2.0);
add_arr(virgi,6.4,2.7,5.3,1.9);
add_arr(virgi,6.8,3.0,5.5,2.1);
add_arr(virgi,5.7,2.5,5.0,2.0);
add_arr(virgi,5.8,2.8,5.1,2.4);
add_arr(virgi,6.4,3.2,5.3,2.3);
add_arr(virgi,6.5,3.0,5.5,1.8);
add_arr(virgi,7.7,3.8,6.7,2.2);
add_arr(virgi,7.7,2.6,6.9,2.3);
add_arr(virgi,6.0,2.2,5.0,1.5);
add_arr(virgi,6.9,3.2,5.7,2.3);
add_arr(virgi,5.6,2.8,4.9,2.0);
add_arr(virgi,7.7,2.8,6.7,2.0);
add_arr(virgi,6.3,2.7,4.9,1.8);
add_arr(virgi,6.7,3.3,5.7,2.1);
add_arr(virgi,7.2,3.2,6.0,1.8);
add_arr(virgi,6.2,2.8,4.8,1.8);
add_arr(virgi,6.1,3.0,4.9,1.8);
add_arr(virgi,6.4,2.8,5.6,2.1);
add_arr(virgi,7.2,3.0,5.8,1.6);
add_arr(virgi,7.4,2.8,6.1,1.9);
add_arr(virgi,7.9,3.8,6.4,2.0);
add_arr(virgi,6.4,2.8,5.6,2.2);
add_arr(virgi,6.3,2.8,5.1,1.5);
add_arr(virgi,6.1,2.6,5.6,1.4);
add_arr(virgi,7.7,3.0,6.1,2.3);
add_arr(virgi,6.3,3.4,5.6,2.4);
add_arr(virgi,6.4,3.1,5.5,1.8);
add_arr(virgi,6.0,3.0,4.8,1.8);
add_arr(virgi,6.9,3.1,5.4,2.1);
add_arr(virgi,6.7,3.1,5.6,2.4);
add_arr(virgi,6.9,3.1,5.1,2.3);
add_arr(virgi,5.8,2.7,5.1,1.9);
add_arr(virgi,6.8,3.2,5.9,2.3);
add_arr(virgi,6.7,3.3,5.7,2.5);
add_arr(virgi,6.7,3.0,5.2,2.3);
add_arr(virgi,6.3,2.5,5.0,1.9);
add_arr(virgi,6.5,3.0,5.2,2.0);
add_arr(virgi,6.2,3.4,5.4,2.3);
//add_arr(virgi,5.9,3.0,5.1,1.8); //óáåðåì èç íàáîðà ïî îäíîìó ïàòòåðíó è ïîïûòàåìñÿ èõ ðàñïîçíàòü, îñòàëîñü ïî 49 â êàæäîì
// remove from the set of one pattern and try to understand, is for 49 each
//Print("print virgi");print_arr(virgi);
// Iris-setosa
ArrayResize(setosa, 0);
add_arr(setosa,5.1,3.5,1.4,0.2);
add_arr(setosa,4.9,3.0,1.4,0.2);
add_arr(setosa,4.7,3.2,1.3,0.2);
add_arr(setosa,4.6,3.1,1.5,0.2);
add_arr(setosa,5.0,3.6,1.4,0.2);
add_arr(setosa,5.4,3.9,1.7,0.4);
add_arr(setosa,4.6,3.4,1.4,0.3);
add_arr(setosa,5.0,3.4,1.5,0.2);
add_arr(setosa,4.4,2.9,1.4,0.2);
add_arr(setosa,4.9,3.1,1.5,0.1);
add_arr(setosa,5.4,3.7,1.5,0.2);
add_arr(setosa,4.8,3.4,1.6,0.2);
add_arr(setosa,4.8,3.0,1.4,0.1);
add_arr(setosa,4.3,3.0,1.1,0.1);
add_arr(setosa,5.8,4.0,1.2,0.2);
add_arr(setosa,5.7,4.4,1.5,0.4);
add_arr(setosa,5.4,3.9,1.3,0.4);
add_arr(setosa,5.1,3.5,1.4,0.3);
add_arr(setosa,5.7,3.8,1.7,0.3);
add_arr(setosa,5.1,3.8,1.5,0.3);
add_arr(setosa,5.4,3.4,1.7,0.2);
add_arr(setosa,5.1,3.7,1.5,0.4);
add_arr(setosa,4.6,3.6,1.0,0.2);
add_arr(setosa,5.1,3.3,1.7,0.5);
add_arr(setosa,4.8,3.4,1.9,0.2);
add_arr(setosa,5.0,3.0,1.6,0.2);
add_arr(setosa,5.0,3.4,1.6,0.4);
add_arr(setosa,5.2,3.5,1.5,0.2);
add_arr(setosa,5.2,3.4,1.4,0.2);
add_arr(setosa,4.7,3.2,1.6,0.2);
add_arr(setosa,4.8,3.1,1.6,0.2);
add_arr(setosa,5.4,3.4,1.5,0.4);
add_arr(setosa,5.2,4.1,1.5,0.1);
add_arr(setosa,5.5,4.2,1.4,0.2);
add_arr(setosa,4.9,3.1,1.5,0.1);
add_arr(setosa,5.0,3.2,1.2,0.2);
add_arr(setosa,5.5,3.5,1.3,0.2);
add_arr(setosa,4.9,3.1,1.5,0.1);
add_arr(setosa,4.4,3.0,1.3,0.2);
add_arr(setosa,5.1,3.4,1.5,0.2);
add_arr(setosa,5.0,3.5,1.3,0.3);
add_arr(setosa,4.5,2.3,1.3,0.3);
add_arr(setosa,4.4,3.2,1.3,0.2);
add_arr(setosa,5.0,3.5,1.6,0.6);
add_arr(setosa,5.1,3.8,1.9,0.4);
add_arr(setosa,4.8,3.0,1.4,0.3);
add_arr(setosa,5.1,3.8,1.6,0.2);
add_arr(setosa,4.6,3.2,1.4,0.2);
add_arr(setosa,5.3,3.7,1.5,0.2);
//add_arr(setosa,5.0,3.3,1.4,0.2); //óáåðåì èç íàáîðà ïî îäíîìó ïàòòåðíó è ïîïûòàåìñÿ èõ ðàñïîçíàòü, îñòàëîñü ïî 49 â êàæäîì
// remove from the set of one pattern and try to understand, is for 49 each
//Print("print setosa");print_arr(setosa);
// try recognize this 3 sets
//add_arr(versi, 5.7,2.8,4.1,1.3);
//add_arr(virgi,5.9,3.0,5.1,1.8);
//add_arr(setosa,5.0,3.3,1.4,0.2);
double tmp_versi[4], tmp_virgi[4], tmp_setosa[4];
tmp_versi[0] = 5.7; tmp_versi[1] = 2.8; tmp_versi[2] = 4.1; tmp_versi[3] = 1.3;
tmp_virgi[0] = 5.9; tmp_virgi[1] = 3.0; tmp_virgi[2] = 5.1; tmp_virgi[3] = 1.8;
tmp_setosa[0] = 5.0; tmp_setosa[1] = 3.3; tmp_setosa[2] = 1.4; tmp_setosa[3] = 0.2;
// recognate VERSI
double res_versi1 = PNN(ArrayRange(versi, 0), 4, 0.75, tmp_versi, versi);
double res_versi2 = PNN(ArrayRange(virgi, 0), 4, 0.75, tmp_versi, virgi);
double res_versi3 = PNN(ArrayRange(setosa, 0), 4, 0.75, tmp_versi, setosa);
Print(" probality VERSI recognate as VERSI res_versi1=", DoubleToStr(res_versi1,5));
Print(" probality VERSI recognate as VIRGI res_versi2=", DoubleToStr(res_versi2,5));
Print(" probality VERSI recognate as SETOSA res_versi3=", DoubleToStr(res_versi3,5));
Print(" ");
//recognate VIRGI
double res_virgi1 = PNN(ArrayRange(versi, 0), 4, 0.75, tmp_virgi, versi);
double res_virgi2 = PNN(ArrayRange(virgi, 0), 4, 0.75, tmp_virgi, virgi);
double res_virgi3 = PNN(ArrayRange(setosa, 0), 4, 0.75, tmp_virgi, setosa);
Print(" probality VIRGI recognate as VERSI res_versi1=", DoubleToStr(res_virgi1,5));
Print(" probality VIRGI recognate as VIRGI res_versi2=", DoubleToStr(res_virgi2,5));
Print(" probality VIRGI recognate as SETOSA res_versi3=", DoubleToStr(res_virgi3,5));
Print(" ");
//recognate SETOSA
double res_setosa1 = PNN(ArrayRange(versi, 0), 4, 0.75, tmp_setosa, versi);
double res_setosa2 = PNN(ArrayRange(virgi, 0), 4, 0.75, tmp_setosa, virgi);
double res_setosa3 = PNN(ArrayRange(setosa, 0), 4, 0.75, tmp_setosa, setosa);
Print(" probality SETOSA recognate as VERSI res_versi1=", DoubleToStr(res_setosa1,5));
Print(" probality SETOSA recognate as VIRGI res_versi2=", DoubleToStr(res_setosa2,5));
Print(" probality SETOSA recognate as SETOSA res_versi3=", DoubleToStr(res_setosa3,5));
Print(" ");
return(0);
}
//+------------------------------------------------------------------+
int start()
{
return(0);
}
int print_arr(double arr[][])
{
int length = ArrayRange(arr, 0);
int length1 = ArrayRange(arr, 1);
for( int i = 0; i < length; i++){
string str = "";
for( int y = 0; y < length1; y++){
str = StringConcatenate(str, DoubleToStr(arr[i][y], 5), " ");
}
Print(str);
}
}
int add_arr(double &arr[][], double d1, double d2, double d3, double d4)
{
int length = ArrayRange(arr, 0);
ArrayResize(arr, length + 1);
arr[length][0] = d1;
arr[length][1] = d2;
arr[length][2] = d3;
arr[length][3] = d4;
}
Comments