GBDT(梯度提升决策树)+LR(逻辑回归)方法+python实践
这篇文章记录一下在KDD比赛中大放异彩比肩Deeplearning的分类模型:GBDT+LR,小伙伴们可以读一下2014年facebook的论文,Practical Lessons from Predicting Clicks on Ads at Facebook,需要资源的欢迎评论交流
一、GBDT
GBDT也叫梯度提升决策树,是机器学习里面对对数据分类较好的算法,甚至效果有些情况优于DL。他的用途有很多,即可以用于分类也可以用于回归,最重要的是可以“扩展”特征, 所以这个模型值得大家学习一下。
GBDT是通过采用加法模型(即基函数的线性组合),以及不断减小训练过程产生的误差来达到将数据分类或者回归的算法,gbdt通过多轮迭代, 每轮迭代会产生一个弱分类器, 每个分类器在上一轮分类器的残差基础上进行训练。gbdt对弱分类器的要求一般是足够简单, 并且低方差高偏差。因为训练的过程是通过降低偏差来不断提高最终分类器的精度。由于上述高偏差和简单的要求,每个分类回归树的深度不会很深。最终的总分类器是将每轮训练得到的弱分类器加权求和得到的(也就是加法模型)。
原理大家可以参考这篇博客
下面是介绍一下数据集以及代码实现部分
数据集包含样本标签0和1,样本特征(连续型N1-N15和分类型C1-C5)
GBDT由于是分类树或者回归树的性质,对连续变量不需要进行归一化或者标准化的处理,所以只需要对离散特征进行one-hot编码即可作为GBDT的输入。
代码如下:
'''GBDT实现'''
"""导入包"""
import pandas as pd
from sklearn.model_selection import train_test_split
import lightgbm as lgb
from sklearn.metrics import log_loss
from sklearn.metrics import roc_curve, auc ###计算roc和auc
from sklearn.ensemble import GradientBoostingClassifier
from sklearn import metrics
import gc
from scipy import sparse
import joblib
"""数据读取与预处理"""
path = 'C:/Users/Tunan/Desktop/'
df = pd.read_csv(path + 'DATA_features.csv')
# 简单的数据预处理
# 去掉id列, 把测试集和训练集合并, 填充缺失值
df.drop(['ID'], axis=1, inplace=True)
data = df
"""下面把特征列分开处理"""
continuous_fea = ['N'+str