美文网首页
4_基于GBDT、LR的分类方法

4_基于GBDT、LR的分类方法

作者: 蓝冻 | 来源:发表于2020-11-25 15:33 被阅读0次

    推荐场景下的一些问题可以转化为分类问题,甚至是二分类问题。

    GBDT是一种监督学习的方法。

    假设我们有一个5000 X 21维的数组型训练集,5000为样本数,前20维是样本的特征,最后一维是分类的标签,取值为0或1。假设训练集已完成前期各项数据处理,仅等待输入模型进行训练。

    设该训练集为 train,下面我们写一个函数,基于GBDT对训练集进行学习。

    from sklearn.ensemble import GradientBoostingClassifier

    def  gbdt_train():

            x_train = train[ :, 0:20]

            y_train = train[ :, 20]

            dt = GradientBoostingClassifier( learning_rate=0.1, n_estimators=100, max_depth=8 )

            dt.fit( x_train, y_train )

            return dt

    现在,假设我们获得了测试集test,1000 X 21维的数组。我们依据测试集来对上一步训练的模型进行效果评估。

    def  model_eval():

            x_test = test[ :, 0:20]

            y_test = test[ :, 20]

            dt = gbdt_train()

             y_forcast = dt.predict_proba( x_test )

             y_result = list()

            for k in y_forcast:

                    y_result.append(1 if k[ 1 ] > 0.5  else  0)     # 注意k的数据类型,k[1]才是对应的概率

            mse = sklearn.metrics.mean_squared_error( y_test.values, y_result )

            accuracy = sklearn.metrics.accuracy_score( y_test.values, y_result )

            auc = sklearn.metrics.roc_auc_score( y_test.values, y_result )

    可以看到,GBDT用起来还是挺简单的。

    下面,我们再采用LR方法对上面的的数据进行训练。

    from  sklearn.linear_model import LogisticRegression

    def lr_train():

            x_train = train[ :, 0:20]

            y_train = train[ :, 20]

            lr = LogisticRegression( penalty='l2' , tol=1e-4, fit_intercept=True )

            lr.fit( x_train, y_train )

            return lr

    我们依据测试集来对训练的模型进行效果评估。

    def  model_eval():

            x_test = test[ :, 0:20]

            y_test = test[ :, 20]

            lr = lr_train()

            y_forcast = lr.predict_proba( x_test )   # 注意lr.predict()与lr.predict_proba()的差别

            y_result = list()

            for k in y_forcast:

                 y_result.append(1 if k[ 1 ] > 0.5  else  0)     # 注意k的数据类型,k[1]才是对应的概率

            mse = sklearn.metrics.mean_squared_error( y_test.values, y_result )

            accuracy = sklearn.metrics.accuracy_score( y_test.values, y_result )

            auc = sklearn.metrics.roc_auc_score( y_test.values, y_result )

    可以看到,LR用起来也挺简单的。

    下面,我们再建立一个GBDT+LR的模型来训练数据。

    from sklearn.preprocessing import OneHotEncoder

    def gbdt_lr_train():

            x_train = train[ :, 0:20]

            y_train = train[ :, 20]

            dt = GradientBoostingClassifier()

            dt.fit( x_train, y_train )

            gbdt_lr = LogisticRegression()

            encoder = OneHotEncoder()

            encoder.fit( dt.apply(x_train).reshape(-1, 100) )  # 此处100为模型dt里参数n_estimators的值,此处进行数据格式转换才能传入encoder.fit()

            gbdt_lr.fit( encoder.transform( dt.apply(x_train).reshape(-1, 100)), y_train)

            return encoder,   dt,  gbdt_lr

    下面,们依据测试集来对训练的模型进行效果评估。

    def  model_eval():

            x_test = test[ :, 0:20]

            y_test = test[ :, 20]

            encoder,   dt,  gbdt_lr = gbdt_lr_train()

            y_forcast = gbdt_lr.predict_proba( encoder.transform( dt.apply(x_test).reshape(-1,100)) )

            y_result = list()

            for k in y_forcast:

                 y_result.append(1 if k[ 1 ] > 0.5  else  0)   

            mse = sklearn.metrics.mean_squared_error( y_test.values, y_result )

            accuracy = sklearn.metrics.accuracy_score( y_test.values, y_result )

            auc = sklearn.metrics.roc_auc_score( y_test.values, y_result )

    相关文章

      网友评论

          本文标题:4_基于GBDT、LR的分类方法

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