Эксперименты на основе реальных наборов данных

Автор:: Юваль Коэн, Ноа Коэн и Авиад Атлас.

Введение

Это вторая часть блога о выборе функций (не пропустите первую часть!). Во второй части мы рассматриваем варианты объединения различных наборов функций из разных методов выбора функций. Идея состоит в том, чтобы извлечь выгоду из всех независимых методов и объединить их в один более умный набор функций. Это непростой подход, и в этом посте мы расскажем, как решить эту проблему, используя несколько методов.

Описание методов

Простые подходы

При столкновении с проблемой, в которой мы хотим объединить несколько прогнозов, интуитивно понятное решение состоит в том, чтобы взять объединение или пересечение различных методов. В методе объединения мы оставляем признаки, которые появились в любом из методов выбора признаков. В методе пересечения мы оставляем только те элементы, которые присутствовали во всех методах выбора пространственных объектов. Эти подходы могут быть реализованы с помощью встроенного в Python модуля setmodule:

features_selected_sets = []
for features_list in features_selected_lists:
    features_selected_sets.append(set(features_list))
intersection = set.intersection(*features_selected_sets)
union = set.union(*features_selected_sets)

Голосование

Аналогичный подход заключается в проведении голосования между различными методами (аналогично классификатору случайного леса). Этот подход можно реализовать с помощью встроенного в Python модуля Countermodule:

counter = Counter(features_selected_lists) # list of lists
features_voted = [k for k, v in counter.items() if v >= min_votes]

Ансамбль

Более сложный подход - создать ансамбль моделей, то есть обучить модель для каждого набора функций, выбранных с помощью другого метода выбора функций. После этого будет проведено голосование (классификация) или усреднение результатов различных моделей.

Ниже приведен фрагмент кода для реализации ансамбля с использованием случайного леса в качестве базового классификатора для каждой выбранной функции метода выбора функции:

#Training
models = []
models_features = []
for features_list in features_selected_lists:
    clf = RandomForestClassifier(random_state=0)
    clf.fit(X_train[features], y_train)
    models.append(clf)
    models_features.append(features)
#Inference (on a batch)
from scipy import stats
preds = np.empty(shape=(len(models), len(y_test)))
for i, model in enumerate(models):
    preds[i, :] = model.predict(X_test[models_features[index]])
modes = stats.mode(preds)[0][0]

Результаты

В следующей таблице сравниваются различные методы, описанные выше. Мы взяли два разных набора табличных данных из нашего домена и проверили их точность. Для обучения мы использовали древовидную модель - случайный лес. Для каждого набора данных мы создали пять наборов тестов, которые позволили нам более точно сравнить точность методов. Мы также сравнили результаты выполнения t-теста (представленного в виде кортежа t-value, p-value) между точностью при использовании всех функций и точностью при выполнении метода комбинирования. Код для t-теста и объяснение включены в первый пост (см. Ссылку во введении).

Атрибуты наборов данных следующие:

  • Dataset1 - мультиклассовая классификация. Обучайте набор из 10 тыс. Строк с 400 функциями. Для этого набора данных мы использовали в общей сложности 5 методов.
  • Dataset2 - двоичная классификация. Набор из 398 тыс. Строк с 44 элементами. Для этого набора данных мы использовали в общей сложности 6 методов. Обратите внимание, что для этого набора данных метод пересечения привел к отсутствию объектов и объединению со всеми объектами, поэтому он бесполезен.

Выводы

Мы использовали показатель p-value, чтобы сделать вывод, превзошел ли наш ансамбль исходную модель. Для обоих наборов данных в большинстве случаев мы не отвергаем нулевую гипотезу, указывая на то, что точность относительно одинакова. Хотя мы не увеличили точность, мы по-прежнему получаем высокую точность при использовании меньшего количества функций (это, конечно, здорово, учитывая временную сложность обучения и устранение проблемы размерности).

Эти наборы данных использовались в предыдущем посте; будет интересно посмотреть, превзойдут ли наши новые предлагаемые методы выбора функций (то есть голосование и ансамбль) отдельные методы:

Красным выделением отмечены случаи, в которых «одиночный» метод был предпочтительнее (Pval

Резюме

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

Во втором посте мы расскажем, как использовать преимущества каждого метода и создавать разные типы ансамблей.

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

Спасибо за чтение..:)