如何确定哪个回归曲线更适合?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,这两种情况下都可以理解拟合质量。这也是我的理解