/usr/include/shogun/machine/LinearLatentMachine.h is in libshogun-dev 3.1.1-1.
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 | /*
* 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) 2012 Viktor Gal
* Copyright (C) 2012 Viktor Gal
*/
#ifndef __LATENTLINEARMACHINE_H__
#define __LATENTLINEARMACHINE_H__
#include <shogun/lib/common.h>
#include <shogun/machine/LinearMachine.h>
#include <shogun/latent/LatentModel.h>
namespace shogun
{
/** @brief abstract implementaion of Linear Machine with latent variable
* This is the base implementation of all linear machines with latent variable.
*/
class CLinearLatentMachine: public CLinearMachine
{
public:
/** problem type */
MACHINE_PROBLEM_TYPE(PT_LATENT);
/** default contstructor */
CLinearLatentMachine();
/** constructor
*
* @param model the user defined CLatentModel
* @param C regularisation constant
*/
CLinearLatentMachine(CLatentModel* model, float64_t C);
virtual ~CLinearLatentMachine();
/** apply linear machine to data set before
*
* @return classified labels
*/
virtual CLatentLabels* apply_latent() = 0;
/** apply linear machine to data
*
* @param data (test)data to be classified
* @return classified labels
*/
virtual CLatentLabels* apply_latent(CFeatures* data);
/** Returns the name of the SGSerializable instance.
*
* @return name of the SGSerializable
*/
virtual const char* get_name() const { return "LinearLatentMachine"; }
/** set epsilon
*
* @param eps new epsilon
*/
inline void set_epsilon(float64_t eps) { m_epsilon=eps; }
/** get epsilon
*
* @return epsilon
*/
inline float64_t get_epsilon() { return m_epsilon; }
/** set C
*
* @param c new C constant
*/
inline void set_C(float64_t c)
{
m_C=c;
}
/** get C
*
* @return C
*/
inline float64_t get_C() { return m_C; }
/** set maximum iterations
*
* @param iter new maximum iteration value
*/
inline void set_max_iterations(int32_t iter) { m_max_iter = iter; }
/** get maximum iterations value
*
* @return maximum iterations
*/
inline int32_t get_max_iterations() { return m_max_iter; }
/** set latent model
*
* @param latent_model user defined latent model
*/
void set_model(CLatentModel* latent_model);
protected:
virtual bool train_machine(CFeatures* data=NULL);
/** inner loop of the latent machine
*
* @param cooling_eps epsilon
*
* @return primal objective value
*/
virtual float64_t do_inner_loop(float64_t cooling_eps)=0;
virtual bool train_require_labels() const { return false; }
protected:
/** user supplied latent model */
CLatentModel* m_model;
/** C */
float64_t m_C;
/** epsilon */
float64_t m_epsilon;
/** max iterations */
int32_t m_max_iter;
/** current iteration */
int32_t m_cur_iter;
private:
/** initalize the values to default values */
void init();
};
}
#endif /* __LATENTLINEARMACHINE_H__ */
|