欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

机器学习Kaggle入门:房价预测比赛

程序员文章站 2022-07-14 14:18:02
...

前面已经有了两篇机器学习Kaggle入门的笔记,

机器学习Kaggle入门,经典又兼具备趣味性的泰坦尼克号问题

机器学习Kaggle入门,自行车租赁预测比赛

第一个问题是分类问题,第二个问题是回归问题。

两个案例主要是展示了特征工程的魅力,如何利用第三方库快速的实现模型搭建。

现在这篇文章,会侧重介绍kaggle的实际操作”现场“,方便大家去跟着思路学习进入到kaggle的真实世界,不仅知道怎么做模型预测,还知道数据在哪下载,在哪提交。

其次,这个房价预测的比赛相比之前的两个案例是特征多了很多,面对特征突然”爆炸“,本文提供简单的处理思路。

 

进入主题

官网

https://www.kaggle.com/c/house-prices-advanced-regression-techniques

 

先看下项目描述

Competition Description

机器学习Kaggle入门:房价预测比赛

Ask a home buyer to describe their dream house, and they probably won't begin with the height of the basement ceiling or the proximity to an east-west railroad. But this playground competition's dataset proves that much more influences price negotiations than the number of bedrooms or a white-picket fence.

With 79 explanatory variables describing (almost) every aspect of residential homes in Ames, Iowa, this competition challenges you to predict the final price of each home.

 

简而言之就是,我们这里有一些房子的信息数据,它包括79个变量特征来表征房子特点,数据也包括已有的一些真实房价。希望我们能通过这些数据,来预测其他的房子的价格。

 

数据下载

当然先下载数据,包括训练数据,测试数据,还有数据描述,提交结果样本,如下图:

机器学习Kaggle入门:房价预测比赛

File descriptions

  • train.csv - the training set

  • test.csv - the test set

  • data_description.txt - full description of each column, originally prepared by Dean De Cock but lightly edited to match the column names used here

  • sample_submission.csv - a benchmark submission from a linear regression on year and month of sale, lot square footage, and number of bedrooms

 

好了,迫不及待的要开始了!!!

 

一、老思路分析选取特征

第一阶段采用老思路,对数据特征进行分析,知道哪些特征重要。

 

1.导入必要库

pandas ,matplotlib.pyplot ,seaborn,numpy,

warning 用来屏蔽警告这种令人讨厌又不影响结果的提示。

机器学习Kaggle入门:房价预测比赛

 

2.导入数据

还是老套路,pd.read_csv('xxxx.csv') ,运行脚本与数据csv文档不在一个文件地址下,需要带上地址。

机器学习Kaggle入门:房价预测比赛

3.观察数据

观察数据,做到心中有数,至少了解数据是什么形式的,有个整体印象。

机器学习Kaggle入门:房价预测比赛

81列,其中特征80个,包含预测标签1个,特征标签79个。

 

了解数值型数据的分布,如下:

机器学习Kaggle入门:房价预测比赛

这个表展示的数据都为数值型的数据,有38个特征是数字型。

 

4.浏览特征字段

机器学习Kaggle入门:房价预测比赛

