损失函数
损失函数是用来衡量机器学习模型性能的一个函数。它通过计算模型的预测值与真实值之间的误差,用一个实数来表示这种误差。误差越小,说明模型的性能越好,预测越准确。在确定损失函数之后,通过优化算法求解损失函数的极小值,从而确定机器学习模型中的最佳参数,使模型在训练数据上的表现尽可能好。
平方损失
线性回归的损失函数通常用平方损失表示,如下:
- 是样本数量。
- 是第 个样本的实际值。
- 是第 个样本的预测值。
、为模型参数
正规方程可以找到平方损失的最优解时的、
正规方程
则:令导数为0:
则:
即:
import numpy as np
from sklearn.linear_model import LinearRegression# 特征值(面积和房间数)
x = np.array([[1200, 3],[1500, 4],[1700, 3],[2000, 5],[2100, 4],[2300, 5],[2500, 4],[2700, 5]])# 目标值(房屋价格,单位:千美元)
y = np.array([300, 350, 370, 400, 410, 450, 480, 500]).reshape(-1, 1)# 给特征值增加一列1(用于计算截距)
ones_array = np.ones([x.shape[0], 1])
x = np.hstack([ones_array, x])# 使用正规方程公式计算 w 和 b
w = np.linalg.inv(x.T @ x) @ x.T @ y
print('正规方程计算结果:[%.1f %.1f %.1f]' % (w[0][0], w[1][0], w[2][0]))# 使用 LinearRegression 求解
estimator = LinearRegression(fit_intercept=False) # 已经包含截距项,无需再拟合截距
estimator.fit(x, y)# 获取系数并分别格式化
intercept, coef_area, coef_rooms = estimator.coef_[0]
print(f'LinearRegression 计算结果:[{intercept:.1f} {coef_area:.1f} {coef_rooms:.1f}]')
# 输出结果
# 正规方程计算结果:[截距 面积系数 房间数系数]
# LinearRegression 计算结果: [截距 面积系数 房间数系数]正规方程计算结果:[147.0 0.1 -1.8]
LinearRegression 计算结果:[147.0 0.1 -1.8]