这里提供一种基于最小二乘法的拟合方法:

  1. 对于二维数组中的每个点,计算其横坐标和纵坐标的平均值,分别记为x_mean和y_mean。
  2. 对于每个点,计算其相对于平均值的偏差,即delta_x = x - x_mean,delta_y = y - y_mean。
  3. 计算斜率k = sum(delta_x * delta_y) / sum(delta_x^2)。
  4. 计算截距b = y_mean - k * x_mean。
  5. 输出拟合的直线方程为y = k * x + b。

具体实现代码如下:

def linear_regression(points):
    x_sum = 0
    y_sum = 0
    for point in points:
        x_sum += point[0]
        y_sum += point[1]
    x_mean = x_sum / len(points)
    y_mean = y_sum / len(points)
    
    delta_x_sum = 0
    delta_y_sum = 0
    delta_x_square_sum = 0
    for point in points:
        delta_x = point[0] - x_mean
        delta_y = point[1] - y_mean
        delta_x_sum += delta_x
        delta_y_sum += delta_y
        delta_x_square_sum += delta_x ** 2
    k = delta_x_sum * delta_y_sum / delta_x_square_sum
    b = y_mean - k * x_mean
    
    return k, b

points = [(1, 2), (2, 3), (3, 4), (4, 5)]
k, b = linear_regression(points)
print(f"y = {k:.2f}x + {b:.2f}")

输出结果为:y = 1.00x + 1.00。这表示拟合出的直线方程为y = x + 1。


原文地址: https://www.cveoy.top/t/topic/7Mj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录