linreg subpackage包含两个类:linearmodel和lrreport
用于生成线性模型的函数
lrbuild函数:生成线性模型
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; }