SHOGUN
3.2.1
首页
相关页面
模块
类
文件
文件列表
文件成员
全部
类
命名空间
文件
函数
变量
类型定义
枚举
枚举值
友元
宏定义
组
页
src
shogun
kernel
normalizer
RidgeKernelNormalizer.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) 2009 Soeren Sonnenburg
8
* Copyright (C) 2009 Fraunhofer Institute FIRST and Max-Planck-Society
9
*/
10
11
#ifndef _RIDGEKERNELNORMALIZER_H___
12
#define _RIDGEKERNELNORMALIZER_H___
13
14
#include <
shogun/kernel/normalizer/KernelNormalizer.h
>
15
16
namespace
shogun
17
{
43
class
CRidgeKernelNormalizer
:
public
CKernelNormalizer
44
{
45
public
:
56
CRidgeKernelNormalizer
(
float64_t
r=1e-10,
float64_t
c=0.0)
57
:
CKernelNormalizer
()
58
{
59
SG_ADD
(&
scale
,
"scale"
,
"Scale quotient by which kernel is scaled."
,
60
MS_AVAILABLE
);
61
SG_ADD
(&
ridge
,
"ridge"
,
"Ridge added to diagonal."
,
MS_AVAILABLE
);
62
63
scale
=c;
64
ridge
=r;
65
}
66
68
virtual
~CRidgeKernelNormalizer
()
69
{
70
}
71
74
virtual
bool
init
(
CKernel
* k)
75
{
76
if
(
scale
<=0)
77
{
78
ASSERT
(k)
79
int32_t num=k->
get_num_vec_lhs
();
80
ASSERT
(num>0)
81
82
CFeatures
* old_lhs=k->
lhs
;
83
CFeatures
* old_rhs=k->
rhs
;
84
k->
lhs
=old_lhs;
85
k->
rhs
=old_lhs;
86
87
float64_t
sum=0;
88
for
(int32_t i=0; i<num; i++)
89
sum+=k->
compute
(i, i);
90
91
scale
=sum/num;
92
k->
lhs
=old_lhs;
93
k->
rhs
=old_rhs;
94
}
95
96
ridge
*=
scale
;
97
return
true
;
98
}
99
105
virtual
float64_t
normalize
(
106
float64_t
value, int32_t idx_lhs, int32_t idx_rhs)
107
{
108
if
(idx_lhs==idx_rhs)
109
return
value+
ridge
;
110
else
111
return
value;
112
}
113
118
virtual
float64_t
normalize_lhs
(
float64_t
value, int32_t idx_lhs)
119
{
120
SG_ERROR
(
"linadd not supported with Ridge normalization.\n"
)
121
return
0;
122
}
123
128
virtual
float64_t
normalize_rhs
(
float64_t
value, int32_t idx_rhs)
129
{
130
SG_ERROR
(
"linadd not supported with Ridge normalization.\n"
)
131
return
0;
132
}
133
135
virtual
const
char
*
get_name
()
const
{
return
"RidgeKernelNormalizer"
; }
136
137
protected
:
139
float64_t
ridge
;
141
float64_t
scale
;
142
};
143
}
144
#endif // _RIDGEKERNELNORMALIZER_H___
SHOGUN
机器学习工具包 - 项目文档