多项式回归绘图异常,尝试解决方案后仍存问题求助
解决多项式回归曲线绘制异常及维度不匹配问题
你的问题出在两个核心点:
- 原始绘图未对x排序,曲线按原始数据顺序连接导致混乱
- 尝试排序时错误处理数组维度,引发维度不匹配报错
核心修正思路
- 禁止对多项式特征数组
xp排序:xp是原始x生成的多项式特征,排序会破坏x与特征的对应关系,导致预测值和原始x错位。 - 基于原始x排序x和预测值:必须对原始x排序,同时用相同索引对
y_pred排序,确保x与对应预测值一一对应。 - 统一数组维度:将二维数组转为一维,避免
np.argsort返回二维索引引发的维度异常。
修正后的完整代码
import numpy as np import matplotlib.pyplot as plt from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression # 假设data是已加载的数据集 x = data['LSTAT'].values.reshape(-1,1).copy() y = data['MEDV'].values.reshape(-1,1).copy() plt.figure(figsize=(8,5)) polynomial_features = PolynomialFeatures(degree=2) xp = polynomial_features.fit_transform(x) model = LinearRegression().fit(xp, y) y_pred = model.predict(xp) # 绘制原始数据散点图 plt.scatter(x, y) # 处理排序与维度问题 x_flat = x.flatten() sort_indices = np.argsort(x_flat) # 对x和预测值按相同索引排序 x_sorted = x_flat[sort_indices] y_pred_sorted = y_pred.flatten()[sort_indices] # 绘制平滑的多项式回归曲线 plt.plot(x_sorted, y_pred_sorted, color='r') plt.xlabel('LSTAT') plt.ylabel('MEDV') plt.show()
关键改动说明
x.flatten()和y_pred.flatten():将二维数组转为一维,避免np.argsort返回二维索引,解决(506, 1)与(506, 1, 1)的维度不匹配问题。np.argsort(x_flat):获取原始x从小到大的排序索引,确保排序后的x与y_pred严格对应。- 保留
xp原始顺序:维持原始x与多项式特征的对应关系,保证预测值的准确性。
内容的提问来源于stack exchange,提问作者guin0x
相关产品推荐
相关产品推荐

