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)