kaggle房价预测模型总结

该博客总结了kaggle房价预测任务,包括数据分析、数据正太性检查、预处理和建模。通过分析数据特征与目标值,发现数据大致符合正太分布,但存在偏度。进行了数据转换以适应正态分布,并处理了缺失值。在模型构建中,使用了ElasticNet、Lasso等方法,最终构建了一个平均模型,取得了较好的预测效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

房价预测任务

目标:根据房屋属性预测每个房子的最终价格。

在这里插入图片描述

(一):分析数据指标
  1. 先查看数据的特征值与目标值:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from scipy.stats import norm
from sklearn.preprocessing import StandardScaler
from scipy import stats
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline
df_train = pd.read_csv('./data/train.csv')
df_train.columns

Index([‘Id’, ‘MSSubClass’, ‘MSZoning’, ‘LotFrontage’, ‘LotArea’, ‘Street’,
‘Alley’, ‘LotShape’, ‘LandContour’, ‘Utilities’, ‘LotConfig’,
‘LandSlope’, ‘Neighborhood’, ‘Condition1’, ‘Condition2’, ‘BldgType’,
‘HouseStyle’, ‘OverallQual’, ‘OverallCond’, ‘YearBuilt’, ‘YearRemodAdd’,
‘RoofStyle’, ‘RoofMatl’, ‘Exterior1st’, ‘Exterior2nd’, ‘MasVnrType’,
‘MasVnrArea’, ‘ExterQual’, ‘ExterCond’, ‘Foundation’, ‘BsmtQual’,
‘BsmtCond’, ‘BsmtExposure’, ‘BsmtFinType1’, ‘BsmtFinSF1’,
‘BsmtFinType2’, ‘BsmtFinSF2’, ‘BsmtUnfSF’, ‘TotalBsmtSF’, ‘Heating’,
‘HeatingQC’, ‘CentralAir’, ‘Electrical’, ‘1stFlrSF’, ‘2ndFlrSF’,
‘LowQualFinSF’, ‘GrLivArea’, ‘BsmtFullBath’, ‘BsmtHalfBath’, ‘FullBath’,
‘HalfBath’, ‘BedroomAbvGr’, ‘KitchenAbvGr’, ‘KitchenQual’,
‘TotRmsAbvGrd’, ‘Functional’, ‘Fireplaces’, ‘FireplaceQu’, ‘GarageType’,
‘GarageYrBlt’, ‘GarageFinish’, ‘GarageCars’, ‘GarageArea’, ‘GarageQual’,
‘GarageCond’, ‘PavedDrive’, ‘WoodDeckSF’, ‘OpenPorchSF’,
‘EnclosedPorch’, ‘3SsnPorch’, ‘ScreenPorch’, ‘PoolArea’, ‘PoolQC’,
‘Fence’, ‘MiscFeature’, ‘MiscVal’, ‘MoSold’, ‘YrSold’, ‘SaleType’,
‘SaleCondition’, ‘SalePrice’],
dtype=‘object’)

特征值:

  • MSSubClass:建筑类
  • mszoning:一般的分区分类
  • LotFrontage:街道连接属性线性英尺
  • LotArea:平方英尺批量
  • Street:道路通行方式
  • Alley:通道入口的类型
  • LotShape:房屋的一般形状
  • LandContour:房屋的平整度
  • Utilities:基础设施配套(电、水、煤气)
  • LotConfig:批次配置
  • LandSlope:物业的坡度
  • Neighborhood:Ames市区范围内的物理位置
  • Condition1:邻近主要道路或铁路
  • Condition2:靠近主要道路或铁路(如果第二存在)
  • BldgType:住宅类型
  • housestyle:住宅风格
  • overallqual:评估房屋的整体材料和装饰
  • overallcond:评估房屋的整体状况
  • yearbuilt:原施工日期
  • yearremodadd:重塑日期
  • RoofStyle:屋顶类型
  • RoofMatl:屋顶材料
  • exterior1st:房屋外墙
  • exterior2nd:房屋外墙(如果有多种材料)
  • MasVnrType:砌体饰面类型
  • masvnrarea:砌体饰面面积平方英尺
  • exterqual:外部材料质量
  • extercond:评估外部材料的当前状态
  • Foundation:基础类型
  • BsmtQual:评估地下室的高度
  • bsmtcond:评估地下室的一般状况
  • BsmtExposure:花园层地下室墙
  • bsmtfintype1:质量基底成品区
  • bsmtfinsf1:型完成1平方英尺
  • bsmtfintype2:质量第二成品区(如果有的话)
  • bsmtfinsf2:型完成2平方英尺
  • BsmtUnfSF:未完成的平方英尺的地下室
  • totalbsmtsf:地下室面积总平方英尺
  • 加热:加热类型
  • heatingqc:加热质量和条件
  • 中央:中央空调
  • 电气:电气系统
  • 1stflrsf:一楼平方英尺
  • 2ndflrsf:二楼平方英尺
  • lowqualfinsf:完成平方英尺Low质量(各楼层)
  • grlivarea:以上等级(地)居住面积平方英尺
  • BsmtFullBath: Basement full bathrooms
  • BsmtHalfBath:地下室半浴室
  • FullBath:完整的浴室级以上
  • HalfBath:半浴室级以上
  • 卧室:高于地下室的卧室数
  • 厨房:厨房数量
  • kitchenqual:厨房的品质
  • totrmsabvgrd:房间总级以上(不包括卫生间)
  • 功能:家庭功能评级
  • 一些壁炉壁炉:
  • fireplacequ:壁炉质量
  • GarageType:车库位置
  • GarageYrBlt:建立年车库
  • GarageFinish:车库的室内装修
  • GarageCars:在汽车车库大小的能力
  • GarageArea:在平方英尺的车库规模
  • GarageQual:车库质量
  • garagecond:车库条件
  • paveddrive:铺的车道
  • WoodDeckSF:平方英尺的木甲板面积
  • openporchsf:平方英尺打开阳台的面积
  • enclosedporch:封闭式阳台的面积以平方英尺
  • 3ssnporch:平方英尺三季阳台的面积
  • screenporch:平方英尺纱窗门廊区
  • PoolArea:在平方英尺的游泳池
  • poolqc:池质量
  • 栅栏:栅栏的质量
  • miscfeature:杂项功能在其他类未包括
  • miscval:$杂特征值
  • MoSold:月销售
  • YrSold:年销售
  • SaleType:销售类型
  • salecondition:销售条件

