使用以下小型数据集:
bill = [34,108,64,88,99,51]
tip = [5,17,11,8,14,5]
我计算了一条最佳拟合回归线(手工)。
yi = 0.1462*x - 0.8188 #yi = slope(x) + intercept
我已经使用 Matplotlib 绘制了我的原始数据,如下所示:
plt.scatter(bill,tip, color="black")
plt.xlim(20,120) #set ranges
plt.ylim(4,18)
#plot centroid point (mean of each variable (74,10))
line1 = plt.plot([74, 74],[0,10], ':', c="red")
line2 = plt.plot([0,74],[10,10],':', c="red")
plt.scatter(74,10, c="red")
#annotate the centroid point
plt.annotate('centroid (74,10)', xy=(74.1,10), xytext=(81,9),
arrowprops=dict(facecolor="black", shrink=0.01),
)
#label axes
plt.xlabel("Bill amount ($)")
plt.ylabel("Tip amount ($)")
#display plot
plt.show()
我不确定如何将回归线放到图本身上。我知道有很多内置的东西可以快速拟合和显示最佳拟合线,但我这样做是为了练习。我知道我可以在点“0,0.8188”(截距)开始这条线,但我不知道如何使用斜率值来完成这条线(设置线的终点)。
鉴于 x 轴每增加一次,斜率应增加“0.1462”;对于线坐标,我尝试将 (0,0.8188) 作为起点,将 (100,14.62) 作为终点。但是这条线不通过我的质心点。它只是想念它。
干杯,乔恩
原文由 Beatdown 发布,翻译遵循 CC BY-SA 4.0 许可协议
问题中的推理部分正确。具有函数
f(x) = a*x +b
,您可以将 y 轴 (x=0) 的截取点作为(0, b)
(或(0,-0.8188)
)作为第一个点。该线上的任何其他点由
(x, f(x))
或(x, a*x+b)
。因此,查看 x=100 处的点会给你(100, f(100))
,插入:(100, 0.1462*100-0.8188)
=(100,13.8012)
。在您在问题中描述的情况下,您只是忘记考虑b
。下面显示了如何使用该函数在 matplotlib 中绘制线条:
当然,拟合也可以自动完成。您可以通过调用
numpy.polyfit
获得斜率和截距:情节中的其余部分将保持不变。