Python 线性回归(不调用库)
线性回归是一种基本的统计学方法,用于建立自变量与因变量之间的线性关系模型。在这篇文章中,我们将从零开始用 Python 实现一个简单的线性回归。
什么是线性回归
线性回归试图通过一条直线来描述数据之间的关系,该直线可以用公式表示为:
$$ y = wx + b $$
其中:
- ( y ) 是因变量。
- ( x ) 是自变量。
- ( w ) 是斜率(slope)。
- ( b ) 是截距(intercept)。
我们的目标是通过已知的数据点(x, y)来确定参数 ( w ) 和 ( b )。
如何计算参数
为了计算 ( w ) 和 ( b ),我们可以使用最小二乘法。以下是最小二乘法的公式:
-
计算 ( w ): [ w = \frac{n(\sum xy) - (\sum x)(\sum y)}{n(\sum x^2) - (\sum x)^2} ]
-
计算 ( b ): [ b = \frac{\sum y - w(\sum x)}{n} ]
实现步骤
我们将通过以下步骤来实现线性回归:
- 收集数据。
- 计算所需的总和和数量。
- 计算斜率 ( w ) 和截距 ( b )。
- 做出预测。
以下是整个过程的流程图:
flowchart TD
A[收集数据] --> B[计算总和和数量]
B --> C[计算权重 w]
C --> D[计算截距 b]
D --> E[做出预测]
代码示例
# 创建数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
# 计算所需的总和
n = len(x)
sum_x = sum(x)
sum_y = sum(y)
sum_xy = sum(x[i] * y[i] for i in range(n))
sum_x2 = sum(x[i] ** 2 for i in range(n))
# 计算权重 w
w = (n * sum_xy - sum_x * sum_y) / (n * sum_x2 - sum_x ** 2)
# 计算截距 b
b = (sum_y - w * sum_x) / n
# 预测函数
def predict(x):
return w * x + b
# 测试预测
test_x = 6
predicted_y = predict(test_x)
print(f"预测值为: {predicted_y}")
代码解释
- 收集数据:我们用
x
和y
列表保存自变量和因变量。 - 计算总和:用内置的
sum()
函数计算所需的总和。 - 计算权重 ( w ):根据公式计算。
- 计算截距 ( b ):同样,根据公式计算。
- 预测函数:定义一个函数
predict()
,接收自变量,返回预测的因变量值。
运行结果
运行以上代码后,得到的结果是预测值。这一结果展示了通过线性回归模型所做的预测。
结论
在不调用任何库的情况下,我们成功地实现了一种基本的线性回归模型。通过简单的数学计算,我们可以了解到数据间的关系,并进行预测。尽管这些实现相对基础,但它们为理解更复杂的机器学习模型奠定了良好的基础。
掌握线性回归的基本原理和实现方法,可以为后续研究和应用更复杂的回归模型打下基础。希望这篇文章能帮助您理解线性回归及其在现实世界中的应用!