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

多项式回归代码疑问:如何输出预测值与实际值?是否需逆变换?

多项式回归中预测值与实际值输出问题解答

问题描述

我正在理解这段多项式回归代码:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 21:20:07