输入一个二维数组对应直角坐标的坐标值固定斜率拟合一条直线
这里提供一种基于最小二乘法的拟合方法:
- 对于二维数组中的每个点,计算其横坐标和纵坐标的平均值,分别记为x_mean和y_mean。
- 对于每个点,计算其相对于平均值的偏差,即delta_x = x - x_mean,delta_y = y - y_mean。
- 计算斜率k = sum(delta_x * delta_y) / sum(delta_x^2)。
- 计算截距b = y_mean - k * x_mean。
- 输出拟合的直线方程为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 著作权归作者所有。请勿转载和采集!