目标值:

  • saleprice:销售价格
df_train['SalePrice'].describe()

count 1460.000000
mean 180921.195890
std 79442.502883
min 34900.000000
25% 129975.000000
50% 163000.000000
75% 214000.000000
max 755000.000000
Name: SalePrice, dtype: float64

首先来看一下,目标值是否满足正态分布

sns.distplot(df_train['SalePrice']);

在这里插入图片描述
计算偏度与峰度:

#skewness and kurtosis
print("Skewness: %f" % df_train['SalePrice'].skew())
print("Kurtosis: %f" % df_train['SalePrice'].kurt())

Skewness: 1.882876
Kurtosis: 6.536282

分析:数据符合正太分布特点,但偏度比较大,需要做正太分布变化处理。

#居住面积平方英尺
var = 'GrLivArea'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
data.plot.scatter(x=var, y='SalePrice', ylim=(0,800000));

在这里插入图片描述
越大的面积,房价肯定也越贵,但是这里出现了一些离群点。

#地下室面积平方英尺
var = 'TotalBsmtSF'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
data.plot.scatter(x=var, y='SalePrice', ylim=(0,800000));

在这里插入图片描述

#整体材料和饰面质量
var = 'OverallQual'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
f, ax = plt.subplots(figsize=(8, 6))
fig = sns.boxplot(x=var, y="SalePrice", data=data)
fig.axis(ymin=0, ymax=800000);

在这里插入图片描述

#原施工日期
var = 'YearBuilt'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
f, ax = plt.subplots(figsize=(16, 8))
fig = sns.boxplot(x=var, y="SalePrice", data=data)
fig.axis(ymin=0, ymax=800000);
plt.xticks(rotation=90);

在这里插入图片描述
分析:除了建造年代越近,价格越贵的因素外,历史因素也是影响价格的一个重要原因。

var = 'Neighborhood'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
f, ax = plt.subplots(figsize=(8, 6))
fig = sns.boxplot(x=var, y="SalePrice", data=data)
#fig.axis(ymin=0, ymax=800000);
plt.xticks(rotation=90);

在这里插入图片描述

选出与价格因素最相近的10个特征,观察它们的相关性。

k = 10 
corrmat = df_train.corr()
cols = corrmat.nlargest(k, 'SalePrice')['SalePrice'].index
cm = np.corrcoef(df_t
### Kaggle房价预测模型概述 Kaggle房价预测是一个经典的机器学习竞赛项目,目标是基于给定的数据集预测房屋价格。该任务通常涉及数据预处理、特征工程以及多种回归算法的应用。 #### 数据集描述 数据集中包含以下几个主要文件[^2]: - **`train.csv`**: 训练数据,包含了已知的房屋特征及其对应的价格标签。 - **`test.csv`**: 测试数据,仅包含房屋特征,用于验证模型性能。 - **`data_description.txt`**: 对各特征的具体含义进行了详细说明。 - **`sample_submission.csv`**: 提交预测结果的标准模板。 #### 示例代码实现 以下是基于Python的一个简单示例代码框架,展示了如何加载数据并构建一个基本的线性回归模型: ```python import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error # 加载数据 train_data = pd.read_csv('train.csv') test_data = pd.read_csv('test.csv') # 特征选择与数据分割 X_train = train_data.drop(['SalePrice'], axis=1).select_dtypes(include=['float64', 'int64']) y_train = train_data['SalePrice'] # 划分训练集和验证集 X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=42) # 初始化模型 model = LinearRegression() # 拟合模型 model.fit(X_train, y_train) # 预测 predictions = model.predict(X_val) # 评估模型 rmse = mean_squared_error(y_val, predictions, squared=False) print(f'Validation RMSE: {rmse}') ``` 上述代码实现了从数据读取到模型训练及评估的过程。需要注意的是,在实际应用中可能还需要进一步进行特征工程操作,比如缺失值填充、类别变量编码等。 #### 使用堆叠模型改进效果 为了提升预测精度,可以尝试集成方法中的堆叠技术。下面是一段关于堆叠模型的代码片段[^1]: ```python models = [] models_name = [] stack_model = StackingRegressor(estimators=[...]) # 定义基础模型列表 models.append(stack_model) models_name.append('Stacking_model') for i, model in enumerate(models): y_preds = model.predict(np.array(train)) model_score = rmse(y, y_preds) print('RMSE of {}: {}'.format(models_name[i], model_score)) ``` 这段代码通过组合多个基模型来提高整体表现力,并计算每种模型的均方根误差(RMSE),从而比较不同方案的效果。 #### 卷积神经网络(CNN)在房价预测中的潜在用途 尽管CNN主要用于图像分类等领域,但在某些特定场景下也可以应用于结构化数据分析。例如,当存在大量地理空间信息或者图片形式输入时,可考虑引入CNN提取深层次模式[^3]。不过对于传统表格型数据而言,更常用的方法仍是树状模型或线性回归变体。 --- ###
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值