SHOGUN
4.1.0
首页
相关页面
模块
类
文件
文件列表
文件成员
全部
类
命名空间
文件
函数
变量
类型定义
枚举
枚举值
友元
宏定义
组
页
src
shogun
optimization
FirstOrderMinimizer.h
浏览该文件的文档.
1
/*
2
* Copyright (c) The Shogun Machine Learning Toolbox
3
* Written (w) 2015 Wu Lin
4
* All rights reserved.
5
*
6
* Redistribution and use in source and binary forms, with or without
7
* modification, are permitted provided that the following conditions are met:
8
*
9
* 1. Redistributions of source code must retain the above copyright notice, this
10
* list of conditions and the following disclaimer.
11
* 2. Redistributions in binary form must reproduce the above copyright notice,
12
* this list of conditions and the following disclaimer in the documentation
13
* and/or other materials provided with the distribution.
14
*
15
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
19
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
*
26
* The views and conclusions contained in the software and documentation are those
27
* of the authors and should not be interpreted as representing official policies,
28
* either expressed or implied, of the Shogun Development Team.
29
*
30
*/
31
32
#ifndef FIRSTORDERMINIMIZER_H
33
#define FIRSTORDERMINIMIZER_H
34
#include <
shogun/lib/config.h
>
35
#include <
shogun/optimization/FirstOrderCostFunction.h
>
36
#include <
shogun/optimization/MinimizerContext.h
>
37
#include <
shogun/optimization/Penalty.h
>
38
namespace
shogun
39
{
40
54
class
FirstOrderMinimizer
55
{
56
public
:
58
FirstOrderMinimizer
()
59
{
60
init();
61
}
62
66
FirstOrderMinimizer
(
FirstOrderCostFunction
*fun)
67
{
68
init();
69
set_cost_function
(fun);
70
}
71
73
virtual
~FirstOrderMinimizer
()
74
{}
75
80
virtual
float64_t
minimize
()=0;
81
86
virtual
bool
supports_batch_update
()
const
=0;
87
92
virtual
void
set_cost_function
(
FirstOrderCostFunction
*fun)
93
{
94
REQUIRE
(fun,
"The cost function must be not NULL\n"
);
95
m_fun
=fun;
96
}
97
103
virtual
CMinimizerContext
*
save_to_context
()
104
{
105
CMinimizerContext
* result=
new
CMinimizerContext
();
106
update_context
(result);
107
return
result;
108
}
109
115
virtual
void
load_from_context
(
CMinimizerContext
* context)
116
{
117
REQUIRE
(context,
"Context must set\n"
);
118
if
(
m_penalty_type
)
119
m_penalty_type
->
load_from_context
(context);
120
}
121
126
virtual
void
set_penalty_weight
(
float64_t
penalty_weight)
127
{
128
REQUIRE
(penalty_weight>0,
"The weight of penalty must be positive\n"
);
129
m_penalty_weight
=penalty_weight;
130
}
131
137
virtual
void
set_penalty_type
(
Penalty
* penalty_type)
138
{
139
m_penalty_type
=penalty_type;
140
}
141
protected
:
142
147
virtual
void
update_context
(
CMinimizerContext
* context)
148
{
149
REQUIRE
(context,
"Context must set\n"
);
150
if
(
m_penalty_type
)
151
m_penalty_type
->
update_context
(context);
152
}
153
164
virtual
float64_t
get_penalty
(
SGVector<float64_t>
var)
165
{
166
float64_t
penalty=0.0;
167
if
(
m_penalty_type
)
168
{
169
REQUIRE
(
m_penalty_weight
>0,
"The weight of penalty must be set first\n"
);
170
for
(
index_t
idx=0; idx<var.
vlen
; idx++)
171
penalty+=
m_penalty_weight
*
m_penalty_type
->
get_penalty
(var[idx]);
172
}
173
return
penalty;
174
}
175
190
virtual
void
update_gradient
(
SGVector<float64_t>
gradient,
SGVector<float64_t>
var)
191
{
192
if
(
m_penalty_type
)
193
{
194
REQUIRE
(
m_penalty_weight
>0,
"The weight of penalty must be set first\n"
);
195
for
(
index_t
idx=0; idx<var.
vlen
; idx++)
196
{
197
float64_t
grad=gradient[idx];
198
float64_t
variable=var[idx];
199
gradient[idx]+=
m_penalty_weight
*
m_penalty_type
->
get_penalty_gradient
(variable,grad);
200
}
201
}
202
}
203
205
FirstOrderCostFunction
*
m_fun
;
206
208
Penalty
*
m_penalty_type
;
209
211
float64_t
m_penalty_weight
;
212
213
private
:
215
void
init()
216
{
217
m_fun=NULL;
218
m_penalty_type=NULL;
219
m_penalty_weight=0;
220
}
221
};
222
223
}
224
#endif
Penalty.h
shogun::Penalty::get_penalty_gradient
virtual float64_t get_penalty_gradient(float64_t variable, float64_t gradient)=0
shogun::FirstOrderMinimizer::update_gradient
virtual void update_gradient(SGVector< float64_t > gradient, SGVector< float64_t > var)
Definition:
FirstOrderMinimizer.h:190
shogun::FirstOrderMinimizer::m_penalty_weight
float64_t m_penalty_weight
Definition:
FirstOrderMinimizer.h:211
index_t
int32_t index_t
Definition:
common.h:62
shogun::CMinimizerContext
The class is used to serialize and deserialize variables for the optimization framework.
Definition:
MinimizerContext.h:45
shogun::FirstOrderMinimizer::set_penalty_weight
virtual void set_penalty_weight(float64_t penalty_weight)
Definition:
FirstOrderMinimizer.h:126
shogun::FirstOrderMinimizer::m_fun
FirstOrderCostFunction * m_fun
Definition:
FirstOrderMinimizer.h:205
config.h
REQUIRE
#define REQUIRE(x,...)
Definition:
SGIO.h:206
shogun::Penalty
The base class for penalty/regularization used in minimization.
Definition:
Penalty.h:46
shogun::FirstOrderMinimizer::FirstOrderMinimizer
FirstOrderMinimizer()
Definition:
FirstOrderMinimizer.h:58
shogun::SGVector::vlen
index_t vlen
Definition:
SGVector.h:494
shogun::FirstOrderMinimizer::set_cost_function
virtual void set_cost_function(FirstOrderCostFunction *fun)
Definition:
FirstOrderMinimizer.h:92
shogun::Penalty::get_penalty
virtual float64_t get_penalty(float64_t variable)=0
shogun::SGVector< float64_t >
float64_t
double float64_t
Definition:
common.h:50
shogun::FirstOrderMinimizer::save_to_context
virtual CMinimizerContext * save_to_context()
Definition:
FirstOrderMinimizer.h:103
shogun::Penalty::update_context
virtual void update_context(CMinimizerContext *context)=0
shogun::FirstOrderMinimizer::m_penalty_type
Penalty * m_penalty_type
Definition:
FirstOrderMinimizer.h:208
shogun::FirstOrderMinimizer::FirstOrderMinimizer
FirstOrderMinimizer(FirstOrderCostFunction *fun)
Definition:
FirstOrderMinimizer.h:66
shogun::FirstOrderMinimizer::get_penalty
virtual float64_t get_penalty(SGVector< float64_t > var)
Definition:
FirstOrderMinimizer.h:164
shogun::FirstOrderCostFunction
The first order cost function base class.
Definition:
FirstOrderCostFunction.h:50
MinimizerContext.h
shogun::Penalty::load_from_context
virtual void load_from_context(CMinimizerContext *context)=0
shogun::FirstOrderMinimizer::supports_batch_update
virtual bool supports_batch_update() const =0
FirstOrderCostFunction.h
shogun::FirstOrderMinimizer::~FirstOrderMinimizer
virtual ~FirstOrderMinimizer()
Definition:
FirstOrderMinimizer.h:73
shogun
all of classes and functions are contained in the shogun namespace
Definition:
class_list.h:18
shogun::FirstOrderMinimizer::load_from_context
virtual void load_from_context(CMinimizerContext *context)
Definition:
FirstOrderMinimizer.h:115
shogun::FirstOrderMinimizer::minimize
virtual float64_t minimize()=0
shogun::FirstOrderMinimizer::set_penalty_type
virtual void set_penalty_type(Penalty *penalty_type)
Definition:
FirstOrderMinimizer.h:137
shogun::FirstOrderMinimizer::update_context
virtual void update_context(CMinimizerContext *context)
Definition:
FirstOrderMinimizer.h:147
shogun::FirstOrderMinimizer
The first order minimizer base class.
Definition:
FirstOrderMinimizer.h:54
SHOGUN
机器学习工具包 - 项目文档