使用Keras训练房价预测模型时准确率始终为0的问题求助
Keras房价预测模型准确率始终为0的问题解决
核心问题:用错了评估指标
房价预测是回归任务——要预测的是连续的房价数值,但你用了accuracy(准确率)这个分类任务的指标。分类任务里准确率是看预测类别和真实类别对不对得上,可回归任务里模型预测的房价是连续值,几乎不可能和真实房价完全相等,所以准确率必然是0,这个指标对回归任务完全没用。
其他影响模型训练的问题及修复
- 特征没做归一化:你的特征数值跨度极大,比如
sqft_lot可能是几千,lat是几十,这种差异会让模型很难学,导致损失值居高不下。必须用标准化或归一化把所有特征缩到相近的范围里。 - 模型没学到东西:从训练日志看损失值根本没下降,除了归一化,还可以调整训练参数(比如batch size、训练轮数)或者微调模型结构。
修改后的可运行代码
import keras import pandas as pd import numpy as np from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from google.colab import files uploaded = files.upload() import io dataset = pd.read_csv(io.BytesIO(uploaded['kc_house_data.csv'])) # 拆分特征和标签 features = dataset.drop(columns=['price', 'id', 'date']) labels = dataset[['price']] # 特征标准化处理 scaler = StandardScaler() features_scaled = scaler.fit_transform(features) # 划分训练集和测试集,方便验证模型效果 X_train, X_test, y_train, y_test = train_test_split(features_scaled, labels, test_size=0.2, random_state=42) # 搭建模型(结构不变,后续可根据效果调整) model = keras.models.Sequential([ keras.layers.Dense(19, 'relu', input_shape=(18,)), keras.layers.Dense(19, 'relu'), keras.layers.Dense(1) ]) # 替换为回归任务适用的评估指标,比如平均绝对误差(MAE) model.compile(optimizer='adam', loss='mean_squared_error', metrics=['mean_absolute_error']) # 训练模型,增加轮数并加入验证集监控 history = model.fit(X_train, y_train, epochs=50, batch_size=32, validation_split=0.1) # 在测试集上评估模型效果 test_loss, test_mae = model.evaluate(X_test, y_test) print(f"测试集平均绝对误差: {test_mae}")
关键修改说明
- 把评估指标换成
mean_absolute_error(平均绝对误差),这个指标能直观反映模型预测房价和真实房价的平均差距,是回归任务的常用评估指标。 - 用
StandardScaler对特征做标准化,让所有特征的数值范围统一,帮助模型更快收敛。 - 划分训练集和测试集,加入验证集,能更好地监控模型是否过拟合或欠拟合。
内容的提问来源于stack exchange,提问作者Osama Mohammed
相关产品推荐
相关产品推荐

