You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取MLPRegressor训练与验证损失并绘制曲线?损失单位是什么?

解决MLPRegressor训练与验证损失曲线绘制问题

1. 提取训练损失

sklearn的MLPRegressor在训练完成后,自带loss_curve_属性,可直接获取每个训练epoch的训练损失值:

# 训练完成后提取训练损失
train_loss = mlp.loss_curve_

该数组中的每个元素对应一个epoch的训练损失(默认采用均方误差MSE)。

2. 获取每个epoch的验证损失

默认fit()方法不会自动记录验证损失,需手动实现逐epoch训练并计算验证损失:

import numpy as np
from sklearn.metrics import mean_squared_error

# 初始化存储损失的列表
train_loss_history = []
val_loss_history = []

# 逐epoch训练并记录损失
for epoch in range(mlp.max_iter):
    # 训练单个epoch
    mlp.partial_fit(x_train, y_train)
    # 计算当前epoch的训练损失
    train_pred = mlp.predict(x_train)
    train_loss = mean_squared_error(y_train, train_pred)
    train_loss_history.append(train_loss)
    # 计算当前epoch的验证损失
    val_pred = mlp.predict(x_test)
    val_loss = mean_squared_error(y_test, val_pred)
    val_loss_history.append(val_loss)
    # 匹配fit()的收敛逻辑,提前终止训练
    if epoch > 0 and abs(train_loss_history[-1] - train_loss_history[-2]) < mlp.tol:
        break

这里复用了你初始定义的mlp模型参数,通过partial_fit()逐epoch训练,同时加入收敛阈值判断,和原生fit()的训练逻辑保持一致。

3. 绘制损失曲线

使用matplotlib绘制训练与验证损失的对比曲线:

import matplotlib.pyplot as plt

plt.figure(figsize=(10,6))
plt.plot(train_loss_history, label='训练损失')
plt.plot(val_loss_history, label='验证损失')
plt.xlabel('Epoch')
plt.ylabel('损失值')
plt.title('训练与验证损失曲线')
plt.legend()
plt.show()

4. 损失的单位说明

MLPRegressor默认使用的损失函数是均方误差(MSE),计算公式为:
$$MSE = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2$$
它的单位是目标变量y的单位的平方。例如若你的y代表“温度(摄氏度)”,则损失单位为“摄氏度²”。


内容的提问来源于stack exchange,提问作者Dila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 10:20:31