手書き非線形最小二乗
1393 ワード
勾配降下法を用いて非線形最小二乗問題を解く
方法1:勾配降下法
現在、勾配降下アルゴリズムにはlamdaのパラメータとmin_をどのように調整するかなどの問題がある.Step間の関係
参考ブログ:
[1] https://www.jianshu.com/p/bf6ec56e26bd
[2] https://zhuanlan.zhihu.com/p/42383070
方法1:勾配降下法
#include
#include
#include
#include
#include
#include
#include
class descent_method
{
private:
/* data */
double a_; //
double b_;
double c_;
double lamda_;
Eigen::Vector3d Gradient_;
int max_iter_;
double min_step_;
//Eigen::MatrixXd Gradient_; //
void cal_Gradient();
void update_deltT();
std::vector x_obs_;
std::vector y_obs_;
public:
descent_method(double a, double b, double c);
void add_obs(double x, double y);
void solve_cost();
~descent_method();
};
descent_method::descent_method(double a, double b, double c) : a_(a), b_(b), c_(c)
{
max_iter_ = 50000;
min_step_ = 1e-3;
lamda_ =1e-3;
}
descent_method::~descent_method()
{
}
void descent_method::add_obs(double x, double y) //
{
x_obs_.push_back(x);
y_obs_.push_back(y);
}
void descent_method::solve_cost()
{
for (int i = 0; i < max_iter_; i++) //
{
cal_Gradient(); //
//std::cout<
現在、勾配降下アルゴリズムにはlamdaのパラメータとmin_をどのように調整するかなどの問題がある.Step間の関係
参考ブログ:
[1] https://www.jianshu.com/p/bf6ec56e26bd
[2] https://zhuanlan.zhihu.com/p/42383070