多项式回归代码疑问:如何输出预测值与实际值?是否需逆变换?
多项式回归中预测值与实际值输出问题解答
问题描述
我正在理解这段多项式回归代码:
import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures # Load the dataset dataset = pd.read_csv('winequality-red.csv') # Extracting features and target variable X = dataset.iloc[:, :-1].values y = dataset.iloc[:, -1].values # Splitting the dataset into the Training set and Test set X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25) # Creating polynomial features poly_reg = PolynomialFeatures(degree=5) X_poly_train = poly_reg.fit_transform(X_train) X_poly_test = poly_reg.transform(X_test) # Fitting Linear Regression to the dataset regressor = LinearRegression() regressor.fit(X_poly_train, y_train) # Predicting the Test set results y_pred = regressor.predict(X_poly_test) # Printing the predicted values and actual values print(np.concatenate((y_pred.reshape(len(y_pred),1), y_test.reshape(len(y_test),1)),1))
我想要输出因变量的预测值与y的实际值,我知道似乎需要应用类似逆变换的方法,但找不到对应的方法。
解决方案
首先明确:你完全不需要对预测值y_pred做逆变换!
核心原因
PolynomialFeatures仅对特征变量X做多项式扩展(生成x₁²、x₁x₂这类组合特征),目标变量y从始至终没有被任何转换处理过。模型训练时用转换后的X拟合原始y,预测出的y_pred直接对应原始y的尺度,所以不存在逆变换的需求。
修正代码(解决报错+提升可读性)
你的代码里存在一个小问题:未导入numpy导致np.concatenate报错,同时直接打印数组可读性差。以下是优化后的完整代码:
import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures # 加载数据集 dataset = pd.read_csv('winequality-red.csv') # 提取特征与目标变量 X = dataset.iloc[:, :-1].values y = dataset.iloc[:, -1].values # 划分训练集与测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25) # 生成多项式特征 poly_reg = PolynomialFeatures(degree=5) X_poly_train = poly_reg.fit_transform(X_train) X_poly_test = poly_reg.transform(X_test) # 训练线性回归模型 regressor = LinearRegression() regressor.fit(X_poly_train, y_train) # 预测测试集结果 y_pred = regressor.predict(X_poly_test) # 生成对比表格,提升可读性 compare_df = pd.DataFrame({ '实际酒质': y_test, '预测酒质': y_pred.round(2) # 保留两位小数更直观 }) print(compare_df)
常见误区澄清
如果你误以为需要逆变换,大概率是混淆了**特征缩放(如StandardScaler)**的逆操作——但在这段代码中,既没有对y做缩放,也没有对y做任何其他转换,所以完全不需要逆变换步骤。
内容的提问来源于stack exchange,提问作者uditjain
相关产品推荐
相关产品推荐

