Python 样本权在梯度增强分类器中的应用

Python 样本权在梯度增强分类器中的应用,python,scikit-learn,ensemble-learning,Python,Scikit Learn,Ensemble Learning,我有以下用于二元分类问题的梯度增强分类器的代码 import numpy as np from sklearn.ensemble import GradientBoostingClassifier from sklearn.metrics import confusion_matrix from sklearn.model_selection import train_test_split #Creating training and test data

我有以下用于二元分类问题的梯度增强分类器的代码

    import numpy as np
    from sklearn.ensemble import GradientBoostingClassifier
    from sklearn.metrics import confusion_matrix
    from sklearn.model_selection import train_test_split

    #Creating training and test dataset
    X_train, X_test, y_train, y_test =        
    train_test_split(X,y,test_size=0.30,random_state=1)

    #Count of goods in the training set
    #This count is 50000
    y0 = len(y_train[y_train['bad_flag'] == 0])

    #Count of bads in the training set
    #This count is 100
    y1 = len(y_train[y_train['bad_flag'] == 1])

    #Creating the sample_weights array. Include all bad customers and 
    #twice the number of goods as bads

    w0=(y1/y0)*2
    w1=1

    sample_weights = np.zeros(len(y_train))
    sample_weights[y_train['bad_flag'] == 0] = w0
    sample_weights[y_train['bad_flag'] == 1] = w1

    model=GradientBoostingClassifier(
    n_estimators=100,max_features=0.5,random_state=1)
    model=model.fit(X_train, y_train.values.ravel(),sample_weights)
我对编写此代码的想法如下:-

  • 样本权重将允许model.fit从培训集中选择所有100个BAD和200个商品,同一套300个客户将用于以向前阶段的方式拟合100个估计器。我想减少我的训练样本,因为这两个反应班是高度不平衡的。请让我知道我对代码的理解是否正确

  • 另外,我想确认n_估计器=100意味着100个估计器将适用于同一组300个客户。这也意味着在梯度提升分类器中并没有自举,正如在bagging分类器中所看到的那个样

  • 据我所知,这不是它的工作原理。默认情况下,您有
    GradientBoostingClassifier(子样本=1.0)
    ,这意味着在每个阶段(对于每个
    n_估计量
    )使用的样本大小将与原始数据集中的样本大小相同。权重不会改变子样本的大小。如果要对每个阶段强制执行300次观察,除了权重定义外,还需要设置
    subsample=300/(50000+100)

  • 答案是否定的。对于每个阶段,将绘制一个新的分数
    子样本
    。您可以在此处阅读更多信息:。它说:

    在每次迭代中,根据可用训练数据的分数子样本对基础分类器进行训练

    因此,有一些bootstraping与boosting算法相结合


  • 谢谢马克西姆。另一个快速的问题是,这在Adaboost分类器中如何工作?此Classifier没有子样本参数,但在fit中支持样本重量。很高兴它回答了您的问题!AdaBoost是另一种分类算法,它不涉及每个估计器的任何采样。简言之,AdaBoost为每个观测值分配权重,并在每个步骤更新权重,以便为错误分类的点分配更多权重。为AdaBoost使用sample_weight只会更改这些weights hanks Maxime的初始化。如果我现在理解正确的话,样本权重在不同的ensembling分类器中的作用是不同的。在bagging分类器和随机森林中,这可以用来控制每个估计器中每个类的观测数量。在adaboost和gradient boosting分类器中,这可用于为错误分类的点分配权重。梯度推进分类器还具有子样本参数,该参数可与样本权重结合使用,以控制用于每个估计器的观测数。