SHOGUN  v3.2.0
LinearMachine.cpp
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License as published by
4  * the Free Software Foundation; either version 3 of the License, or
5  * (at your option) any later version.
6  *
7  * Written (W) 1999-2009 Soeren Sonnenburg
8  * Copyright (C) 1999-2009 Fraunhofer Institute FIRST and Max-Planck-Society
9  */
10 
13 #include <shogun/base/Parameter.h>
14 
15 using namespace shogun;
16 
18 : CMachine(), bias(0), features(NULL)
19 {
20  init();
21 }
22 
24  bias(0), features(NULL)
25 {
26  set_w(machine->get_w().clone());
27  set_bias(machine->get_bias());
28 
29  init();
30 }
31 
32 void CLinearMachine::init()
33 {
34  SG_ADD(&w, "w", "Parameter vector w.", MS_NOT_AVAILABLE);
35  SG_ADD(&bias, "bias", "Bias b.", MS_NOT_AVAILABLE);
36  SG_ADD((CSGObject**) &features, "features", "Feature object.",
38 }
39 
40 
42 {
44 }
45 
47 {
48  return features->dense_dot(vec_idx, w.vector, w.vlen) + bias;
49 }
50 
52 {
53  SGVector<float64_t> outputs = apply_get_outputs(data);
54  return new CRegressionLabels(outputs);
55 }
56 
58 {
59  SGVector<float64_t> outputs = apply_get_outputs(data);
60  return new CBinaryLabels(outputs);
61 }
62 
64 {
65  if (data)
66  {
67  if (!data->has_property(FP_DOT))
68  SG_ERROR("Specified features are not of type CDotFeatures\n")
69 
70  set_features((CDotFeatures*) data);
71  }
72 
73  if (!features)
74  return SGVector<float64_t>();
75 
76  int32_t num=features->get_num_vectors();
77  ASSERT(num>0)
79 
80  float64_t* out=SG_MALLOC(float64_t, num);
81  features->dense_dot_range(out, 0, num, NULL, w.vector, w.vlen, bias);
82  return SGVector<float64_t>(out,num);
83 }
84 
86 {
87  return w;
88 }
89 
91 {
92  w=src_w;
93 }
94 
96 {
97  bias=b;
98 }
99 
101 {
102  return bias;
103 }
104 
106 {
107  SG_REF(feat);
109  features=feat;
110 }
111 
113 {
114  SG_REF(features);
115  return features;
116 }
117 
119 {
120 }
121 
virtual CBinaryLabels * apply_binary(CFeatures *data=NULL)
virtual void dense_dot_range(float64_t *output, int32_t start, int32_t stop, float64_t *alphas, float64_t *vec, int32_t dim, float64_t b)
Definition: DotFeatures.cpp:67
virtual SGVector< float64_t > apply_get_outputs(CFeatures *data)
Real Labels are real-valued labels.
virtual CRegressionLabels * apply_regression(CFeatures *data=NULL)
virtual void set_w(const SGVector< float64_t > src_w)
virtual float64_t dense_dot(int32_t vec_idx1, const float64_t *vec2, int32_t vec2_len)=0
bool has_property(EFeatureProperty p) const
Definition: Features.cpp:292
#define SG_UNREF(x)
Definition: SGRefObject.h:35
virtual int32_t get_num_vectors() const =0
#define SG_ERROR(...)
Definition: SGIO.h:131
virtual CDotFeatures * get_features()
Features that support dot products among other operations.
Definition: DotFeatures.h:41
A generic learning machine interface.
Definition: Machine.h:138
virtual int32_t get_dim_feature_space() const =0
virtual float64_t apply_one(int32_t vec_idx)
#define ASSERT(x)
Definition: SGIO.h:203
Class SGObject is the base class of all shogun objects.
Definition: SGObject.h:102
double float64_t
Definition: common.h:48
#define SG_REF(x)
Definition: SGRefObject.h:34
SGVector< float64_t > w
virtual void set_features(CDotFeatures *feat)
Class LinearMachine is a generic interface for all kinds of linear machines like classifiers.
Definition: LinearMachine.h:61
virtual void store_model_features()
CDotFeatures * features
all of classes and functions are contained in the shogun namespace
Definition: class_list.h:16
The class Features is the base class of all feature objects.
Definition: Features.h:62
virtual SGVector< float64_t > get_w() const
virtual float64_t get_bias()
Binary Labels for binary classification.
Definition: BinaryLabels.h:36
virtual void set_bias(float64_t b)
#define SG_ADD(...)
Definition: SGObject.h:71
SGVector< T > clone() const
Definition: SGVector.cpp:257
index_t vlen
Definition: SGVector.h:706

SHOGUN Machine Learning Toolbox - Documentation