看到这些词汇,感觉增长了见识。不怕字段多,多了可以少嘛!来看看这些特征的中文含义。(有点多,要不挑几个看看好了,比如地上面积,地下室面积,车库大小等)

  • SalePrice: 销售价格
    MSSubClass: 建筑类
    LotFrontage: 直线距离
    LotArea:土地面积(平凡英尺)
    Street: 路的类型 
    Alley : 胡同类型
    LotShape:房产的形状(是否规则)
    LandCounter: 房产的平坦度
    Utitles: 公共设备 设施
    LotConfig: 划分配置
    LandSlope:斜坡程度
    Neighborhood: 在Ames city范围的物理位置
    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 :地下室总面积
    Heating QC: 热暖质量和条件
    CentraAir : 是否有*空调
    Electrical :电气系统
    1stFlrSF:一楼平方英尺
    2ndFlrSF:二楼平方英尺
    LowQualFinSF:低质量完成平方英尺(所有地板)
    GrLivArea:高于(地面)居住面积的平方英尺
    BsmtFullBath:地下室完整的浴室
    BsmtHalfBath:地下室半浴室
    FullBath:高档浴室
    HalfBath:高于等级的半浴室
    Bedroom :地上的卧室
    Kitchen: 高档厨房
    KitchenQual :厨房质量评估
    TotRmsAbvGrd :高档卧室(不包括浴室)
    Functional :家庭功能
    FireplaceQu :壁炉数量
    FireplaceQu :壁炉质量
    GarageType : 车库位置
    GarageYrBlt :车库建成年份
    GarageFinish : 车库的内部完成
    GarageCars: 车容量为单位的车库大小
    GarageArea : 以平方英尺为单位的车库大小
    GarageQua: 车库质量
    GarageCond :车库条件
    PavedDrive :铺设车道
    WoodDeckSF:木甲板面积(平方英尺的)
    OpenPorchSF:打开门廊面积(以平方英尺)
    EnclosedPorch:封闭门廊面积(以平方英尺)
    3SsnPorch:门廊(三个平方英尺的)
    ScreenPorch:屏幕门廊面积(平方英尺的)
    PoolArea:以平方英尺为单位的泳池面积
    PoolQC:泳池质量
    Fence : 栅栏质量
    MiscFeature :杂项功能未在其他类别中涵盖
    MiscVal:杂项功能的价值
    MoSold:月销量(MM)
    YrSold:已售出年份(YYYY)
    SaleType:销售类型
    SaleCondition:销售条件

 

5.看看数据的统计是否有缺失值

字段太多,截取了开始的部分,共1460行数据记录,如果统计的非空记录少于1460,说明有缺省值。

机器学习Kaggle入门:房价预测比赛

 

6.看看标签的数据,分布情况

机器学习Kaggle入门:房价预测比赛

房价没有空缺值
平均价格18.0921万,
最小值为3.49万,最大值为75.5万。 (美元哈)

机器学习Kaggle入门:房价预测比赛

数据分布稍微左偏。

 

7.如何选择特征?

看相关系数

机器学习Kaggle入门:房价预测比赛

与房价saleprice越相关,颜色越浅,

人眼观察:从图中看出,OverallQual,GrLiveArea,TotalBsmtSF, 1stFlrSF,GarageCars.都是相关系数比较靠前。

凭眼力,也许不好分出10个特征。

代码解决:

机器学习Kaggle入门:房价预测比赛

 

根据数字大小,得出相关性前十的特征:OveralQual , GrLivArea, GarageCars , GarageArea ,TotalBsmtSF, 1stFlrSF ,FullBath, TotRmsAbvGrd ,YearBuilt 。

 

至此拿这十个特征就可以开始训练了,这次我们不这样,毕竟70个特征,用10个有点浪费,这一次,想都用起来看看。

 

二、利用所有特征来训练

1.读取数

机器学习Kaggle入门:房价预测比赛

 

2.对标签房价处理

使之尽量成正太分布形式。使用log,并单独作为y ,且从数据中移除(pop)。

机器学习Kaggle入门:房价预测比赛

 

3.联合数据

将训练集和测试集合并进行特征处理(将测试集接在训练集后面),等特征处理完毕后再拆分出来单独训练和预测。

机器学习Kaggle入门:房价预测比赛

将训练集和测试集,前后连接,合起来2919条数据,特征还是79个。

机器学习Kaggle入门:房价预测比赛

 

4.One-hot处理

我们注意到MSSubClass_20是类别型数据,看看:

机器学习Kaggle入门:房价预测比赛

数字本身大小的含义会在模型中有影响,所以为了避免分类时的数值影响,
采用pandas自带的get_dummies方法,实现one-hot .

机器学习Kaggle入门:房价预测比赛

MSSSubClass 被我们分成了12个column ,每一个代表一个Category, 是就是1,不是就是0。

同样,将所有的category数据,都给One-Hot 。

机器学习Kaggle入门:房价预测比赛

 

经过处理后的特征变为了288个。

 

5.缺失值处理

