SHOGUN
3.2.1
首页
相关页面
模块
类
文件
文件列表
文件成员
全部
类
命名空间
文件
函数
变量
类型定义
枚举
枚举值
友元
宏定义
组
页
src
shogun
structure
CCSOSVM.h
浏览该文件的文档.
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) 2012 Viktor Gal
8
* Copyright (C) 2008 Chun-Nam Yu
9
*/
10
11
#ifndef __CCSOSVM_H__
12
#define __CCSOSVM_H__
13
14
#include <
shogun/lib/config.h
>
15
#include <
shogun/machine/LinearStructuredOutputMachine.h
>
16
#include <
shogun/base/DynArray.h
>
17
18
#ifdef USE_MOSEK
19
#include <mosek.h>
20
#endif
21
22
namespace
shogun
23
{
24
29
enum
EQPType
30
{
31
MOSEK
=1,
32
SVMLIGHT
=2
33
};
34
43
class
CCCSOSVM
:
public
CLinearStructuredOutputMachine
44
{
45
public
:
47
CCCSOSVM
();
48
53
CCCSOSVM
(
CStructuredModel
* model,
SGVector<float64_t>
w =
SGVector<float64_t>
());
54
56
virtual
~CCCSOSVM
();
57
59
inline
virtual
const
char
*
get_name
()
const
{
return
"CCSOSVM"
; }
60
65
inline
void
set_w
(
SGVector< float64_t >
W)
66
{
67
REQUIRE
(W.
vlen
==
m_model
->
get_dim
(),
"Dimension of the initial "
68
"solution must match the model's dimension!\n"
);
69
m_w
=W;
70
}
71
76
inline
void
set_epsilon
(
float64_t
eps)
77
{
78
m_eps = eps;
79
}
80
85
inline
float64_t
get_epsilon
()
const
86
{
87
return
m_eps;
88
}
89
94
inline
void
set_C
(
float64_t
C)
95
{
96
m_C = C;
97
}
98
103
inline
float64_t
get_C
()
const
104
{
105
return
m_C;
106
}
107
112
inline
void
set_max_iter
(
index_t
max_iter)
113
{
114
m_max_iter = max_iter;
115
}
116
121
inline
index_t
get_max_iter
()
const
122
{
123
return
m_max_iter;
124
}
125
130
inline
float64_t
compute_primal_objective
()
131
{
132
return
m_primal_obj;
133
}
134
139
inline
float64_t
get_max_rho
()
const
140
{
141
return
m_max_rho;
142
}
143
148
inline
void
set_max_rho
(
float64_t
max_rho)
149
{
150
m_max_rho = max_rho;
151
}
152
157
inline
EQPType
get_qp_type
()
const
158
{
159
return
m_qp_type;
160
}
161
166
inline
void
set_qp_type
(
EQPType
type)
167
{
168
m_qp_type = type;
169
}
170
175
virtual
EMachineType
get_classifier_type
();
176
177
protected
:
178
bool
train_machine
(
CFeatures
* data=NULL);
179
180
private
:
186
SGSparseVector<float64_t>
find_cutting_plane(
float64_t
* margin);
187
188
int32_t resize_cleanup(int32_t size_active,
SGVector<int32_t>
& idle,
SGVector<float64_t>
&alpha,
189
SGVector<float64_t>
&
delta
,
SGVector<float64_t>
& gammaG0,
190
SGVector<float64_t>
& proximal_rhs,
float64_t
***ptr_G,
191
DynArray
<
SGSparseVector<float64_t>
>& dXc,
SGVector<float64_t>
& cut_error);
192
193
int32_t mosek_qp_optimize(
float64_t
** G,
float64_t
*
delta
,
float64_t
* alpha, int32_t k,
float64_t
* dual_obj,
float64_t
rho);
194
196
void
init();
197
198
private
:
200
float64_t
m_C;
202
float64_t
m_eps;
204
float64_t
m_primal_obj;
205
float64_t
m_alpha_thrld;
206
float64_t
m_max_rho;
207
209
index_t
m_max_iter;
211
index_t
m_cleanup_check;
213
index_t
m_idle_iter;
214
216
EQPType
m_qp_type;
217
#ifdef USE_MOSEK
218
219
MSKenv_t m_msk_env;
220
#endif
221
};
222
}
223
224
#endif
SHOGUN
机器学习工具包 - 项目文档