Home | Develop | Download | Contact
test_working_newms_der.cpp
1 
20 #include <iostream>
21 #include <Pds/Ra>
22 #include <Pds/Ml>
23 #include <Pds/Sp>
24 
25 
26 Pds::Vector GradientCostNewMS(Pds::Vector W,Pds::Matrix X,Pds::Vector Y,double K=10.0)
27 {
28  unsigned int L=X.Nlin();
29  unsigned int N=X.Ncol()+1;
30  double Norm=W.Norm();
31 
32  double S=2.0*K/(L*Norm);
33  Pds::Vector Wn=W/Norm;
34 
35  Pds::Matrix R=Pds::RegressorMatrix(X);
36  Pds::Vector F=Pds::Sigmoid(K*R*Wn);
37  Pds::Vector b=S*(F-Y).Product(F.Product(1.0-F));
38  Pds::Matrix I=Pds::Eye(N);
39 
40  Pds::Vector DW=(b.T())*R*(I-Wn.MMt());
41 
42  return DW;
43 }
44 
45 
46 // ./test/test_working_newhb_der
47 int main(void)
48 {
49  Pds::IterationConf Conf;
50  Pds::Ra::Randomize();
51 
52  Pds::Octave::DAspect=true;
53  Pds::Octave::YLimits=true;
54 
55  // Generating data
56  // Data 1
57  Pds::Matrix X(Pds::Ra::TextFormat,"../test/hard-data-x.txt");
58  Pds::Vector Y(Pds::Ra::TextFormat,"../test/hard-data-y.txt");
59 
60  // Data 2
61  //unsigned int L=1000; Pds::Matrix X; Pds::Vector Y;
62  //Pds::DataSet::Classification::LoadDataBand(L,X,Y);
63 
64 
65  //double d=Pds::DataSet::InterDistance(X);
66 
67 
68  // Seleciono punto de inicio
69  Pds::Vector W;
70  //W=Pds::LogisticModel::GetW0MeanMethod(X);
73  W.Normalize();
74 
75  Pds::Octave::Plot::PointsX2DYW(X,Y,W,"testando_w.m","test_working_steps_0.png");
76 
77 
78  Pds::Vector DW;
79  Pds::Vector Yo;
80  double E1;
81  double K=10;
82  for(unsigned int n=1;n<=60;n++)
83  {
84  std::cout<<"\n n: "<<n<<"\n";
85 
86  Yo=Pds::LogisticModel::Classify(W,X).Geq(0.5);
87  if(Pds::Hb(Yo.Mean())<=0.0)
88  {
90  W.Normalize();
91  }
92 
93  DW=GradientCostNewMS(W,X,Y,K);
94  //DW.Normalize();
95  //DW=DW*W.Norm()*0.1;
96 
97  DW.T().Print("DW: ");
98  W=W-0.25*DW;
99  W.T().Print(" W: ");
100 
101  //W.Normalize();
102 
103  E1=Pds::LogisticModel::CostMeanSquare(K*W/W.Norm(),X,Y);
104  Pds::Octave::Title="NMS:"+std::to_string(E1);
105  Pds::Octave::Plot::PointsX2DYW(X,Y,W,"testando_w.m","test_working_steps_"+std::to_string(n)+".png");
106 
107  }
108 
109  return 0;
110 }
La clase tipo Pds::IterationConf . Esta clase genera una matriz de Nlin lineas y 1 columna....
Pds::Vector FittingLogitMeanSquare(Pds::IterationConf &Conf, const Pds::Matrix &X, const Pds::Vector &Y, double Delta=0.0001)
Calculo de pesos.
double CostMeanSquare(const Pds::Vector &W, const Pds::Matrix &X, const Pds::Vector &Y)
Calculo de pesos.
Pds::Vector FittingGradientCrossEntropy(Pds::IterationConf &Conf, const Pds::Matrix &X, const Pds::Vector &Y, const Pds::Vector &W0)
Gradiente descendente para sigmoide.
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.

Enlaces de interés

HomePage Bazaar Download Bug report Ayuda Developer Feed