0 Views
0 Downloads
0 Favorites
PNN_Iris
//+------------------------------------------------------------------+
//|                                                     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