三项评分线性定价

题意

已知 部手机,每部手机有三项评分 和对应的价格 。价格与评分之间满足线性关系:

$$

根据这 组已知数据拟合出四个系数 ,然后对 部新手机预测价格,四舍五入到整数后输出。

思路

这是一道经典的多元线性回归问题,使用最小二乘法求解。

构造设计矩阵 (每行为 )和价格向量 ,参数向量 正规方程给出:

$$

实际实现中直接调用 numpy.linalg.lstsq 即可,它内部使用 SVD 分解求解,数值稳定性优于直接求逆。

拟合出 后,对每部待预测手机计算 ,四舍五入输出。

代码

import sys
import numpy as np

def main():
    data = sys.stdin.read().split()
    idx = 0
    K = int(data[idx]); idx += 1
    X = []
    Y = []
    for _ in range(K):
        x1 = int(data[idx]); idx += 1
        x2 = int(data[idx]); idx += 1
        x3 = int(data[idx]); idx += 1
        price = int(data[idx]); idx += 1
        X.append([1, x1, x2, x3])
        Y.append(price)
    X = np.array(X, dtype=np.float64)
    Y = np.array(Y, dtype=np.float64)
    # 正规方程求解: beta = (X^T X)^{-1} X^T Y
    beta = np.linalg.lstsq(X, Y, rcond=None)[0]
    N = int(data[idx]); idx += 1
    results = []
    for _ in range(N):
        x1 = int(data[idx]); idx += 1
        x2 = int(data[idx]); idx += 1
        x3 = int(data[idx]); idx += 1
        pred = beta[0] + beta[1] * x1 + beta[2] * x2 + beta[3] * x3
        results.append(str(round(pred)))
    print(' '.join(results))

main()

复杂度

  • 时间复杂度,其中 为特征维度。构造 ,求解需 ,预测需 。由于 为常数,实际为
  • 空间复杂度,存储设计矩阵和结果。