00001
00042
00043
00044
00045 #include <ReClaM/Perceptron.h>
00046
00047
00048 Perceptron::Perceptron()
00049 {
00050 }
00051
00052 Perceptron::~Perceptron()
00053 {
00054 }
00055
00056
00057 void Perceptron::init(Model& model)
00058 {
00059 SVM* svm = dynamic_cast<SVM*>(&model);
00060 if (svm == NULL) throw SHARKEXCEPTION("[Perceptron::init] model is not a valid SVM object");
00061 }
00062
00063 void Perceptron::optimize(SVM& svm, const Array<double>& input, const Array<double>& target)
00064 {
00065 int i, ic = input.dim(0);
00066 bool err;
00067 int iter = 0;
00068
00069 svm.SetTrainingData(input);
00070 for (i = 0; i <= ic; i++) svm.setParameter(i, 0.0);
00071
00072 do
00073 {
00074 err = false;
00075 for (i = 0; i < ic; i++)
00076 {
00077 if (svm.model(input[i]) * target(i, 0) <= 0.0)
00078 {
00079 svm.setParameter(i, svm.getParameter(i) + target(i, 0));
00080 err = true;
00081 }
00082 }
00083 if (iter > 10000 * ic) break;
00084 iter++;
00085 }
00086 while (err);
00087 }
00088
00089 double Perceptron::optimize(Model& model, ErrorFunction& error, const Array<double>& input, const Array<double>& target)
00090 {
00091 SVM* svm = dynamic_cast<SVM*>(&model);
00092 if (svm == NULL) throw SHARKEXCEPTION("[Perceptron::optimize] model is not a valid SVM object");
00093
00094 optimize(*svm, input, target);
00095 return 0.0;
00096 }
00097