如何解决有没有办法手动找到最佳拟合线的斜率和y截距线回归?
假设我有一个非常小的数据集。非常简单。 x = [1,2,3,4,5]
,y = [20,50,15,60,40]
x
是自变量。 y
是因变量。
主要是我想找出回归线的斜率值,即y = mx + b中的'm'。
有没有办法手动找到最佳拟合线的斜率和y截距(线回归)(不使用train_test_split
库中的sklearn
方法)?
我在Excel女士中尝试了相同的操作。我创建了两个列,分别为x和y以及它们各自的值。然后我选择了具有线性回归特征的散点图,它立即为我提供了方程为y = 5x + 22的图。
我想在python中执行相同的任务,而无需使用train_test_split
方法,只是想知道是否还有其他方法。
解决方法
您可以使用sklearn.linear_model.LinearRegression
。
x = np.array([1,2,3,4,5]).reshape(-1,1)
y = np.array([20,50,15,60,40]).reshape(-1,1)
lr = LinearRegression()
lr.fit(x,y)
系数另存为属性:
lr.coef_,lr.intercept_
收益
(array([[5.]]),array([22.]))
,
是的,有办法!如果该行的方程为y = mx + b
,则-
m(斜率)=((x̅*y̅)-x̅y̅)/((x̅)²-(x̅²))
b(y轴截距)=y̅-mx̅x̅表示“ x值的平均值(平均值)”
x̅y̅的意思是“ x * y中值的平均值”
(x̅)²表示“ x中的均值的平方”
(x̅²)表示“ x * x中的平均值”
x * y = [a,b,c,d,e] * [f,g,h,i,j] = [a * f,b * g,c * h,d * i,e * j]
如果您的数据位于简单列表中(如问题中所述),则可以通过以下方式获取“ m”和“ b”:
def best_fit_line(x_values,y_values):
"""Returns slope and y-intercept of the best fit line of the values"""
mean = lambda l: sum(l)/len(l)
multiply = lambda l1,l2: [a*b for a,b in zip(l1,l2)]
m = ( (mean(x_values)*mean(y_values) - mean(multiply(x_values,y_values))) /
(mean(x_values)**2 - mean(multiply(x_values,x_values))) )
b = mean(y_values) - m*mean(x_values)
return m,b
示例:
# drive code for the second futction
x = [1,5]
y = [20,40]
m,b = best_fit_line(x,y)
print(f"regression line: y = {round(m,2)}x + {round(b,2)}")
# Output:
# regression line: y = 5.0x + 22.0
您看到斜率(m)为5,y轴截距(b)为22。
如果您的数据位于numpy数组中,则可以通过以下方式获取“ m”和“ b”:
def best_fit_line(x_values,y_values):
"""Returns slope and y-intercept of the best fit line of the values"""
m = ( (x_values.mean()*y_values.mean() - (x_values*y_values).mean()) /
(x_values.mean()**2 - (x_values**2).mean()) )
b = y_values.mean() - m * x_values.mean()
return m,b
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。