使用以下小数据集:
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绘制了原始数据,如下所示:
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
xlabel("Bill amount ($)")
ylabel("Tip amount ($)")
#display plot
plt.show()
我不确定如何把回归线放到曲线图上。我知道,有很多内置的东西,以快速拟合和显示最佳拟合线,但我这样做作为练习。我知道我可以在点“0,0.8188”(截距)开始直线,但我不知道如何使用斜率值来完成直线(设置直线终点)。
假设x轴上的每次增加,斜率应增加0.1462;对于线坐标,我尝试(0,0.8188)作为起点,而(100,14.62)作为终点。但这条线没有穿过我的质心点。只是错过了。
干杯, 乔恩
这个问题的推理部分正确。有一个函数
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
获得斜率和截距:其余的情节将保持不变。
定义函数拟合,获取数据的端点,将元组放入plot()
简要说明: 我认为回归公式应该是
我是说+而不是-。
相关问题 更多 >
编程相关推荐