Использование sample_weight в классификаторе повышения градиента - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть следующий код для классификатора повышения градиента, который будет использоваться для задачи двоичной классификации.

    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)

Я думаю о написании этого кода следующим образом: -

  1. sample_weights позволит model.fit выбрать все 100 плохих товаров и 200 товаров из учебного набора, и этот же набор из 300 клиентов будет использован для подбора 100 оценщиков в поэтапном порядке.Я хочу исследовать свой тренировочный набор, потому что два класса ответов очень несбалансированы.Пожалуйста, дайте мне знать, если мое понимание кода правильное?

  2. Также я хотел бы подтвердить, что n_estimators = 100 означает, что 100 оценщиков будут соответствовать одному и тому же набору из 300 клиентов.,Это также означает, что в классификаторе повышения градиента нет начальной загрузки, как видно в классификаторе упаковки.

1 Ответ

0 голосов
/ 02 февраля 2019
  1. Насколько я понимаю, это не так, как это работает.По умолчанию у вас есть GradientBoostingClassifier(subsample = 1.0), что означает, что размер выборки, который будет использоваться на каждом этапе (для каждого из n_estimators), будет таким же, как в исходном наборе данных.Веса ничего не изменят до размера подвыборки.Если вы хотите ввести 300 наблюдений для каждого этапа, вам нужно установить subsample = 300/(50000+100) в дополнение к определению веса.

  2. Ответ - нет.Для каждого этапа будет составлена ​​новая фракция subsample наблюдений.Подробнее об этом можно прочитать здесь: https://scikit -learn.org / stable / modules / ensemble.html # подъем градиента .В нем говорится:

    На каждой итерации базовый классификатор обучается на дробной подвыборке доступных обучающих данных.

    Таким образом, в результате возникает некоторая начальная загрузка в сочетаниис алгоритмом повышения.

...