⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cost.h

📁 C++编写的机器学习算法 Lemga is a C++ package which consists of classes for several learning models and gener
💻 H
字号:
// -*- C++ -*-#ifndef __LEMGA_COST_H__#define __LEMGA_COST_H__/** @file *  @brief Cost functions (functors) used in learning * *  $Id: cost.h 2537 2006-01-08 08:40:36Z ling $ */#include <cmath>#include "object.h"namespace lemga {namespace cost {template <typename _Num>struct AdaCost {    virtual ~AdaCost () { /* get rid of GCC 4.0 warnings */ }    virtual _Num cost (const _Num& F, const _Num& y) const {        assert(std::fabs(y*y-1) < INFINITESIMAL);        return std::exp(-(F * y));    }    inline _Num operator() (const _Num& F, const _Num& y) const    { return cost(F, y); }    virtual _Num deriv1 (const _Num& F, const _Num& y) const {        assert(std::fabs(y*y-1) < INFINITESIMAL);        return -std::exp(- (F * y)) * y;    }};/* A temporary workaround: Using real class instead of functor */typedef AdaCost<REAL> Cost;const Cost _cost = Cost();struct exponential : public Cost {    REAL lambda;    exponential () : lambda(1) {};    virtual REAL cost (const REAL& F, const REAL& y) const {        return std::exp(-lambda*F*y);    }    virtual REAL deriv1 (const REAL& F, const REAL& y) const {        return -lambda*y * std::exp(-lambda*F*y);    }};struct logistic : public Cost {    REAL lambda;    logistic () : lambda(1) {};    virtual REAL cost (const REAL& F, const REAL& y) const {        return std::log(1 + std::exp(-lambda*F*y));    }    virtual REAL deriv1 (const REAL& F, const REAL& y) const {        const REAL t = std::exp(-lambda*F*y);        return -lambda*y * t / (1+t);    }};struct sigmoid : public Cost {    REAL lambda;    sigmoid () : lambda(1) {};    virtual REAL cost (const REAL& F, const REAL& y) const {        return 1 - std::tanh(lambda*F*y);    }    virtual REAL deriv1 (const REAL& F, const REAL& y) const {        const REAL t = std::tanh(lambda*F*y);        return lambda*y * (t*t - 1);    }};struct bisigmoid : public Cost {    REAL lambda;    REAL ratio;   ///< ratio = lambda_neg / lambda <= 1    bisigmoid () : lambda(1), ratio(0.8) {};    virtual REAL cost (const REAL& F, const REAL& y) const {        const REAL m = lambda*F*y;        if (m > 0) return 1 - std::tanh(m)/lambda;        return 1 - std::tanh(ratio*m)/(ratio*lambda);    }    virtual REAL deriv1 (const REAL& F, const REAL& y) const {        const REAL m = lambda*F*y;        const REAL t = std::tanh(m>0? m:(ratio*m));        return y * (t*t - 1);    }};}} // namespace lemga::cost#ifdef  __COST_H__  // check duplicate filenames#warning "This header file may conflict with another `cost.h' file."#endif#define __COST_H__#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -