Kaggle——House Prices(房屋价格预测)简单实现

发布于:2025-05-08 ⋅ 阅读:(16) ⋅ 点赞:(0)

题目‌:

  1. Kaggle的“House Prices - Advanced Regression Techniques”数据集
  2. 使用Pandas读取数据,并查看数据的基本信息。
  3. 选择一些你认为对房屋价格有重要影响的特征,并进行数据预处理(如缺失值处理、异常值处理等)。
  4. 使用matplotlib绘制特征与目标变量(房屋价格)之间的散点图或箱线图,观察它们之间的关系。
  5. 将数据分为训练集和测试集。
  6. 使用numpy或scikit-learn搭建一个线性回归模型,并在训练集上进行训练。
  7. 在测试集上评估模型的性能,并计算均方误差(MSE)或均方根误差(RMSE)。
  8. 尝试使用不同的特征组合或进行特征选择,观察模型性能的变化。
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error

# 设置中文显示
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False


def load_data(file_path):
    """加载数据并查看基本信息"""
    df = pd.read_csv(file_path, encoding="utf-8")
    print("数据基本信息:",df.columns)
    return df


def preprocess_data(df, features, target):
    """数据预处理:去除重复特征、处理缺失值和异常值"""
    features = list(set(features))  # 去除重复特征
    X = df[features]
    Y = df[target]
    # 合并特征和目标变量
    combined = pd.concat([X, Y], axis=1)
    # 删除包含缺失值的行
    combined = combined.dropna()

    # 异常值处理(使用 IQR 方法)
    def remove_outliers(df):
        Q1 = df.quantile(0.25)
        Q3 = df.quantile(0.75)
        IQR = Q3 - Q1
        df = df[~((df < (Q1 - 1.5 * IQR)) | (df > (Q3 + 1.5 * IQR))).any(axis=1)]
        return df

    combined = remove_outliers(combined)
    # 重新分离特征和目标变量
    X = combined[features]
    Y = combined[target]
    return X, Y


def plot_features(X, Y):
    """绘制特征与目标变量的散点图"""
    for feature in X.columns:
        plt.scatter(X[feature], Y)
        plt.title(f"{feature}-房价")
        plt.xlabel(feature)
        plt.ylabel("房价")
        plt.show()


def train_model(X, Y):
    """划分训练集和测试集,训练模型并评估性能"""
    x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=22)
    # 数据标准化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)
    # 训练模型
    estimator = Ridge(alpha=1)
    estimator.fit(x_train, y_train)
    # 预测
    y_predict = estimator.predict(x_test)
    # 评估模型
    ret = estimator.score(x_test, y_test)
    mse = mean_squared_error(y_test, y_predict)
    rmse = np.sqrt(mse)
    print("预测值:", y_predict)
    print("准确率:", ret)
    print("均方误差(MSE):", mse)
    print("均方根误差(RMSE):", rmse)
    return estimator


if __name__ == "__main__":
    file_path = "./data/train.csv"
    df = load_data(file_path)
    x = ['GrLivArea', 'OverallQual', 'TotalBsmtSF', 'GarageCars']
    y = ['SalePrice']
    X, Y = preprocess_data(df, x, y)
    plot_features(X, Y)
    model = train_model(X, Y)

 结果展示:

 

 

 

 

准确率: 0.8232886900015453
均方误差(MSE): 591601359.6413734
均方根误差(RMSE): 24322.856732739543


网站公告

今日签到

点亮在社区的每一天
去签到