Должен ли sklearn.ensemble.AdaBoostClassifier полагаться на повторяющиеся оценки (слабые ученики)? - PullRequest
0 голосов
/ 14 января 2019

Анализируя ошибки (ошибочные классификации) sklearn.ensemble.AdaBoostClassifier, используя в качестве базовых оценок заглушки DecisionTreeClassifier, я обнаружил, что в ансамбле большое количество дублированных оценок. Типично ли иметь такое количество избыточности? Подробности ниже.

Информация о версии

питон: 3.6.5 версия sklearn: 0.20.2

Вот настройка с количеством оценок и скоростью обучения, определенная с помощью GridSearchCV.

    number_estimators = 501
    bdt= AdaBoostClassifier(DecisionTreeClassifier(max_depth=1), 
    algorithm=algorithm_choice, n_estimators=number_estimators,
                   learning_rate = 1)

Для справки приведен неполный список важных функций:

    important_features = utils.display_important_features( bdt.feature_importances_, X_train)
    Coefficient Values
    delta_sos   0.14770459081836326
    delta_win_pct   0.14171656686626746
    delta_dol   0.06786427145708583
    delta_fg_pct   0.0658682634730539
    delta_col   0.06387225548902195
    ...

Изучение оценок:

    feature_dict={}
    threshold_dict = {}
    for stub_estimator in bdt.estimators_:
        stub_tree = stub_estimator.tree_
        stub_feature_index = stub_tree.feature[0]
        stub_feature = X_train.columns[stub_feature_index]
        if stub_feature in feature_dict:
           feature_dict[stub_feature] +=1
           threshold_dict[stub_feature].append(stub_tree.threshold[0])
        else:
           feature_dict[stub_feature] = 1
           threshold_dict[stub_feature] = []
           threshold_dict[stub_feature].append(stub_tree.threshold[0])

     feature_dict
     {'delta_srs': 31,
      'delta_win_pct': 71,
      'delta_sos': 74,
      'delta_sag': 13,
      'delta_dol': 34,
       ... }

Давайте рассмотрим функцию delta_win_pct. Из 501 оценки в ансамбле алгоритм повышения выбрал 71 из оценок, которые должны быть основаны на delta_win_pct. Как примечание, процент оценок delta_win_pct, 71/501 = 14,17%, является значением, связанным с атрибутом важного признака, связанным с классификатором, как отмечено выше.

Из 71 оценщика «delta_win_pct» пороги также были собраны в кодовом блоке выше и могут быть доступны через:

   delta_win_partitions = threshold_dict['delta_win_pct']
   delta_win_partitions = [i*100 for i in delta_win_partitions]
   df_win = pd.DataFrame(columns=['Delta_Win_Pct','Y'])
   df_win['Delta_Win_Pct'] = delta_win_partitions
   df_win['Y'] = 1
   df_win.sort_values(by='Delta_Win_Pct', inplace=True)

   print("Number of unique partitions= 
        ",df_win['Delta_Win_Pct'].unique().shape[0], " out of ", 
         df_win.shape[0], ' estimators')

   splot = sns.scatterplot(x='Delta_Win_Pct', y='Y', data=df_win)
   splot.figure.set_size_inches(20,6)
   splot.set_title('Partitions of Delta Win Percentage')  

   ------------
   Number of unique partitions=  27  out of  71  estimators

enter image description here

На графике показаны уникальные 27 значений пороговых значений, используемые для разделения функции delta_win_pct в ансамбле оценок, в диапазоне от -25,1% до 22,2%.

Проблема в том, что 71-27 = 44, или 61,98% заглушек дерева 'delta_win_pct', используют повторяющиеся пороговые значения, содержащиеся на графике.

Разве это не неэффективно? Разве весы оценщика не должны отражать вклад оценщиков в классификатор, а не полагаться на дублирующие оценки для получения большего количества голосов?

Должен ли алгоритм гарантировать, что для одинаковых оценок на основе признаков не выбраны повторяющиеся пороговые значения?

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

Правильно ли это мышление?

Пытались ли другие практикующие минимизировать дублирование оценок в ансамбле?


Обновление 1/29/2019

Количество дублированных оценок, безусловно, зависит от количества запрашиваемых оценок и от того, как пень функции дерева решений можно разделить с помощью Entropy или Gini. Разделение прутка объекта выполняется независимо от других пней в лесу, так как не поддерживается список предыдущих порогов для определенного пня объекта. По-видимому, пороговые значения определяются исключительно алгоритмом расщепления.

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

...