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。它的数值在数据集中是0,1,2… 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(其值全为1和0)。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 Regression,Ridge Regression。 这篇文章(https://www.zhihu.com/question/38121173/answer/403986652 )谈到了这两者的异同。也对LASSO Regression做了一些说明。
不加Penalty的Linear Regression目标函数长这样:
LASSO 目标函数长这样:
这里因为LASSO 对于outlier很敏感,所以作者在用这个算法之前先用sklearn的Robustscaler() 进行预处理。
12.2 Elastic Net Regression
LASSO的penalty项是加上 alpha 倍的系数的绝对值;RIDGE的penalty是 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
-End-
Comments
Post a Comment