alglib库之linear regression

linreg subpackage包含两个类:linearmodel和lrreport

 

用于生成线性模型的函数

lrbuild函数:生成线性模型Star

void alglib::lrbuild(real_2d_array xy, ae_int_t npoints, ae_int_t nvars, ae_int_t& info, linearmodel& lm, lrreport& ar);

输入值为测试数据集xy, npoints和nvars为数据集的大小. npoints需要大于nvars.

输出值为错误信息info, 线性模型lm, 模型的各种差值ar.

lrbuilds函数: 生成线性模型(用户定义标准差)

void alglib::lrbuilds( real_2d_array xy, real_1d_array s, ae_int_t npoints, ae_int_t nvars, ae_int_t& info, linearmodel& lm, lrreport& ar);

与lrbuild相似,s为标准差,长度为npoints.

 

lrbuildz函数: 生成线性模型(常数项为0)

void alglib::lrbuildz( real_2d_array xy, ae_int_t npoints, ae_int_t nvars, ae_int_t& info, linearmodel& lm, lrreport& ar);

 

lrbuildzs函数: 生成线性模型(lrbuilds和lrbuildz合并)

void alglib::lrbuildzs( real_2d_array xy, real_1d_array s, ae_int_t npoints, ae_int_t nvars, ae_int_t& info, linearmodel& lm, lrreport& ar);

 

用于系数和线性模型相互转换的函数

lrpack函数:从系数到模型。

void alglib::lrpack(real_1d_array v, ae_int_t nvars, linearmodel& lm);

v为系数,nvars为系数个数。nvars=length(v)-1

 

lrunpack函数:从模型到系数。

void alglib::lrunpack(linearmodel lm, real_1d_array& v, ae_int_t& nvars);

 

 

用于预测的函数

lrprocess函数

double alglib::lrprocess(linearmodel lm, real_1d_array x);

返回值为预测值

 

用于计算error的函数

lravgerror函数: 计算average error

double alglib::lravgerror(linearmodel lm, real_2d_array xy, ae_int_t npoints);

输入值为线性模型lm,为测试数据集xy和数据集大小npoints

返回值为average error

 

lravgrelerror函数: 计算average relative error

double alglib::lravgrelerror(linearmodel lm, real_2d_array xy, ae_int_t npoints);

输入值为线性模型lm,为测试数据集xy和数据集大小npoints

返回值为average relative error

 

lrrmserror函数:计算测试数据集中的RMS error

double alglib::lrrmserror( linearmodel lm, real_2d_array xy, ae_int_t npoints);

总之,线性模型可以由数据生成(lrbuild),在知道系数的情况下,也可以直接构造(lrpack)。基于生成的模型,可以用lrprocess来预测y值。

给出一段简单的C++测试代码

#include <iostream>
#include "dataanalysis.h"

using namespace alglib;

int main(int argc, char **argv)
{
	// Create a data set.
	real_2d_array xy;
	double _x[] = {1.0, 2.3, 3.1, 4.8, 5.6, 6.3};
	double _y[] = {2.6, 2.8, 3.1, 4.7, 5.1, 5.3};

	// Notice that nvars means number of independent variables.
	int npoints = 6; int nvars = 1;
	xy.setlength(npoints, nvars+1);
	// Get the dimension of the data set.
	for(int i=0; i<npoints; i++)
	{
		xy(i,0) = _x[i]; xy(i,1) = _y[i];
	}

	linearmodel lm;
	int info_code = 0; lrreport ar;
	lrbuild(xy, npoints, nvars, info_code, lm, ar);

	real_1d_array coef;
	lrunpack(lm, coef, nvars);

	std::cout << "m: " << coef(0) << " b: " << coef(1) << std::endl;

}

转载于:https://www.cnblogs.com/hh-earlydays/archive/2013/04/04/2999024.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值