Python 线性回归(不调用库)

线性回归是一种基本的统计学方法,用于建立自变量与因变量之间的线性关系模型。在这篇文章中,我们将从零开始用 Python 实现一个简单的线性回归。

什么是线性回归

线性回归试图通过一条直线来描述数据之间的关系,该直线可以用公式表示为:

$$ y = wx + b $$

其中:

  • ( y ) 是因变量。
  • ( x ) 是自变量。
  • ( w ) 是斜率(slope)。
  • ( b ) 是截距(intercept)。

我们的目标是通过已知的数据点(x, y)来确定参数 ( w ) 和 ( b )。

如何计算参数

为了计算 ( w ) 和 ( b ),我们可以使用最小二乘法。以下是最小二乘法的公式:

  1. 计算 ( w ): [ w = \frac{n(\sum xy) - (\sum x)(\sum y)}{n(\sum x^2) - (\sum x)^2} ]

  2. 计算 ( b ): [ b = \frac{\sum y - w(\sum x)}{n} ]

实现步骤

我们将通过以下步骤来实现线性回归:

  1. 收集数据。
  2. 计算所需的总和和数量。
  3. 计算斜率 ( w ) 和截距 ( b )。
  4. 做出预测。

以下是整个过程的流程图:

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}")

代码解释

  1. 收集数据:我们用 xy 列表保存自变量和因变量。
  2. 计算总和:用内置的 sum() 函数计算所需的总和。
  3. 计算权重 ( w ):根据公式计算。
  4. 计算截距 ( b ):同样,根据公式计算。
  5. 预测函数:定义一个函数 predict(),接收自变量,返回预测的因变量值。

运行结果

运行以上代码后,得到的结果是预测值。这一结果展示了通过线性回归模型所做的预测。

结论

在不调用任何库的情况下,我们成功地实现了一种基本的线性回归模型。通过简单的数学计算,我们可以了解到数据间的关系,并进行预测。尽管这些实现相对基础,但它们为理解更复杂的机器学习模型奠定了良好的基础。

掌握线性回归的基本原理和实现方法,可以为后续研究和应用更复杂的回归模型打下基础。希望这篇文章能帮助您理解线性回归及其在现实世界中的应用!