Home | Develop | Download | Contact
test_working_newhb_der.cpp
1 
20 #include <iostream>
21 #include <Pds/Ra>
22 #include <Pds/Ml>
23 #include <Pds/Sp>
24 
25 
26 #include "extra_newhb.h"
27 
28 bool get_W1_W2_IS_for_given_W_X_Y( double b,unsigned int N,
29  Pds::Vector W,Pds::Matrix X,Pds::Vector Y,
30  Pds::Matrix &W1,Pds::Matrix &W2,Pds::Matrix &IS)
31 {
32  double val;
33  Pds::Vector w1=Pds::LinSpace(-b,b,N);
34  Pds::Vector w2=Pds::LinSpace(-b,b,N);
35 
36  Pds::Meshgrid(w1,w2,W1,W2);
37  IS.Reshape(N,N);
38 
39  for(unsigned int i=0;i<N;i++)
40  for(unsigned int j=0;j<N;j++)
41  {
42  W.Set(1,w1[i]);
43  W.Set(2,w2[j]);
44 
45  val=Pds::LogisticModel::CostXqEntropy( W,X,Y,q_factor_val); //w*(100/w.Norm())
46  IS.SetRaw(i,j,val);
47  }
48 
49  return true;
50 }
51 
52 
53 // ./test/test_working_newhb_der
54 int main(void)
55 {
56  Pds::Ra::Randomize();
57 
58  Pds::Octave::DAspect=true;
59  Pds::Octave::YLimits=true;
60 
61  // Generating data
62  // Data 1
63  Pds::Matrix X(Pds::Ra::TextFormat,"../test/hard-data-x.txt");
64  Pds::Vector Y(Pds::Ra::TextFormat,"../test/hard-data-y.txt");
65 
66  // Data 2
67  //unsigned int L=1000; Pds::Matrix X; Pds::Vector Y;
68  //Pds::DataSet::Classification::LoadDataBand(L,X,Y);
69 
70 
71  //double d=Pds::DataSet::InterDistance(X);
72 
73 
74  // Seleciono punto de inicio
75  Pds::Vector W=Pds::LogisticModel::GetW0MeanMethod(X);
76  W.Normalize();
77  //W=W/W.Max();
78  Pds::Octave::Plot::PointsX2DYW(X,Y,W,"testando_w.m","test_working_steps_0.png");
79 
80  Pds::Matrix W1,W2,IS;
81  unsigned int N=64; double b=2.0;
82 
83 
84  Pds::Vector P(W.Nel());
85  Pds::Vector DW;
86  double E1;
87  for(unsigned int n=1;n<=60;n++)
88  {
89  double h=W.RMS()*0.5;
90  std::cout<<"\n n: "<<n<<"\n";
91  std::cout<<" h: "<<h<<"\n";
92 
93 
94  if(Pds::Hb(Pds::LogisticModel::Classify(W,X).Geq(0.5).Mean())<=0.0)
95  {
97  W.Normalize();
98  }
99 
100  DW=Pds::LogisticModel::GradientCostXqEntropy(W,X,Y,q_factor_val,h);
101  //DW.Normalize();
102  //DW=DW*W.Norm();
103 
104  get_W1_W2_IS_for_given_W_X_Y( b,N,W,X,Y, W1,W2,IS);
105 
106  DW.T().Print("DW: ");
107  W=W-0.05*DW;
108  W.T().Print(" W: ");
109 
110  //W.Normalize();
111  //W.T().Print(" W: ");
112 
113  E1=Pds::LogisticModel::CostXqEntropy(W,X,Y,q_factor_val);
114  Pds::Octave::Title="NHb:"+std::to_string(E1);
115  Pds::Octave::Plot::PointsX2DYW(X,Y,W,"testando_w.m","test_working_steps_"+std::to_string(n)+".png");
116 
117  P.SetRaw(0,W[1]);
118  P.SetRaw(1,W[2]);
119  P.SetRaw(2,1);
120  Pds::Octave::Plot::SurfCWithPoint( W1,W2,IS,P,
121  "testando_is"+std::to_string(n)+".m",
122  "is_matrix_"+std::to_string(n)+".png");
123  }
124 
125  return 0;
126 }
Pds::Vector Classify(const Pds::Vector &W, const Pds::Matrix &X)
Calculo del resultado del clasificador.
Pds::Vector GetW0MeanMethod(const Pds::Matrix &X)
Obtiene de forma rapida un vector inicial para usar en regresion logistica.
Pds::Vector GradientCostXqEntropy(const Pds::Vector &W, const Pds::Matrix &X, const Pds::Vector &Y, double q, double h)
Definition: extra_newhb.h:73
double CostXqEntropy(const Pds::Vector &W, const Pds::Matrix &X, const Pds::Vector &Y, double q)
Definition: extra_newhb.h:32

Enlaces de interés

HomePage Bazaar Download Bug report Ayuda Developer Feed