美文网首页
梯度提升树(GBDT)

梯度提升树(GBDT)

作者: 魏佳斌 | 来源:发表于2018-07-03 11:35 被阅读29次

    sklearn机器学习库

    集成学习(ensemble learning)

    集成学习并非某一种机器学习算法,更像是一种理念。顾名思义,它把各种学习算法集成在一样,“博采众长”。集成学习可以用于分类问题集成,回归问题集成,特征选取集成,异常点检测集成等等。

    从下图,我们可以对集成学习的思想做一个概括。对于训练集数据,我们通过训练若干个个体学习器,通过一定的结合策略,就可以最终形成一个强学习器,以达到博采众长的目的。

    image

    个人学习器

    第一是如何选择个体学习器,个体选择器可以是同质的,比如用一堆决策树,构成随机森林;另外神经网络就是典型的“集成”一堆神经元。理论上讲,这些个体选择器也可以不同,比如将SVM,贝叶斯以及逻辑回归集成到一起。业内目前研究比较多的是同质的个体学习器。

    Boosting

    Boosting是提升的意思,也就是个体学习器之间是串行的关系。前者的输出是后者的输出,一步步“提升”实现强学习器。

    Boosting系列算法里最著名算法主要有AdaBoost算法和提升树(boosting tree)系列算法。提升树系列算法里面应用最广泛的是梯度提升树(Gradient Boosting Tree)

    Bagging

    Bagging是打包的意思,也就是说个体学习之间没能强的依赖关系。对于共同的输入样本,每个都“投机采样”,这样N个学习器输出结果不尽相同的。

    结合策略

    对于前面N个学习器的输出结果,如果来判断最终的分类呢?最简单是取平均数,或者“投票法”,也就是“少数服从多数”。当然更严谨的方法,可以是再加一层学习器,把前面N个结果作为输入,经过学习器来判定最终的结果。

    代码实例

    梯度提升树(GBDT)

    导入pandas,GBDT分类器

    import pandas as pd
    from sklearn.ensemble import GradientBoostingClassifier
    from sklearn import cross_validation, metrics
    
    

    使用pandas从csv里读取数据并简单分析:

    train = pd.read_csv('train_modified.csv')
    print(train.head())
    print(train['Disbursed'].value_counts())
    

    数据集2W行,第行51列:

     Disbursed  Existing_EMI           ID  Loan_Amount_Applied  \
    0          0           0.0  ID000002C20               300000   
    1          0           0.0  ID000004E40               200000   
    2          0           0.0  ID000007H20               600000   
    3          0           0.0  ID000008I30              1000000   
    4          0       25000.0  ID000009J40               500000   
    
       Loan_Tenure_Applied  Monthly_Income  Var4  Var5  Age  \
    0                    5           20000     1     0   37   
    1                    2           35000     3    13   30   
    2                    4           22500     1     0   34   
    3                    5           35000     3    10   28   
    4                    2          100000     3    17   31   
    
       EMI_Loan_Submitted_Missing    ...     Var2_2  Var2_3  Var2_4  Var2_5  \
    0                           1    ...          0       0       0       0   
    1                           0    ...          0       0       0       0   
    2                           1    ...          0       0       0       0   
    3                           1    ...          0       0       0       0   
    4                           1    ...          0       0       0       0   
    
       Var2_6  Mobile_Verified_0  Mobile_Verified_1  Source_0  Source_1  Source_2  
    0       1                  1                  0         1         0         0  
    1       1                  0                  1         1         0         0  
    2       0                  0                  1         0         0         1  
    3       0                  0                  1         0         0         1  
    4       0                  0                  1         0         0         1  
    
    

    数据分类是如下分布,label是0的分类居多数:

    0    19680
    1      320
    

    把X,y数据分开,用于训练:

    target='Disbursed' # Disbursed的值就是二元分类的输出
    IDcol = 'ID'
    x_columns = [x for x in train.columns if x not in [target, IDcol]]
    X = train[x_columns]
    y = train['Disbursed']
    

    模型训练:

    gbc = GradientBoostingClassifier(random_state=10)
    gbc.fit(X,y)
    

    模型预测,predict返回Nx1的ndarray,与真实值y.values计算准确率。可以看出gbdt默认参数的精度已经很高了。

    y_pred = gbc.predict(X)
    print("Accuracy : %.4g" % metrics.accuracy_score(y.values, y_pred))
    #Accuracy : 0.9852
    

    评估ROC_AUC:

    y_predprobs = gbc.predict_proba(X)
    print('概率矩阵:',y_predprobs)
    y_predprob = y_predprobs[:,1]
    print("AUC Score (Train): %f" % metrics.roc_auc_score(y, y_predprob))
    

    分类横型的评估:
    ROC字面翻译是“受试者工作特征”(Receiver Operating Characteristic)。ROC曲线的面积就是AUC(Area Under the Curve)。AUC用于衡量“二分类问题”机器学习算法性能(泛化能力)。

    • TPR:真实的正例中,被预测正确的比例
      True Positive Rate,TPR = TP/(TP+FN)

    • FPR:真实的反例中,被预测正确的比例
      False Positive Rate,FPR=FP/(TN+FP)

    ROC就是以FPR为横轴,TPR为纵轴。

    相关文章

      网友评论

          本文标题:梯度提升树(GBDT)

          本文链接:https://www.haomeiwen.com/subject/tkuduftx.html