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

使用mlxtend绘制训练与测试损失曲线遇ValueError问题求助

修复plot_learning_curves的ValueError问题

问题根源

你的代码有两个核心问题触发了报错:

  1. 模型是基于多项式转换后的特征训练的,但plot_learning_curves直接传入原始的x_train/x_test,模型无法识别未转换的特征,引发维度不匹配相关的模糊真值错误。
  2. scoring参数直接传入mean_squared_error函数,容易引发参数传递歧义,不如使用字符串标识符可靠。

修复后的完整代码

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.metrics import mean_squared_error
from mlxtend.plotting import plot_learning_curves
import matplotlib.pyplot as plt

# 划分训练测试集
x_train, x_test, y_train, y_test = train_test_split(X_normalized, y_for_normalized, test_size=0.20, random_state=0)

# 多项式特征转换:用训练集拟合,转换训练/测试集
poly = PolynomialFeatures(1)
X_train_transformed = poly.fit_transform(x_train)
X_test_transformed = poly.transform(x_test)

# 训练模型
lin_reg = LinearRegression()
lin_reg.fit(X_train_transformed, y_train)

# 绘制学习曲线:传入转换后的特征,使用字符串格式的scoring参数
plot_learning_curves(X_train_transformed, y_train, X_test_transformed, y_test, lin_reg, scoring='mean_squared_error')
plt.xlabel('Epoch')
plt.ylabel('Loss (MSE)')
plt.show()

关键修复细节

  • 统一特征转换:必须用同一个PolynomialFeatures实例转换训练和测试集,保证特征维度与模型训练时一致,这是解决报错的核心。
  • scoring参数优化:使用'mean_squared_error'字符串替代直接传入函数,避免函数调用时的参数歧义。
  • 代码整洁性:将所有导入语句放在开头,提升代码可读性。

额外排查点

如果报错仍存在,检查:

  • X_normalized和y_for_normalized是否为格式合法的数组/数据框,无缺失值或异常结构。
  • 确保mlxtend版本为最新,执行pip install --upgrade mlxtend更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:42:54