Эксперименты на основе реальных наборов данных
Автор:: Юваль Коэн, Ноа Коэн и Авиад Атлас.
Введение
Это вторая часть блога о выборе функций (не пропустите первую часть!). Во второй части мы рассматриваем варианты объединения различных наборов функций из разных методов выбора функций. Идея состоит в том, чтобы извлечь выгоду из всех независимых методов и объединить их в один более умный набор функций. Это непростой подход, и в этом посте мы расскажем, как решить эту проблему, используя несколько методов.
Описание методов
Простые подходы
При столкновении с проблемой, в которой мы хотим объединить несколько прогнозов, интуитивно понятное решение состоит в том, чтобы взять объединение или пересечение различных методов. В методе объединения мы оставляем признаки, которые появились в любом из методов выбора признаков. В методе пересечения мы оставляем только те элементы, которые присутствовали во всех методах выбора пространственных объектов. Эти подходы могут быть реализованы с помощью встроенного в Python модуля set
module:
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 модуля Counter
module:
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
Резюме
Наш блог о выборе функций состоит из двух частей. В первом посте мы показываем жизнеспособность и необходимость использования процедуры выбора функций. Мы сосредоточились на различных способах выполнения выбора функций и на том, как каждый метод работает с отдельными наборами данных, увидев преимущества и недостатки каждого метода.
Во втором посте мы расскажем, как использовать преимущества каждого метода и создавать разные типы ансамблей.
Наш главный вывод заключается в том, что в большинстве случаев это не помогает повысить точность, но, безусловно, помогает повысить надежность модели и время обучения.
Спасибо за чтение..:)