如何找到合适的幂律?
How to find a fitting power law?
给定以下一组 xs 和 ys:
xs = [8294400, 2073600, 921600, 409920]
ys = [124, 433, 853, 1449]
用 Excel 中的幂律拟合得到一个很好的近似值:
Excel 找到了 a(x^b)
形式的函数。如何在 C# 中确定 a
和 b
?我尝试使用 Math.Net 数字,但我没有看到任何适用于这种形式的功能的方法。 Linear Regression module中的所有函数都只是求各种形式函数的线性系数,但none似乎可以确定指数。
您想要的方程如下所示:
y = a*x^b
两边取自然对数:
ln(y) = ln(a*x^b) = ln(a) + b*ln(x)
现在您可以对新转换的变量 (ln(x), ln(y))
使用线性回归并计算您想要的两个参数:ln(a)
和 b
。
在指数系统中,进行回归的最佳方法可能是在对数尺度上进行线性回归。澄清一下,即使您的函数不是线性的,对等式两边取自然对数也会导致更线性的系统
非线性函数:y = a x^b
这就变成了ln(y) = ln(a x^b) = ln(a) b ln(x)
在 Math.NET 数值中,一个好的编码方式可能是:
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]))
或者,如果您想要 return 一个函数,您可以使用 LinearCombinationFunc()
来源:http://numerics.mathdotnet.com/Regression.html and http://numerics.mathdotnet.com/api/MathNet.Numerics/Fit.htm
给定以下一组 xs 和 ys:
xs = [8294400, 2073600, 921600, 409920]
ys = [124, 433, 853, 1449]
用 Excel 中的幂律拟合得到一个很好的近似值:
Excel 找到了 a(x^b)
形式的函数。如何在 C# 中确定 a
和 b
?我尝试使用 Math.Net 数字,但我没有看到任何适用于这种形式的功能的方法。 Linear Regression module中的所有函数都只是求各种形式函数的线性系数,但none似乎可以确定指数。
您想要的方程如下所示:
y = a*x^b
两边取自然对数:
ln(y) = ln(a*x^b) = ln(a) + b*ln(x)
现在您可以对新转换的变量 (ln(x), ln(y))
使用线性回归并计算您想要的两个参数:ln(a)
和 b
。
在指数系统中,进行回归的最佳方法可能是在对数尺度上进行线性回归。澄清一下,即使您的函数不是线性的,对等式两边取自然对数也会导致更线性的系统
非线性函数:y = a x^b
这就变成了ln(y) = ln(a x^b) = ln(a) b ln(x)
在 Math.NET 数值中,一个好的编码方式可能是:
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]))
或者,如果您想要 return 一个函数,您可以使用 LinearCombinationFunc()
来源:http://numerics.mathdotnet.com/Regression.html and http://numerics.mathdotnet.com/api/MathNet.Numerics/Fit.htm