房屋价格预测

  1. import pandas as pd
    import matplotlib.pyplot as plt
    import numpy as np
    
    # 读取数据
    train = pd.read_csv('train(1).csv')
    test = pd.read_csv('test(1).csv')
    print(train.shape)
    print(test.shape)
    # 查看数据类型和描述
    print(train.info())
    print(train.describe())
    # 统计每列Null的占比
    print((train.isnull().sum().sort_values(ascending=False)) / train.shape[0])
    # 删除空值占比高的列
    train.drop(columns=['PoolQC', 'MiscFeature', 'Alley', 'Fence'], axis=1, inplace=True)
    test.drop(columns=['PoolQC', 'MiscFeature', 'Alley', 'Fence'], axis=1, inplace=True)
    # 统计所有列中的数值类型和分类类型的列
    # 不是数值类型的列
    category_columns = [col for col in train.columns if train[col].dtype == 'object']
    # 是数值类型的列
    number_columns = [col for col in train.columns if train[col].dtype != 'object']
    print(category_columns)
    print(number_columns)
    # 特征工程
    train_nan_num = []
    train_nan_cat = []
    # 统计数值类型中哪些列有Null值
    for col in number_columns:
        if (train[col].isnull().sum() > 0):
            train_nan_num.append(col)
    print(train_nan_num)
    # 统计不是数值类型的列哪些有空值
    for col in category_columns:
        if (train[col].isnull().sum() > 0):
            train_nan_cat.append(col)
    print(train_nan_cat)
    # 删除售价的列
    number_columns.remove('SalePrice')
    # 统计测试集中那些列包含NaN
    test_nan_num = []
    test_nan_cat = []
    # 统计数值类型的列哪些有空值
    for col in number_columns:
        if (test[col].isnull().sum() > 0):
            test_nan_num.append(col)
    # 统计不是数值类型的列哪些有空值
    for col in category_columns:
        if (test[col].isnull().sum() > 0):
            test_nan_cat.append(col)
    
    # 删除有空的列的数据,数据减少太多,换个方法
    train_one = train.dropna(axis=0)
    print(train_one.shape)
    # 所有的数据值取中值,非数据值为None
    for col in train_nan_num:
        train[col].fillna(train[col].median(), inplace=True)
    for col in train_nan_cat:
        train[col].fillna('None', inplace=True)
    
    for col in test_nan_num:
        test[col].fillna(test[col].median(), inplace=True)
    for col in test_nan_cat:
        test[col].fillna('None', inplace=True)
    from sklearn.preprocessing import LabelEncoder
    
    LE = LabelEncoder()
    # 对所有非数值的列进行归一化
    for col in category_columns:
        train[col] = LE.fit_transform(train[col])
        test[col] = LE.fit_transform(test[col])
    
    # pd.set_option('max_columns', 100)
    pd.options.display.max_columns = 100
    print(train.head())
    
    # 构造特征的数据集,id和售价列删除,转成二维数组
    X = train.drop(columns=['Id', 'SalePrice'], axis=1).values
    print(X)
    # 目标集
    y = train['SalePrice'].values
    # 转二维数组
    # y = y.reshape(-1, 1)
    print(y)
    # 数据集划分
    from sklearn.model_selection import train_test_split
    
    # 验证集占30%,打乱顺序
    X_train, X_test, y_train, y_test = train_test_split(
        X, y, test_size=0.3, shuffle=True)
    print(X_train.shape)
    # 创建回归模型
    from sklearn.linear_model import LinearRegression
    
    LR = LinearRegression()
    # 训练
    LR.fit(X_train, y_train)
    # 预测
    y_pred = LR.predict(X_test)
    # 查看均方误差
    from sklearn.metrics import mean_squared_error
    
    print('MSE:', mean_squared_error(y_pred, y_test))
    # 查看R2指标
    from sklearn.metrics import r2_score
    
    r2 = r2_score(y_test, y_pred)
    print('R2:', r2)
    
    # 预测
    test.drop(columns=['Id'], axis=1, inplace=True)
    lr_pred = LR.predict(test)
    print(lr_pred)
    test['SalePrice'] = lr_pred
    test.to_csv('test1.csv')
    
    print(range(len(y_test)))
    print(sorted(y_test))
    plt.plot(range(len(y_test)), sorted(y_test), c='blue', label='y_true')
    plt.plot(range(len(y_pred)), sorted(y_pred), c='red', label='y_pred')
    plt.legend()
    plt.show()
    
    实验概述
    1. 实验目标和主要内容

实验目标: 掌握线性回归算法,能够通过线性回归的方法建立线性预测模型。

开发平台:PyCharm Community Edition 2021.3.2 x64

语言:Python

主要内容:

      1. 根据房屋指标及价格数据通过线性回归算法建立预测模型,预测房屋的价格。
  1. 实验设计

2.1关键算法分析

算法1:统计并删除空值占比高的列

代码:

算法2:统计数值类型和非数据类型

代码:

算法3:统计训练集测试集空值

代码:

算法4:删除售价列和空值列

代码:

算法5:补足空值

代码:

算法6:对非数值列进行归一化

代码:

算法7:构造特征的数据集

代码:

算法8:数据集划分

代码:

算法9:建立回归模型

代码:

算法10:检验模型

代码:

算法11:预测作图

代码:

 

  1. 程序运行结果分析

1. 线性回归模型的均方误差MSE和R2指标:

2. 使用线性回归模型,预测test.csv中的数据,求得的部分结果如下:

3. 对训练集的测试数据进行预测,画出图象,与实际值进行比较(其中,y_true为实际值,y_pred为测试值)。

图1训练集测试数据的实际值和测试值

  1. 总结

4.1  实验的难点和关键点

  1. 无用数据和空数据需要进行清洗,清洗后补足空缺;
  2. 对非数值数据要进行归一化处理;
  3. 线性回归算法的误差。
    1.  心得体会
  1. 学会了运用线性回归算法建立预测模型;
  2. 了解了线性回归模型的要点,数据预处理(清洗,归一化),模型误差等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值