SVR模型预测时报Expected 2D array错误及结果异常问题咨询
问题根因与解决方案
1. 解决transform方法调用报错的问题
- 根因:sklearn 中所有转换器的
transform方法默认要求输入二维数组,你直接传入标量6.5不符合参数格式要求 - 修复方案:将待预测的6.5封装为「单个样本、单个特征」的二维数组,修改预测代码如下:
# 封装为二维数组格式 scaled_level = sc_X.transform(np.array([[6.5]])) y_pred_scaled = regressor.predict(scaled_level)
2. 解决预测结果不符合预期的问题
你得到的预测结果无实际意义,是代码存在两处逻辑错误导致的:
- 错误1:对标签y做特征缩放时,错误使用了特征X的缩放器
sc_X,应该使用专门为y初始化的sc_y,且一维的y需要先转成二维数组才能适配缩放器的输入要求 - 错误2:模型预测输出的是缩放后的数值,需要调用
sc_y.inverse_transform做逆缩放,才能得到真实的薪资数值 - 修复步骤:
- 替换特征缩放部分的错误代码:
# 原错误代码:y = sc_X.fit_transform(y) # 替换为以下两行 y = y.reshape(-1, 1) # 将一维y转为二维数组 y = sc_y.fit_transform(y) # 用y专属的缩放器做特征缩放- 补充预测结果的逆缩放逻辑:
scaled_level = sc_X.transform(np.array([[6.5]])) y_pred_scaled = regressor.predict(scaled_level) # 逆缩放得到真实薪资值 y_pred = sc_y.inverse_transform(y_pred_scaled.reshape(-1, 1))
修改后你得到的y_pred就是6.5职级对应的真实预测薪资,和线性回归等方法的预期结果范围会保持一致。
内容的提问来源于stack exchange,提问作者William Torrez
相关产品推荐
相关产品推荐

