kaggle房价预测问题
参考:https://blog.csdn.net/m0_37870649/article/details/80979783
sklean的线性模型完成kaggle房价预测问题
https://www.kaggle.com/c/house-prices-Advanced-regression-techniques
赛题给我们79个描述房屋的特征,要求我们据此预测房屋的最终售价,即对于测试集中每个房屋的ID给出对于的SalePrice字段的预测值,主要考察我们数据清洗、特征工程、模型搭建及调优等方面的技巧。本赛题是典型的回归类问题,评估指标选用的是均方根误差(RMSE),为了使得价格的高低对结果的评估有均等的影响,赛题均方根误差基于预测值和实际值分别取对数对数来计算。
特征初步分析:
1. SalePrice 房屋售价,我们要预测的label,类型:数值型,单位:美元
2. 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: 交易条件,类型:类别型
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlibimport matplotlib.pyplot as plt
from scipy.stats import skew
from scipy.stats.stats import pearsonr%config InlineBackend.figure_format = 'retina' #set 'png' here when working on notebook
%matplotlib inline
train = pd.read_csv("train.csv")
test = pd.read_csv("test.csv")
train.head()
Id | MSSubClass | MSZoning | LotFrontage | LotArea | Street | Alley | LotShape | LandContour | Utilities | ... | PoolArea | PoolQC | Fence | MiscFeature | MiscVal | MoSold | YrSold | SaleType | SaleCondition | SalePrice | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 60 | RL | 65.0 | 8450 | Pave | NaN | Reg | Lvl | AllPub | ... | 0 | NaN | NaN | NaN | 0 | 2 | 2008 | WD | Normal | 208500 |
1 | 2 | 20 | RL | 80.0 | 9600 | Pave | NaN | Reg | Lvl | AllPub | ... | 0 | NaN | NaN | NaN | 0 | 5 | 2007 | WD | Normal | 181500 |
2 | 3 | 60 | RL | 68.0 | 11250 | Pave | NaN | IR1 | Lvl | AllPub | ... | 0 | NaN | NaN | NaN | 0 | 9 | 2008 | WD | Normal | 223500 |
3 | 4 | 70 | RL | 60.0 | 9550 | Pave | NaN | IR1 | Lvl | AllPub | ... | 0 | NaN | NaN | NaN | 0 | 2 | 2006 | WD | Abnorml | 140000 |
4 | 5 | 60 | RL | 84.0 | 14260 | Pave | NaN | IR1 | Lvl | AllPub | ... | 0 | NaN | NaN | NaN | 0 | 12 | 2008 | WD | Normal | 250000 |
5 rows × 81 columns
all_data = pd.concat((train.loc[:,'MSSubClass':'SaleCondition'],test.loc[:,'MSSubClass':'SaleCondition']))
数据预处理:
我们不会在这里做任何花哨的事情:
首先,我将通过记录(feature+1)来转换倾斜的数字特性-这将使特性更加正常
为分类特征创建虚拟变量
将数字缺失值(NaN)替换为其各自列的平均值
matplotlib.rcParams['figure.figsize'] = (12.0, 6.0)
prices = pd.DataFrame({"price":train["SalePrice"], "log(price + 1)":np.log1p(train["SalePrice"])})
prices.hist()
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x00000268013A1320>,<matplotlib.axes._subplots.AxesSubplot object at 0x00000268013F20F0>]],dtype=object)
#log transform the target:
train["SalePrice"] = np.log1p(train["SalePrice"])#log transform skewed numeric features:
numeric_feats = all_data.dtypes[all_data.dtypes != "object"].indexskewed_feats = train[numeric_feats].apply(lambda x: skew(x.dropna())) #compute skewness
skewed_feats = skewed_feats[skewed_feats > 0.75]
skewed_feats = skewed_feats.indexall_data[skewed_feats] = np.log1p(all_data[skewed_feats])
all_data = pd.get_dummies(all_data)
#用列的平均值填充na's:
all_data = all_data.fillna(all_data.mean())
#为sklearn创建矩阵:
X_train = all_data[:train.shape[0]]
X_test = all_data[train.shape[0]:]
y = train.SalePrice
模型
现在我们将使用SciKit学习模块中的正则化线性回归模型。我将尝试l_1(套索)和l_2(岭)的正规化。我还将定义一个返回交叉验证RMSE错误的函数,这样我们就可以评估模型并选择最佳的调优参数。
from sklearn.linear_model import Ridge, RidgeCV, ElasticNet, LassoCV, LassoLarsCV
from sklearn.model_selection import cross_val_scoredef rmse_cv(model):rmse= np.sqrt(-cross_val_score(model, X_train, y, scoring="neg_mean_squared_error", cv = 5))return(rmse)
model_ridge = Ridge()
岭模型的主要调整参数是alpha——一个测量模型灵活性的正则化参数。正则化程度越高,模型越不容易过度拟合。但是,它也会失去灵活性,可能无法捕获数据中的所有信号。
alphas = [0.05, 0.1, 0.3, 1, 3, 5, 10, 15, 30, 50, 75]
cv_ridge = [rmse_cv(Ridge(alpha = alpha)).mean() for alpha in alphas]
cv_ridge = pd.Series(cv_ridge, index = alphas)
cv_ridge.plot(title = "Validation - Just Do It")
plt.xlabel("alpha")
plt.ylabel("rmse")
Text(0,0.5,'rmse')
注意上面的U形曲线。当alpha太大时,正则化太强,模型无法捕获数据中的所有复杂性。然而,如果我们让模型过于灵活(alpha小),模型就会开始过度拟合。根据上面的图,alpha=10的值大约是右的。
cv_ridge.min()
0.1273373466867077
所以对于岭回归,我们得到了大约0.127的rmsle。
让我们试试套索模型。我们将在这里做一个稍微不同的方法,并使用内置的lasso cv为我们找出最好的alpha。出于某种原因,拉索cv中的alphas实际上是反向的,或者脊中的alphas。
model_lasso = LassoCV(alphas = [1, 0.1, 0.001, 0.0005]).fit(X_train, y)
rmse_cv(model_lasso).mean()
0.12314421090977452
好极了!套索的性能更好,所以我们只需要用这个来预测测试集。关于套索的另一个好处是它为你做了特征选择——设置了它认为不重要的特征系数为零。让我们来看看系数:
coef = pd.Series(model_lasso.coef_, index = X_train.columns)
print("Lasso picked " + str(sum(coef != 0)) + " variables and eliminated the other " + str(sum(coef == 0)) + " variables")
Lasso picked 110 variables and eliminated the other 178 variables
做得好套索。然而,这里需要注意的一点是,所选的特性不一定是“正确的”特性,特别是因为在这个数据集中有很多共线特性。在这里尝试的一个想法是在增强的样本上运行lasso几次,看看特性选择有多稳定。
我们还可以直接看看最重要的系数是什么:
imp_coef = pd.concat([coef.sort_values().head(10),coef.sort_values().tail(10)])
matplotlib.rcParams['figure.figsize'] = (8.0, 10.0)
imp_coef.plot(kind = "barh")
plt.title("Coefficients in the Lasso Model")
Text(0.5,1,'Coefficients in the Lasso Model')
#let's look at the residuals as well:
matplotlib.rcParams['figure.figsize'] = (6.0, 6.0)preds = pd.DataFrame({"preds":model_lasso.predict(X_train), "true":y})
preds["residuals"] = preds["true"] - preds["preds"]
preds.plot(x = "preds", y = "residuals",kind = "scatter")
<matplotlib.axes._subplots.AxesSubplot at 0x26801c06780>
kaggle房价预测问题相关推荐
- 梯度消失和梯度爆炸_知识干货-动手学深度学习-05 梯度消失和梯度爆炸以及Kaggle房价预测...
梯度消失和梯度爆炸 考虑到环境因素的其他问题 Kaggle房价预测 梯度消失和梯度爆炸 深度模型有关数值稳定性的典型问题是消失(vanishing)和爆炸(explosion). 当神经网络的层数较多 ...
- (pytorch-深度学习系列)简单实现kaggle房价预测-学习笔记
实现kaggle房价预测 导入所需模块: %matplotlib inline import torch import torch.nn as nn import numpy as np import ...
- Pytorch kaggle 房价预测实战
Pytorch kaggle 房价预测实战 0. 环境介绍 环境使用 Kaggle 里免费建立的 Notebook 教程使用李沐老师的 动手学深度学习 网站和 视频讲解 小技巧:当遇到函数看不懂的时候 ...
- Transformer 实现 Kaggle 房价预测竞赛
Kaggle 房价预测竞赛是典型的机器学习中的回归问题,需要在训练集上对于房间的 N 个特征和房价之间的关系进行拟合,在测试集上,模型即可根据房间特征对房价作出预测.考虑到需要拟合多种特征之间的关系, ...
- 0907实战KAGGLE房价预测数据
数据集: 本文主要对KAGGLE房价预测数据进行预测,并提供模型的设计以及超参数的选择. 该数据集共有1460个数据样本,80个样本特征 数据集介绍可参照: House Prices - Adv ...
- kaggle房价预测-回归模型
目录 1 项目背景 2 初始数据分析 目标值分析 特征与目标值相关性 变量特征相关性 3 数据预处理 目标变量正态分布化 异常值处理 缺失值处理 转换特征 保存训练集和测试集 4 模型预测 岭回归 l ...
- kaggle房价预测特征意思_R语言实战:复杂数据处理和分析之Kaggle房价预测
1)明确分析的目的 本次数据分析的数据来源于kaggle上有关于房价预测,数据来源:House Prices: Advanced Regression Techniques.此次的分析目的已经很明确了 ...
- kaggle 房价预测经典文章
1::: xgboost 2:::随机森林 3:::xgboost 线性模型 4:::xgboost数据预处理 数据预处理2 5:::文章集合 6:::岭回归 7:::xg ...
- kaggle房价预测特征意思_Kaggle实战-波士顿房价预测
本文数据集来自Kaggle波士顿房价预测项目https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data 1.数据 ...
最新文章
- java字节流6_JavaIO流之字节流
- MIC4680-5.0YM-TR详细资料
- 京东云默默搞了个操作系统,然后惊艳了一大片煤矿
- Spring Cloud学习系列第六篇【分布式配置中心】
- Visual Studio配置VLFeat库(一次配置,永久生效)
- opencv cv::mat::data是什么数据类型?
- java linux root权限管理_新的 Linux sudo 漏洞使本地用户获得 root 权限
- 前端学习(2818):小程序学习之文件建立
- c语言报错spawning 插1,C语言错误····error spawning c1.exe
- 三位bcd加法计数器_两个8位BCD编号的加法| 8085微处理器
- 【iOS开发】使用XCode 10添加Launch Image(启动图片)
- 7天java_JAVA第7天
- linux docker位置查找,linux – 如何在Docker中获取依赖子图像列表?
- 高等数学(第七版)同济大学 习题7-5 个人解答
- ffmpeg 转码及多线程处理
- ectouch注册去邮箱的修改方法
- 新托业模拟考试感言—了解一下参加过托业考试前辈们的经验03
- wlan和wifi的区别
- StringBuilder和StringBuffer的效率比较
- 单目标跟踪CVPR 2018 ECO+
热门文章
- swift. 扩展类添加属性_swift中的声明关键字详解
- 云原生架构下的持续交付实践
- python post请求 415_接收错误415:使用REST API发送GET请求时不支持媒体类型
- 易优cms后台RCE以及任意文件上传漏洞
- HTML 学习笔记3
- UOJ#37. 【清华集训2014】主旋律
- TestNG+Maven+IDEA环境搭建
- 【转】IE浏览器快捷键大全
- 让Vs2013 完美支持EF6.1 Code First with Oracle 2015年12月24日更新
- wordpress相关插件及应用模板