/usr/include/shogun/machine/StructuredOutputMachine.h is in libshogun-dev 3.2.0-7.3build4.
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 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 | /*
* 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) 2013 Shell Hu
* Written (W) 2012 Fernando José Iglesias García
* Copyright (C) 2012 Fernando José Iglesias García
*/
#ifndef _STRUCTURED_OUTPUT_MACHINE__H__
#define _STRUCTURED_OUTPUT_MACHINE__H__
#include <shogun/labels/StructuredLabels.h>
#include <shogun/lib/StructuredData.h>
#include <shogun/machine/Machine.h>
#include <shogun/structure/StructuredModel.h>
#include <shogun/loss/LossFunction.h>
#include <shogun/structure/SOSVMHelper.h>
namespace shogun
{
/** The structured empirical risk types, corresponding to different training objectives [1].
*
* [1] T. Joachims, T. Finley, Chun-Nam Yu, Cutting-Plane Training of Structural SVMs,
* Machine Learning Journal, 2009.
*/
enum EStructRiskType
{
N_SLACK_MARGIN_RESCALING = 0,
N_SLACK_SLACK_RESCALING = 1,
ONE_SLACK_MARGIN_RESCALING = 2,
ONE_SLACK_SLACK_RESCALING = 3,
CUSTOMIZED_RISK = 4
};
class CStructuredModel;
/** TODO doc */
class CStructuredOutputMachine : public CMachine
{
public:
/** problem type */
MACHINE_PROBLEM_TYPE(PT_STRUCTURED);
/** deafult constructor */
CStructuredOutputMachine();
/** standard constructor
*
* @param model structured model with application specific functions
* @param labs structured labels
*/
CStructuredOutputMachine(CStructuredModel* model, CStructuredLabels* labs);
/** destructor */
virtual ~CStructuredOutputMachine();
/** set structured model
*
* @param model structured model to set
*/
void set_model(CStructuredModel* model);
/** get structured model
*
* @return structured model
*/
CStructuredModel* get_model() const;
/** @return object name */
virtual const char* get_name() const
{
return "StructuredOutputMachine";
}
/** set labels
*
* @param lab labels
*/
virtual void set_labels(CLabels* lab);
/** set features
*
* @param f features
*/
void set_features(CFeatures* f);
/** get features
*
* @return features
*/
CFeatures* get_features() const;
/** set surrogate loss function
*
* @param loss loss function to set
*/
void set_surrogate_loss(CLossFunction* loss);
/** get surrogate loss function
*
* @return loss function
*/
CLossFunction* get_surrogate_loss() const;
/** computes the value of the risk function and sub-gradient at given point
*
* @param subgrad Subgradient computed at given point W
* @param W Given weight vector
* @param info Helper info for multiple cutting plane models algorithm
* @param rtype The type of structured risk
* @return Value of the computed risk at given point W
*/
virtual float64_t risk(float64_t* subgrad, float64_t* W,
TMultipleCPinfo* info=0, EStructRiskType rtype = N_SLACK_MARGIN_RESCALING);
/** @return training progress helper */
CSOSVMHelper* get_helper() const;
/** set verbose
* NOTE that track verbose information including primal objectives,
* training errors and duality gaps will make the training 2x or 3x slower.
*
* @param verbose flag enabling/disabling verbose information
*/
void set_verbose(bool verbose);
/** get verbose
*
* @return Status of verbose flag (enabled/disabled)
*/
bool get_verbose() const;
protected:
/** n-slack formulation and margin rescaling
*
* The value of the risk is evaluated as
*
* \f[
* R({\bf w}) = \sum_{i=1}^{m} \max_{y \in \mathcal{Y}} \left[ \ell(y_i, y)
* + \langle {\bf w}, \Psi(x_i, y) - \Psi(x_i, y_i) \rangle \right]
* \f]
*
* The subgradient is by Danskin's theorem given as
*
* \f[
* R'({\bf w}) = \sum_{i=1}^{m} \Psi(x_i, \hat{y}_i) - \Psi(x_i, y_i),
* \f]
*
* where \f$ \hat{y}_i \f$ is the most violated label, i.e.
*
* \f[
* \hat{y}_i = \arg\max_{y \in \mathcal{Y}} \left[ \ell(y_i, y)
* + \langle {\bf w}, \Psi(x_i, y) \rangle \right]
* \f]
*
* @param subgrad Subgradient computed at given point W
* @param W Given weight vector
* @param info Helper info for multiple cutting plane models algorithm
* @return Value of the computed risk at given point W
*/
virtual float64_t risk_nslack_margin_rescale(float64_t* subgrad, float64_t* W, TMultipleCPinfo* info=0);
/** n-slack formulation and slack rescaling
*
* @param subgrad Subgradient computed at given point W
* @param W Given weight vector
* @param info Helper info for multiple cutting plane models algorithm
* @return Value of the computed risk at given point W
*/
virtual float64_t risk_nslack_slack_rescale(float64_t* subgrad, float64_t* W, TMultipleCPinfo* info=0);
/** 1-slack formulation and margin rescaling
*
* @param subgrad Subgradient computed at given point W
* @param W Given weight vector
* @param info Helper info for multiple cutting plane models algorithm
* @return Value of the computed risk at given point W
*/
virtual float64_t risk_1slack_margin_rescale(float64_t* subgrad, float64_t* W, TMultipleCPinfo* info=0);
/** 1-slack formulation and slack rescaling
*
* @param subgrad Subgradient computed at given point W
* @param W Given weight vector
* @param info Helper info for multiple cutting plane models algorithm
* @return Value of the computed risk at given point W
*/
virtual float64_t risk_1slack_slack_rescale(float64_t* subgrad, float64_t* W, TMultipleCPinfo* info=0);
/** customized risk type
*
* @param subgrad Subgradient computed at given point W
* @param W Given weight vector
* @param info Helper info for multiple cutting plane models algorithm
* @return Value of the computed risk at given point W
*/
virtual float64_t risk_customized_formulation(float64_t* subgrad, float64_t* W, TMultipleCPinfo* info=0);
private:
/** register class members */
void register_parameters();
protected:
/** the model that contains the application dependent modules */
CStructuredModel* m_model;
/** the surrogate loss, for SOSVM, fixed to Hinge loss,
* other non-convex losses such as Ramp loss are also applicable,
* will be extended in the future
*/
CLossFunction* m_surrogate_loss;
/** the helper that records primal objectives, duality gaps etc */
CSOSVMHelper* m_helper;
/** verbose outputs and statistics */
bool m_verbose;
}; /* class CStructuredOutputMachine */
} /* namespace shogun */
#endif /* _STRUCTURED_OUTPUT_MACHINE__H__ */
|