Kaggle泰坦尼克预测分析

对我的分数提升最大的主要有两块:

   特征工程 : 主要为离散型变量的排序赋值,特征组合和PCA

   模型融合 : 主要为加权平均和Stacking

1.探索性可视化(Exploratory Visualization)

2.数据清洗(Data Cleaning)

3.特征工程(Feature Engineering)

4.基本建模&评估(Basic Modeling & Evaluation)

5.参数调整(Hyperparameters Tuning)

6.集成方法(Ensemble Methods)

1.探索性可视化

查看各特征的类型、意义,以及特征之间的关系。

train.describe() #查看所有特征数学特性

由于建造年份 (YearBuilt) 这个特征存在较多的取值 (从1872年到2010年),直接one hot encoding会造成过于稀疏的数据,因此在特征工程中会将其进行数字化编码(labelenc类)。

2.数据清洗

这里主要的工作是处理“缺失值”,首先来看各特征的缺失值数量:aa = full.isnull().sum()。aa[aa>0].sort_values(ascending=False) #查看所有

存在缺失值的特征,并将其数量从高到低排序。

2.1、仔细观察一下data_description里面的内容的话,会发现很多缺失值都有迹可循,比如上表第一个PoolQC,表示的是游泳池的质量,其值缺失代表的是这个房子本身没有游泳池,因此可以用 “None” 来填补;

2.2、有些特征多为表示XX面积,比如 TotalBsmtSF 表示地下室的面积,如果一个房子本身没有地下室,则缺失值就用0来填补。

2.3、对于有些用数字来表示类型的,可以通过用众数mode填充

完成以上步骤确保train数据集已经不存在缺失值

3.特征工程

3.1我们应该构建尽可能多的特征,并信任模型来选择正确的特性:对于离散型特征,一般采用pandas中的get_dummies进行数值化,但在这个比赛中光这样可能还不够,所以下面我采用的方法是按特征进行分组,计算该特征每个取值下SalePrice的平均数和中位数,再以此为基准排序赋值。map_values()方法。对年使用LabelEncoder,然后是get_dummies。

3.2特征组合:将原始特征进行组合通常能产生意想不到的效果,然而这个数据集中原始特征有很多,不可能所有都一一组合,所以这里先用Lasso进行特征筛选,选出较重要的一些特征进行组合。

3.3PCA:PCA是非常重要的一环,对于最终分数的提升很大。因为我新增的这些特征都是和原始特征高度相关的,这可能导致较强的多重共线性(Multicollinearity),而PCA恰可以去相关性。因为这里使用PCA的目的不是降维,所以n_components用了和原来差不多的维度,这是我多方实验的结果,即前面加XX特征,后面再降到XX维。

4.基本建模&评估

使用了13个算法和5折交叉验证来评估baseline效果:

LinearRegression

Ridge

Lasso

Random Forrest

Gradient Boosting Tree

Support Vector Regression

Linear Support Vector Regression

ElasticNet

Stochastic Gradient Descent

BayesianRidge

KernelRidge

ExtraTreesRegressor

XgBoost

5.参数调整

常见方法是GridSearch

6.集成方法

Voting:模型融合其实也没有想象的那么高大上,从最简单的Voting说起,这也可以说是一种模型融合。假设对于一个二分类问题,有3个基础模型,那么就采取投票制的方法,投票多者确定为最终的分类。

Averaging:对于回归问题,一个简单直接的思路是取平均。稍稍改进的方法是进行加权平均。权值可以用排序的方法确定,举个例子,比如A、B、C三种基本模型,模型效果进行排名,假设排名分别是1,2,3,那么给这三个模型赋予的权值分别是3/6、2/6、1/6。这两种方法看似简单,其实后面的高级算法也可以说是基于此而产生的,Bagging或者Boosting都是一种把许多弱分类器这样融合成强分类器的思想。

Bagging:RandomForest

Boosting:Adaboost、GBDT、Xgboost

Stacking:用了Lasso,Ridge,SVR,KernelRidge,ElasticNet,BayesianRidge作为第一层模型,KernelRidge作为第二层模型第一层5个模型,第二层1个元模型。第一层模型的作用是训练得到一个Rn×m的特征矩阵来用于输入第二层模型训练,其中n为训练数据行数,m为第一层模型个数。

你可能感兴趣的:(Kaggle泰坦尼克预测分析)