正规方程求解:w = ( XT * X )(-1) * XT * Y(直接求解权重,包含偏置特征)

示例中X第一列是偏置特征(全为1),因此权重列表直接作为结果返回

按要求:第一个元素是权重列表,第二个是偏置(但此处权重已包含偏置特征的系数)

结合示例输出格式,直接返回权重列表(因示例将偏置特征的系数视为偏置)

import numpy as np

def linear_regression_normal_equation(X: list[list[float]], Y: list[float]) -> list[float]:
    X_np = np.array(X)
    Y_np = np.array(Y) 
    X_T = X_np.T # 转置X矩阵
    X_T_X = np.dot(X_T, X_np) # 转置X矩阵*原X矩阵
    X_T_Y = np.dot(X_T, Y_np) # 原X矩阵*原Y矩阵
    weights = np.dot(np.linalg.inv(X_T_X), X_T_Y).flatten()  # 权重向量(含偏置特征的系数)
	# np.linalg.inv()求矩阵的逆矩阵
	# flatten()用于降维处理数据
    return [round(w, 4) for w in weights]

if __name__ == "__main__":
    import ast
    x = np.array(ast.literal_eval(input()))
    y = np.array(ast.literal_eval(input())).reshape(-1, 1)
    print(linear_regression_normal_equation(x, y))