Kaggle笔记: House Price prediction

Kaggle 笔记: House Price prediction



1.training set test set里面的 Id 列,移除(备份到一边)
2.作出横轴是住房面积 纵轴是房价的图像,发现基本上房价和面积呈线性关系,并且发现有些数据住房面积很大 但是房价很低,这些属于outlier data. 把它们从数据集中移除
3.既然目标是房价预测, 我们把training set里面的房价分布图画出来
这里根据图像发现 并不是特别线性


4.于是想到把price 这一列求log,再画图观察,发现分布更正态了


5.Training set Test set 拼起来,观察missing data。 填充这些missing data. 这里作者对着数据提供者的description,再加上一些想象把丢失的数据全部补完

6.把数据集里面其实是category attribute 从数字表示 转化为字符串。比如OverallCond 这个字段,代表 Rates the overall condition of the house。它的数值在数据集中是012… 10。 但他本质上是category


7.对数据进行重新编码 , 把category 的数据表示为数字比如性别[‘male’, ’female’] -> [‘1’, ‘0’]

8.合并/新增变量: 因为对于售价面积是个很重要的因素,作者创建了一个新的变量:总面积 = 地下室面积 + 一楼面积 + 二楼面积


9.查看各个attribute 的分布情况,把非正太分布(skewed features)的转化为正态分布。  这里作者用的是Box-cox Transformation


10.category variable 转化为dummy matrix
一种常用于统计建模或机器学习的转换方式是:将分类变量(categorical variable)转换为哑变量矩阵dummy matrix)或指标矩阵indicator matrix)。如果DataFrame的某一列中含有k个不同的值,则可以派生出一个k列矩阵或DataFrame(其值全为10)。pandas有一个get_dummies函数可以实现该功能



11.建立交叉验证集 : Cross-validation
由于sklearn cross_val_score 并不会shuffle。 所以作者在这里手动做了随机,然后再用 cross_val_score 生成交叉验证集


12.尝试用基础的模型来predict

12.1 LASSO Regression
在做Linear Regression的时候,随着迭代次数的增加,会因为参数的绝对值过大而导致过拟合。这个时候需要修正目标函数,对于大参数的值加上penalty。对于penalty的添加引发出了几种不同算法,比如LASSO RegressionRidge Regression。 这篇文章(https://www.zhihu.com/question/38121173/answer/403986652 )谈到了这两者的异同。也对LASSO Regression做了一些说明。
不加PenaltyLinear Regression目标函数长这样:

LASSO 目标函数长这样:


这里因为LASSO 对于outlier很敏感,所以作者在用这个算法之前先用sklearnRobustscaler() 进行预处理。


12.2 Elastic Net Regression
LASSOpenalty项是加上 alpha 倍的系数的绝对值;RIDGEpenalty gamma 倍的系数平方。
Elastic Net regression 就是把这两项都用上

12.3 Kernel Ridge Regression
Kernel 可以理解为对 Ridge Regression 的扩展,Ridge Regression 12.1里面的ref 有提到。

12.4 Gradian Boost Regression
在 http://djjowfy.com/2017/08/01/XGBoost的原理 这篇解释XGBoost的博客里 同样说到了Gradian Boost Regression. Loss Function的选择 决定了是不是Gradian Boost Regression

12.5 XGBoost
要说XGBoost, 归根究底它是一个boost思想的算法。 我的理解是一种对CART(Classification And Regression Tree)的(巨大的)改进:



ref: http://djjowfy.com/2017/08/01/XGBoost的原理

12.6 LightGBM
Light Gradient Boosting Machine,顾名思义,这本质上是一个Boost 思路的算法实现。粗浅的我暂且把它理解为性能更优于XGBoost的算法。至于更细节的说明,等之后深入研究了再看。

13 Stacking Model: 把各种模型混合起来

13.1 Averaging Base Models ,最简单的方法: 用若干个模型,然后把结果求平均值再输出。
13.2 Adding a Meta-Model,稍微复杂点的方法:
这里用了一个叫做Stacking的DM方法。



我们用若干个(比如说5个)base 算法,来做预测,并且得到他们的预测值在某个validation set里的表现。这时候有一个meta算法,根据base的表现来拍板。





base-meta 可以有很多层,但是这里作者用了3个算法作为base,1 个算法作为meta。一轮就输出结果。
Base: ENET, KRR, GBoost
Meta: LASSO

14. Ensembling StackedRegressor, XGBoost, LightGBM

这里的StackedRegressor 就是13.2 作者用stacking 的方式结合的一个model. 这里的权重作者没说根据什么给出,应该是自己定的经验值。




   -End-

Comments

Popular posts from this blog

Malware Report: iauzzy.exe

Malware Report: withme.exe

根因分析之iDice 文章复现