2

给定以下一组 xs 和 ys:

xs = [8294400, 2073600, 921600, 409920]

ys = [124, 433, 853, 1449]

用 Excel 中的幂律拟合它会产生一个很好的近似值:

在此处输入图像描述

Excel 找到了表格的功能a(x^b)。在 C# 中如何确定a和?b我尝试使用 Math.Net 数字,但我没有看到任何适用于这种形式的函数的方法。线性回归模块中的所有函数都只是找到各种形式函数的线性系数,但似乎没有一个能够确定指数。

4

2 回答 2

5

您想要的方程式如下所示:

y = a*x^b

取两边的自然对数:

ln(y) = ln(a*x^b) = ln(a) + b*ln(x)

现在您可以对新转换的变量使用线性回归(ln(x), ln(y))并计算您想要的两个参数:ln(a)b

于 2015-05-26T19:37:08.327 回答
1

在指数系统中,进行回归的最佳方法可能是在对数尺度上进行线性回归。澄清一下,即使你的函数不是线性的,取等式两边的自然对数也会得到一个更线性的系统

非线性函数:y = a x^b

这然后变成ln(y) = ln(a x^b) = ln(a) b ln(x)

在 Math.NET Numerics 中,编写代码的好方法可能是:

var y = y.Select(r => Math.Log(r)).ToArray(); // transform y = ln(z)
double[] w = Fit.LinearCombination(xy, z_hat,
    d => 1.0,
    d => Math.Log(d[0]),
    d => Math.Log(d[1]))

或者如果你想让它返回一个你可以使用的函数LinearCombinationFunc()

资料来源: http: //numerics.mathdotnet.com/Regression.htmlhttp://numerics.mathdotnet.com/api/MathNet.Numerics/Fit.htm

于 2015-05-26T19:57:36.513 回答