statsmodels 没有返回正确的梯度
statsmodels not returning correct gradient
我觉得我错过了一些非常简单的东西,我相信有人能够很容易地纠正它。由于某种原因,我无法将 pythons 统计模型设置为 return 正确的梯度。这是我的代码:
import statsmodels.api as sm
y_values = [10, 8, 6, 4, 2]
x_values = [1, 2, 3, 4, 5]
mod = sm.OLS(y_values, x_values)
fit = mod.fit()
print(fit.summary())
print(fit.params[0])
这个答案 表明我正在为模型获取正确的梯度参数,但它给了我一个我不明白的答案“1.2727”?对于这个示例案例,我期望这会给我一个“-2.0”的梯度?
在你的例子中,这条线不会通过原点,所以公式不能是 y = mx
而是 y = mx + c
,这意味着你需要一个截距:
mod = sm.OLS(y_values, sm.add_constant(x_values))
fit = mod.fit()
print(fit.params)
[12. -2.]
如果这有帮助:
import seaborn as sns
sns.scatterplot(x=x_values,y=y_values)
最终通过 sklearn 到达了那里,这有点多 'straight out of the box':
from sklearn.linear_model import LinearRegression
mod = LinearRegression().fit(x_values, y_values)
grad = mod.coef_[0][0]
print(grad)
我觉得我错过了一些非常简单的东西,我相信有人能够很容易地纠正它。由于某种原因,我无法将 pythons 统计模型设置为 return 正确的梯度。这是我的代码:
import statsmodels.api as sm
y_values = [10, 8, 6, 4, 2]
x_values = [1, 2, 3, 4, 5]
mod = sm.OLS(y_values, x_values)
fit = mod.fit()
print(fit.summary())
print(fit.params[0])
这个答案
在你的例子中,这条线不会通过原点,所以公式不能是 y = mx
而是 y = mx + c
,这意味着你需要一个截距:
mod = sm.OLS(y_values, sm.add_constant(x_values))
fit = mod.fit()
print(fit.params)
[12. -2.]
如果这有帮助:
import seaborn as sns
sns.scatterplot(x=x_values,y=y_values)
最终通过 sklearn 到达了那里,这有点多 'straight out of the box':
from sklearn.linear_model import LinearRegression
mod = LinearRegression().fit(x_values, y_values)
grad = mod.coef_[0][0]
print(grad)