/usr/include/shogun/classifier/mkl/MKLMulticlassGradient.h is in libshogun-dev 3.2.0-7.5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | /*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* Written (W) 2009 Alexander Binder
* Copyright (C) 2009 Fraunhofer Institute FIRST and Max-Planck-Society
*
* Update to patch 0.10.0 - thanks to Eric aka Yoo (thereisnoknife@gmail.com)
*
*/
#ifndef MKLMulticlassGRADIENT_H_
#define MKLMulticlassGRADIENT_H_
#include <vector>
#include <cmath>
#include <cassert>
#include <shogun/base/SGObject.h>
#include <shogun/classifier/mkl/MKLMulticlassOptimizationBase.h>
namespace shogun
{
/** @brief MKLMulticlassGradient is a helper class for MKLMulticlass.
*
* it solves the corresponding linear problem arising in SIP formulation for
* MKL using a gradient based approach
*/
class MKLMulticlassGradient: public MKLMulticlassOptimizationBase
{
public:
/** Class default Constructor
*
*/
MKLMulticlassGradient();
/** Class default Destructor
*
*/
virtual ~MKLMulticlassGradient();
/** Class Copy Constructor
*
*/
MKLMulticlassGradient(MKLMulticlassGradient & gl);
/** Class Assignment operator
*
*/
MKLMulticlassGradient operator=(MKLMulticlassGradient & gl);
/** initializes solver
*
* @param numkernels2 is the number of kernels
*
*
*/
virtual void setup(const int32_t numkernels2);
/** adds a constraint to the LP arising in L1 MKL based on two parameters
*
* @param normw2 is the vector of \f$ \|w_k \|^2 \f$ for all kernels
* @param sumofpositivealphas is a term depending on alphas, labels and
* biases, see in the function float64_t getsumofsignfreealphas() from
* MKLMulticlass.h, it depends on the formulation of the underlying GMNPSVM.
*
*/
virtual void addconstraint(const ::std::vector<float64_t> & normw2,
const float64_t sumofpositivealphas);
/** computes MKL weights
*
* @param weights2 stores the new weights
*
*/
virtual void computeweights(std::vector<float64_t> & weights2);
/** @return object name */
virtual const char* get_name() const { return "MKLMulticlassGradient"; }
/** sets p-norm parameter for MKL
* @param norm the MKL norm
*/
virtual void set_mkl_norm(float64_t norm);
protected:
/** helper routine for MKL optimization, performs linesearch
*
* @param oldweights - MKL weights to start from
* @param finalbeta - new MKL weights
*
*/
void linesearch2(std::vector<float64_t> & finalbeta,const std::vector<float64_t> & oldweights);
/** helper routine for MKL optimization, computes form manifold coordinates the point on the manifold
*
* @param gammas - manifold coordinates
* @param weights - the point on the manifold
*
*/
void genbetas( ::std::vector<float64_t> & weights ,const ::std::vector<float64_t> & gammas);
/** helper routine for MKL optimization, computes greadient of manifold parametrization for one coordinate
*
* @param gammagradient - gradient
* @param gammas - manifold coordinates
* @param dim - the coordinate for which thegradient is to be computed
*
*/
void gengammagradient( ::std::vector<float64_t> & gammagradient ,const ::std::vector<float64_t> & gammas,const int32_t dim);
/** helper routine for MKL optimization, computes optimization objective for one contraint
*
* @param weights - MKL weights
* @param index - index of constraint
*
*/
float64_t objectives(const ::std::vector<float64_t> & weights, const int32_t index);
/** helper routine for MKL optimization, performs linesearch
*
* @param oldweights - MKL weights to start from
* @param finalbeta - new MKL weights
*
*/
void linesearch(std::vector<float64_t> & finalbeta,const std::vector<float64_t> & oldweights);
protected:
/** stores the number of kernels which acts as a parameter for the LP */
int32_t numkernels;
/** stores normsofsubkernels which is a constraint, normsofsubkernels[i] belongs to the i-th constraint */
::std::vector< ::std::vector<float64_t> > normsofsubkernels;
/** stores the bias type term of constraints, sumsofalphas[i] belongs to the i-th constraint */
::std::vector< float64_t > sumsofalphas ;
/** stores the L^p norm which acts as a parameter for the LP */
float64_t pnorm;
};
}
#endif
|