Python中的简单线性回归

“如果您不能简单地解释它,那么您将无法理解得足够。”

简单线性回归是一种统计方法,可让我们总结和研究两个连续(定量)变量之间的关系。 我希望今天能向自己证明我理解并可以通过使用Python从头开始编码而不使用Scikit Learn来演示线性回归。

我将从导入库-numpy和matplotlib开始。 我正在使用Anaconda,因此将内联使用%matplotlib来在笔记本中显示图表。

在本例中,我将创建自己的数据集,有意将其设置为具有线性关系。

我将使用numpy创建两个数组Xylinspace函数将在我指定的间隔内返回均匀间隔的数字。 在括号中输入小数,大数和间隔数。 为此,我想要

我想给这些数组添加一些噪音 ,所以我将使用numpy的random.uniform函数创建一个变量。 这将从均匀分布返回样本。 在括号中输入下边界,上边界和输出形状。

使用matplotlib绘制X和y的基本散点图。

最佳拟合线是一条直线,它将穿过散点图上数据点的中心。 点与线越近,两个变量之间的相关性越强。 这种相关性可以是正的或负的。

我可以清楚地看到,两个变量之间存在很强的正相关性,例如X 增加,y也增加。 我想用数学证明这种相关性的强度。

直线的等式是y = mx + b ,其中m是直线的斜率, by截距

我已经有了X和y值,所以现在我需要计算m和b。 这些公式可以写为:

数学不是我最擅长的方面,因此对我而言,这些公式起初非常吓人。 旁注—如果有兴趣深入研究机器学习算法背后的数学知识,我强烈推荐Lazy Programmer的Udemy课程。

返回公式; 两者中的分母是相同的-X的总和减去X的平均值乘以X的总和。我将创建一个分母变量,而不是两次计算。 计算numpy中X平方和的最有效方法是计算点积。

现在我有了分母,我将写出m和b的分子。

m的分子是X乘以y(X和y的点积)的总和,减去y的平均值乘以X的总和。

b的分子是y的平均值乘以X的平方和(X的点积),再减去X的平均值乘以X的总和乘以y(X和y的点积)。

我现在可以将它们插入线性方程式,以计算预测的y值(最佳拟合线)。

使用matplotlib,我现在可以绘制最佳拟合线。

现在,我已经拟合了预测线,我想通过使用确定系数R平方来计算数据与该线的接近程度。

SSres:我将从计算残差之和开始-y轴上的实际数据点与其沿回归线的相应预测值之间的欧式距离。 我将这些距离平方; 原因是,如果我有一个值位于行(+5)上方五个单位,而另一个值位于行(-5)下方五个单位,则它们将互相抵消,并给人以数据更接近该线的印象确实是。 平方这些距离可确保它们均为正值。

SStot:然后,我想计算y轴上实际数据点之间的距离以及y的均值-再次对结果求平方。

因此R平方的公式是1 – SSres / SStot

我将首先创建用于计算括号中值的变量,然后找到这些值的点积。

然后,我可以打印R平方值。

因此,可以使用X来解释y中91.5%的变化。

我希望您喜欢它,甚至发现它很有用。 我的三位最喜欢的ML老师获得了巨大的荣誉:Jose Portilla,Lazy Programmer和Sentdex。