Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定哪个回归曲线更适合?python_Python_Python 3.x_Numpy_Scipy_Regression - Fatal编程技术网

如何确定哪个回归曲线更适合?python

如何确定哪个回归曲线更适合?python,python,python-3.x,numpy,scipy,regression,Python,Python 3.x,Numpy,Scipy,Regression,社区: 最近我问过如何做指数回归()认为对于那个数据集,最佳回归是双曲线回归 x_data = np.arange(0, 51) y_data = np.array([0.001, 0.199, 0.394, 0.556, 0.797, 0.891, 1.171, 1.128, 1.437, 1.525, 1.720, 1.703, 1.895, 2.003, 2.108, 2.408, 2.424,2.537, 2.647, 2.740, 2.95

社区:

最近我问过如何做指数回归()认为对于那个数据集,最佳回归是双曲线回归

x_data = np.arange(0, 51) 
y_data = np.array([0.001, 0.199, 0.394, 0.556, 0.797, 0.891, 1.171, 1.128, 1.437, 
          1.525, 1.720, 1.703, 1.895, 2.003, 2.108, 2.408, 2.424,2.537, 
          2.647, 2.740, 2.957, 2.58, 3.156, 3.051, 3.043, 3.353, 3.400, 
          3.606, 3.659, 3.671, 3.750, 3.827, 3.902, 3.976, 4.048, 4.018, 
          4.286, 4.353, 4.418, 4.382, 4.444, 4.485, 4.465, 4.600, 4.681, 
          4.737, 4.792, 4.845, 4.909, 4.919, 5.100])
现在,我怀疑:

第一种是指数拟合。第二种是双曲线。我不知道哪一个更好。。。如何确定?我应该遵循哪些标准?有一些python函数吗


提前谢谢

好吧,你应该计算一个误差函数来衡量你的实际拟合程度。您可以使用许多不同的误差函数,但首先,均方误差应该可以工作(如果您对进一步的指标感兴趣,请查看)

确定回归问题的系数后,可以手动实现均方误差:

from sklearn.metrics import mean_squared_error
f = lambda x: a * np.exp(b * x) + c 
mse = mean_squared_error(y_data, f(x_data))

你应该计算一个误差函数来衡量你的拟合度。您可以使用许多不同的误差函数,但首先,均方误差应该可以工作(如果您对进一步的指标感兴趣,请查看)

确定回归问题的系数后,可以手动实现均方误差:

from sklearn.metrics import mean_squared_error
f = lambda x: a * np.exp(b * x) + c 
mse = mean_squared_error(y_data, f(x_data))

一个常见的拟合统计量是R平方(R2),可以计算为“R2=1.0-(绝对误差方差/相依数据方差”),它告诉您模型解释了相依数据方差的哪一部分。例如,如果R平方值为0.95,那么您的模型可以解释95%的相关数据方差。由于您使用的是numpy,R平方值的计算结果通常为“R2=1.0-(abs_err.var()/dep_data.var()”,因为numpy数组有一个var()方法来计算方差。将数据拟合到Michaelis-Menten方程“y=ax/(b+x)”,参数值为a=1.0232217656373191E+01和b=5.201605736771100E+01时,我计算的R平方值为0.9967,这意味着“y”数据中99.67%的方差由该模型解释。然而,没有银弹,验证其他拟合统计数据并目视检查模型总是好的。以下是我使用的示例的绘图:

一个常见的拟合统计量是R平方(R2),可以计算为“R2=1.0-(绝对误差方差/相关数据方差)”,它告诉您模型解释了相关数据方差的哪一部分。例如,如果R平方值为0.95,那么您的模型可以解释95%的相关数据方差。由于您使用的是numpy,R平方值的计算结果通常为“R2=1.0-(abs_err.var()/dep_data.var()”,因为numpy数组有一个var()方法来计算方差。将数据拟合到Michaelis-Menten方程“y=ax/(b+x)”,参数值为a=1.0232217656373191E+01和b=5.201605736771100E+01时,我计算的R平方值为0.9967,这意味着“y”数据中99.67%的方差由该模型解释。然而,没有银弹,验证其他拟合统计数据并目视检查模型总是好的。以下是我使用的示例的绘图:

您可以在函数和拟合线之间取2-范数。Python具有函数
np.linalg.norm
R平方值用于线性回归

可以在函数和拟合线之间取2-范数。Python具有函数
np.linalg.norm
R平方值用于线性回归

这更像是一个数学问题,而不是一个编程问题。一种方法是计算两条曲线的长度,并选择具有较低长度的曲线。有关的详细信息,请参见。您的数据点是否有错误条?如果是这样,它们是高斯误差吗?这更像是一个数学问题,而不是一个编程问题。一种方法是计算两条曲线的长度,并选择具有较低长度的曲线。有关的详细信息,请参见。您的数据点是否有错误条?如果是这样,它们是高斯误差吗?我的理解是R平方对于线性回归是精确的,对于非线性回归是近似的。仍然有用,因为它没有单位,使得比较不同的数据集回归更容易。例如当以光年为单位拟合数据时,R平方值为0.5,当以毫升为单位拟合数据时,R平方值为0.99,这两种情况下都可以理解拟合质量。这也是我的理解。我的理解是,R平方对于线性回归是精确的,对于非线性回归是近似的。仍然有用,因为它没有单位,使得比较不同的数据集回归更容易。例如,当以光年为单位拟合数据时,R平方值为0.5,当以毫升为单位拟合数据时,R平方值为0.99,这两种情况下都可以理解拟合质量。这也是我的理解