实验四房屋价格预测(源代码)

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# 读取数据
train = pd.read_csv('train.csv')
test = pd.read_csv('test.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)
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()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值