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

使用MinMaxScaler训练模型后,如何预测真实房价?

问题:房价预测模型缩放后预测结果不符合实际范围

我正在House Pricing数据集上建模,目标是获取MSE结果并基于输入变量预测房价。使用MinMaxScaler()对数据做缩放处理,搭配LinearRegression()训练模型,已经得到MSE、MAE、RMSE等评估指标,但预测真实房价时,结果是缩放后的值,输入真实特征值得到的预测结果也不符合实际房价范围(实际应为208500、181500这类数万美金级别)。以下是我的代码及运行结果:

import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder, MinMaxScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, mean_absolute_error
from sklearn.model_selection import train_test_split  # 原代码遗漏该导入

train = pd.read_csv('train.csv')

column = ['SalePrice', 'OverallQual', 'GrLivArea', 'GarageCars', 'TotalBsmtSF', 'FullBath', 'YearBuilt']

train = train[column]

# Convert Feature/Column with Scaler
scaler = MinMaxScaler()
train[column] = scaler.fit_transform(train[column])

X = train.drop('SalePrice', axis=1)
y = train['SalePrice']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=15)

# Calling LinearRegression
model = LinearRegression()

# Fit linearregression into training data
model = model.fit(X_train, y_train)

y_pred = model.predict(X_test)

# Calculate MSE (Lower better)
mse = mean_squared_error(y_test, y_pred)
print("MSE of testing set:", mse)

# Calculate MAE
mae = mean_absolute_error(y_test, y_pred)
print("MAE of testing set:", mae)

# Calculate RMSE (Lower better)
rmse = np.sqrt(mse)
print("RMSE of testing set:", rmse)

# Predict the Price House by input:
overal_qual = 6
grlivarea = 1217
garage_cars = 1
totalbsmtsf = 626
fullbath = 1
year_built = 1980

predicted_price = model.predict([[overal_qual, grlivarea, garage_cars, totalbsmtsf, fullbath, year_built]])
print("Predicted price:", predicted_price)

运行结果:

MSE of testing set: 0.0022340806066149734
MAE of testing set: 0.0334447655149599
RMSE of testing set: 0.04726606189027147

Predicted price: [811.51843959]

解决方法

你遗漏了两个核心步骤:

  1. 输入特征未匹配训练时的缩放规则
    模型训练用的是缩放后的特征数据,但预测时直接输入了原始范围的特征值,导致模型输出异常。必须用训练时拟合好的scaler对输入特征做**仅转换(transform)**处理,不能重新fit(否则会覆盖训练时的缩放分布)。

  2. 预测结果未逆缩放还原为真实房价
    模型输出的是经过缩放的房价值,需要用scaler.inverse_transform()将结果还原到原始房价的数值范围。

优化后的关键代码片段

第一步:规范拆分特征与标签的缩放逻辑(避免混淆)

建议分别对特征和标签使用独立的缩放器,后续逆变换更清晰:

# 拆分特征与标签
X = train.drop('SalePrice', axis=1)
y = train['SalePrice'].values.reshape(-1, 1)

# 初始化特征和标签的缩放器
scaler_X = MinMaxScaler()
scaler_y = MinMaxScaler()

# 拟合并转换特征与标签
X_scaled = scaler_X.fit_transform(X)
y_scaled = scaler_y.fit_transform(y)

# 划分训练测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y_scaled, test_size=0.2, random_state=15)

第二步:预测时的特征缩放与结果逆缩放

# 准备输入特征,转为二维数组(符合scaler输入要求)
input_features = np.array([[overal_qual, grlivarea, garage_cars, totalbsmtsf, fullbath, year_built]])
# 对输入特征应用训练时的缩放规则
input_scaled = scaler_X.transform(input_features)
# 预测缩放后的房价
pred_scaled = model.predict(input_scaled)
# 逆缩放还原为真实房价
predicted_price = scaler_y.inverse_transform(pred_scaled)
print("Predicted price:", predicted_price[0][0])

额外修正

原代码遗漏train_test_split的导入,需要添加:

from sklearn.model_selection import train_test_split

内容的提问来源于stack exchange,提问作者MADFROST

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:40:49