使用mlxtend绘制训练与测试损失曲线遇ValueError问题求助
修复plot_learning_curves的ValueError问题
问题根源
你的代码有两个核心问题触发了报错:
- 模型是基于多项式转换后的特征训练的,但
plot_learning_curves直接传入原始的x_train/x_test,模型无法识别未转换的特征,引发维度不匹配相关的模糊真值错误。 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
相关产品推荐
相关产品推荐

