对于模型:
y=wx+b最小二乘法给出的闭式解是:
$$w = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{\sum (x_i - \bar{x})^2}$$b=yˉ−wxˉ计算所有 x 和 y 的均值
遍历每个点,累计:
计算权重 w
计算偏置 b
返回 [w,b]
整个方法不需要任何额外库,时间复杂度 O(n)。
class Solution:
def linear_regression(self, points: List[List[float]]) -> List[float]:
n = len(points)
sum_x = sum(p[0] for p in points)
sum_y = sum(p[1] for p in points)
mean_x = sum_x / n
mean_y = sum_y / n
num = 0.0 # Σ (x_i - x̄)(y_i - ȳ)
den = 0.0 # Σ (x_i - x̄)^2
for x, y in points:
dx = x - mean_x
dy = y - mean_y
num += dx * dy
den += dx * dx
w = num / den
b = mean_y - w * mean_x
return [w, b]
实现一元线性回归,使用最小二乘法求解 y=wx+b。
给定训练样本点集合 points,其中每个元素为 [x, y],请计算并返回拟合得到的参数 w 和 b。
points:二维列表,每个元素为长度为 2 的浮点数列表 [x, y],表示一个训练样本点[w, b]:长度为 2 的列表,分别为拟合直线的斜率 w 和截距 b(可按浮点数形式输出)输入:
points = [[1.0, 2.0],[2.0, 4.0],[3.0, 6.0],[4.0, 8.0],[5.0, 10.0]]
输出:
[w, b] = [2.0000, 0.0000]
x 值。