37 #ifndef SHARK_ALGORITHMS_ONECLASSSVMTRAINER_H 38 #define SHARK_ALGORITHMS_ONECLASSSVMTRAINER_H 83 template <
class InputType,
class CacheType =
float>
105 {
return "OneClassSvmTrainer"; }
127 RealVector ret(kp + 1);
139 setNu(newParameters(kp));
148 SHARK_CHECK(
m_nu > 0.0 &&
m_nu< 1.0,
"[OneClassSvmTrainer::train] invalid setting of the parameter nu (must be 0 < nu < 1)");
153 trainSVM<PrecomputedMatrixType>(svm,inputset);
155 trainSVM<CachedMatrixType>(svm,inputset);
166 template<
class MatrixType>
173 KernelMatrixType km(*m_kernel, inputset);
175 std::size_t ic = matrix.size();
176 double upper = 1.0/(m_nu*ic);
177 SVMProblemType svmProblem(matrix,
blas::repeat(0.0,ic),0.0,upper);
183 column(svm.
alpha(),0)= problem.getUnpermutedAlpha();
186 double lowerBound = -1e100;
187 double upperBound = 1e100;
189 std::size_t freeVars = 0;
190 for (std::size_t i=0; i != problem.dimensions(); i++)
192 double value = problem.gradient(i);
193 if (problem.alpha(i) == 0.0)
194 lowerBound =
std::max(value,lowerBound);
195 else if (problem.alpha(i) == upper)
196 upperBound =
std::min(value,upperBound);
204 svm.
offset(0) = sum / freeVars;
206 svm.
offset(0) = 0.5 * (lowerBound + upperBound);