【kaggle竞赛】Ames房价预测与回归问题(上)

2021.9.17 自学机器学习的日子,在图书馆摸了本《大数据与机器学习经典案例》 记录一下。

第一章,讲讲房价预测和回归问题。

本文用到的是爱荷华州艾姆斯市房价数据集,由杜鲁门州立大学统计学教授DeCock整理,可移步公众号 当代巴别塔 回复【房价数据集】获取。

1. 导入库

首先,我们将数据集保存于chapter1\dataset中。启动Jupyter Notebook,在chapter1目录下新建一个.ipy程序。
导入库:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
from scipy.stats import norm
%matplotlib inline

2. 读取数据集

现在我们读入训练集,并显示列变量名称。

df_train=pd.read_csv('./dataset/train.csv')
df_train.columns

这其中,列变量SalePrice代表房价,我们执行以下程序段并观察SalePrice的统计特征。
运行代码如下:
可以看到,50%房屋价格集中于16万美元左右,均价为18万美元,房价最小值大于0,标准差在可接受范围内,意味着SalePrice数据可用。
可以看到,50%房屋价格集中于16万美元左右,均价为18万美元,房价最小值大于0,标准差在可接受范围内,意味着SalePrice数据可用。

执行以下程序段,绘制SalePrice直方图,观察到SalePrice呈右偏正态分布,如图。
在这里插入图片描述
接下来计算一下峰度和偏度。
在这里插入图片描述
偏度值1.78进一步印证了SalePrice的右偏分布特征,峰度值5.50则显示SalePrice存在陡峭尖峰。

3. 分析变量与SalePrice间的关系(四个例子)

列变量GrLivArea表示居住面积,执行下列程序段,GrLivArea与SalePrice的关系如图所示。
在这里插入图片描述
可见,列变量GrLivArea与SalePrice密切相关,呈现近似线性关系。

列变量TotalBsmtSF表示地下室面积,执行下列程序段,得出TotalBsmtSF与SalePrice关系
在这里插入图片描述
列变量OverallQual 表示房屋装修质量,分为10个级别,用1~10表示,含义是:10表示特别好,9示非常好,8表示很好,7表示好,6表示高于平均水平,5表示平均水平4表示低于平均水平,3表示合格水平,2表示一般差,1表示非常差。执行程序段, 列变量OrvrllQual与SalePrice 的关系如图。

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个使用 PyTorch 实现 Kaggle 房价预测比赛中的线性回归模型的示例代码: ``` import pandas as pd import torch import torch.nn as nn from sklearn.model_selection import train_test_split # 加载数据集 train_df = pd.read_csv('train.csv') test_df = pd.read_csv('test.csv') # 数据预处理 train_df.fillna(0, inplace=True) test_df.fillna(0, inplace=True) X = train_df.drop(['Id', 'SalePrice'], axis=1).values y = train_df['SalePrice'].values # 划分训练集和验证集 X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42) # 转换为 PyTorch 张量 X_train = torch.tensor(X_train, dtype=torch.float32) X_val = torch.tensor(X_val, dtype=torch.float32) y_train = torch.tensor(y_train.reshape(-1, 1), dtype=torch.float32) y_val = torch.tensor(y_val.reshape(-1, 1), dtype=torch.float32) # 定义模型 class LinearRegression(nn.Module): def __init__(self, input_dim, output_dim): super(LinearRegression, self).__init__() self.linear = nn.Linear(input_dim, output_dim) def forward(self, x): out = self.linear(x) return out model = LinearRegression(X_train.shape[1], 1) # 定义优化器和损失函数 criterion = nn.MSELoss() optimizer = torch.optim.SGD(model.parameters(), lr=0.01) # 训练模型 num_epochs = 1000 for epoch in range(num_epochs): # 前向传播和计算损失 outputs = model(X_train) loss = criterion(outputs, y_train) # 反向传播和优化 optimizer.zero_grad() loss.backward() optimizer.step() # 每 100 次迭代输出一次损失 if (epoch+1) % 100 == 0: print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item())) # 在验证集上测试模型 with torch.no_grad(): predicted = model(X_val) mse = criterion(predicted, y_val) print('Mean Squared Error on Validation Set: {:.4f}'.format(mse.item())) # 在测试集上生成预测结果 X_test = test_df.drop(['Id'], axis=1).values X_test = torch.tensor(X_test, dtype=torch.float32) with torch.no_grad(): predicted = model(X_test) predicted = predicted.numpy().reshape(-1) # 生成提交文件 submission_df = pd.DataFrame({'Id': test_df['Id'], 'SalePrice': predicted}) submission_df.to_csv('submission.csv', index=False) ``` 这个代码使用 PyTorch 的 nn 模块定义了一个简单的线性回归模型,然后使用 SGD 优化器和 MSE 损失函数训练模型,并在验证集上评估模型性能。最后,使用训练好的模型在测试集上生成预测结果,然后将结果保存到 CSV 文件中用于提交比赛。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值