看看还有多少缺失值,数值型的数据还存在缺失值。

机器学习Kaggle入门:房价预测比赛

缺失值最多的是LotFrontage :Linear feet of street connected to property
意思是与街道的直线距离,GarageYrBlt :车库修建年份,等。

这里我们采用各特征已有数据的平均值来填充。代码如下:

机器学习Kaggle入门:房价预测比赛

填充后检查,缺失值数目为0,验证均已经填充完毕。

 

6.标准化数据,归一化

对于各个特征的数据范围不一样,影响诸如线性回归的效果不明显的问题。
模型相对喜欢归一化的数据。

机器学习Kaggle入门:房价预测比赛

以上都是整型数值型数据,在此将对每个特征数据进行归一化处理,这里使用标准化:(X-X')/S  进行数据转换。

机器学习Kaggle入门:房价预测比赛

 

7.建立模型

因之前合并了数据进行特征处理,这里把数据集拆分还原为训练集和测试集。

机器学习Kaggle入门:房价预测比赛

 

1)线性回归

Ridge Regression 岭回归

导入第三方库,包括岭回归 和交叉验证函数。

机器学习Kaggle入门:房价预测比赛

拟定不同的50个参数,通过交叉验证选取适合的参数。

机器学习Kaggle入门:房价预测比赛

交叉验证,存储不同的alpha下,均方误差,通过绘图不同参数下的误差曲线查看最好的参数。

机器学习Kaggle入门:房价预测比赛

绘图如下:

机器学习Kaggle入门:房价预测比赛

图中看出:alpha=10~20时,score达到0.135 处于误差最低。

 

 

2)Random Forest随机森林

随机森林主要参数:

  •  n_estimators:表示森林里树的个数;

  • max_features:随机选择特征集合的子集合,并用来分割节点。

机器学习Kaggle入门:房价预测比赛

将树的个数作为变量,定子集0.3倍的特征,来探索多少树个数能得到好的效果。

同样是采用交叉验证的方式。

机器学习Kaggle入门:房价预测比赛

作图:

机器学习Kaggle入门:房价预测比赛

上图中看到树的个数 n_estimators取150是其中最佳的点,均方误差为0.1372 .

 

3)集成学习Ensemble

选取了岭回归和随机森林两种算法,并通过类举法得到相应的好参数。

将两种”好参数“条件下的算法结果进行综合,取平均数,得到的预测值将会更准确。

机器学习Kaggle入门:房价预测比赛

进行预测,并将数据进行指数转换(因为前面有对房价数据进行log处理)。

机器学习Kaggle入门:房价预测比赛

代码中我们打印了岭回归预测准值为0.98。虽然这个准确度是很不错,说明算法起到了预测的效果,但提示需要注意,对训练集的预测准确度高的模型不一定就对测试集的预测效果要好,因为可能出现”过拟合“,导致模型的泛化能力不强。

平均值

综合两个模型的预测值,取最简单的平均。

机器学习Kaggle入门:房价预测比赛

 

8.提交结果

提交结果时要知道结果是什么形式,我们打开官方提交结果样式,如下,需要保存为.csv格式,且只有Id,和对应的房价SalePrice。

机器学习Kaggle入门:房价预测比赛

所以要先从测试集取出test_df.index ,并与最后预测的房价’SalePrice‘进行组合。

机器学习Kaggle入门:房价预测比赛

至此,结果文档已经产生。

来看下生成结果文档ensemble_ridge_randomForest.csv:

机器学习Kaggle入门:房价预测比赛

 

检查完格式,就可以将文件提交到kaggle 房价预测项目中,就算完成了!

机器学习Kaggle入门:房价预测比赛

 

至于排名多少,大家 可以试试提交哦!

机器学习Kaggle入门:房价预测比赛

 

此文结束,后续还会以该案例进行扩展,用到bagging,xgboost等高逼格算法。通过不同的研究尝试达到算法的理解,思路的整理。

请继续关注和我一起玩kaggle有趣项目吧。

-end-机器学习Kaggle入门:房价预测比赛

(如需获得源代码,
请联系微信:ai_hellohello)