Programa para el testeo de las funciones.Para compilar o código example_logisticregression_ce_svm_hard.cpp:
g++ -static -o example_logisticregression_ce_svm_hard example_logisticregression_ce_svm_hard.cpp -lpdsmlmm -lpdsramm -lpdsspmm
Para executar o programa:
./example_logisticregression_ce_svm_hard
Retornando por consola:
W0: 0.0037733819812223 -1 -0.020282310732759
┌──────────────────────────────┐
│ CE │
│ IterationConf init data │
├──────────────────────────────┤
│ Alpha: 0.1 │
│ Lambda: 0.1 │
│ MinError ΔW/W: 1.0000e-07 │
│ MaxIter: 1000 │
└──────────────────────────────┘
┌──────────────────────────────┐
│ Iter: 1000 │
│ Alpha: 0.001 │
│ LastError ΔW/W: 6.8187e-06 │
└──────────────────────────────┘
┌──────────────────────────────┐
│ CE │
│ IterationConf end data │
├──────────────────────────────┤
│ Alpha: 0.001 │
│ LastError ΔW/W: 6.8187e-06 │
│ LastIter: 1000 │
└──────────────────────────────┘
W_ce: 0.00029598207052271 -0.036805352866569 -0.028390896649131
┌──────────────────────────────┐
│ SVM │
│ IterationConf init data │
├──────────────────────────────┤
│ Alpha: 0.1 │
│ Lambda: 0.1 │
│ MinError ΔW/W: 1.0000e-07 │
│ MaxIter: 1000 │
└──────────────────────────────┘
┌──────────────────────────────┐
│ Iter: 1000 │
│ Alpha: 0.001 │
│ LastError ΔW/W: 4.9802e-05 │
│ Cost Func Error: 1.0357e+00 │
└──────────────────────────────┘
┌──────────────────────────────┐
│ SVM │
│ IterationConf end data │
├──────────────────────────────┤
│ Alpha: 0.001 │
│ LastError ΔW/W: 4.9802e-05 │
│ LastIter: 1000 │
└──────────────────────────────┘
W_svm: 0.0039810069812223 -0.85608162230586 -0.041708055765726
IG_ce: 0.00026042863760706
IG_svm: 5.8431398858694e-05
Classification - cross entropy
Classification - svm
Código example_logisticregression_ce_svm_hard.cpp:
#include <iostream>
#include <Pds/Ra>
#include <Pds/Ml>
int main(void)
{
Pds::Matrix X;
Pds::Vector Y;
unsigned int L=1000;
Pds::Vector Yp;
Pds::Vector W0(X.Ncol()+1), W;
W0.T().Print(" W0: ");
std::cout<<std::endl;
Pds::Octave::YLimits=true;
Pds::Octave::XLabel="x_1";
Pds::Octave::YLabel="x_2";
Pds::Octave::Plot::PointsX2DYW(X,Y,W0,"testando_dat.m","example_logisticregression_ce_svm_hard_dat.png");
W.T().Print(" W_ce: ");
std::cout<<std::endl;
double IG_ce=Pds::InformationGain(Y,Y.FindRowsBlock(Yp));
Pds::Octave::YLimits=true;
Pds::Octave::Plot::PointsX2DYW(X,Y,W,"testando.m","example_logisticregression_ce_svm_hard_ce.png");
W.T().Print("W_svm: ");
std::cout<<std::endl;
double IG_svm=Pds::InformationGain(Y,Y.FindRowsBlock(Yp));
Pds::Octave::YLimits=true;
Pds::Octave::Plot::PointsX2DYW(X,Y,W,"testando.m","example_logisticregression_ce_svm_hard_svm.png");
std::cout<<std::endl;
std::cout<<" IG_ce: "<<IG_ce<<std::endl;
std::cout<<"IG_svm: "<<IG_svm<<std::endl;
return 0;
}
La clase tipo Pds::IterationConf . Esta clase genera una matriz de Nlin lineas y 1 columna....
bool SetLambda(double Lambda)
Coloca el valor lambda.
bool SetAlpha(double Alpha)
Coloca el valor alpha.
bool SetMinError(double MinError)
Coloca el valor MinError.
void LoadDataBand2(unsigned int L, Pds::Matrix &X, Pds::Vector &Y)
Clasificacion de datos separados por mas de una curva.
Pds::Vector FittingGradientCrossEntropy(Pds::IterationConf &Conf, const Pds::Matrix &X, const Pds::Vector &Y, const Pds::Vector &W0)
Gradiente descendente para sigmoide.
Pds::Vector FittingGradientSVM(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 GetW0MeanSquareMethod(const Pds::Matrix &X)
Obtiene de forma rapida un vector inicial para usar en regresion logistica.