Исчерпывающий поиск по сетке для выбора функций

Я работал с несколькими подходами к выбору признаков ранжирования. Как вы, возможно, знаете, алгоритмы этого типа ранжируют признаки в соответствии с каким-то конкретным методом (например, статистическим, разреженным обучением и т. д.), и они управляются несколькими гиперпараметрами, которые необходимо настроить для достижения наилучших результатов.

Современный уровень техники представляет другой подход к настройке параметров, и, просматривая Интернет, я наткнулся на следующий метод: подход с поиском по сетке. Как указано в этой ссылке, поиск состоит из следующих шагов:

  1. Селектор функций
  2. Метод поиска или выборки кандидатов;
  3. Пространство параметров
  4. Схема перекрестной проверки
  5. Функция оценки.

Я суммировал следующие шаги (начиная с пункта 3) в этом фрагменте кода:

tuned_parameters = {

'LASSO':    {'alpha': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]},

}

# pick the i-th feature selector
for fs_name, fs_model in slb_fs.iteritems():

    comb = []
    params_name = []
    for name, tun_par in tuned_parameters[fs_name].iteritems():
        comb.append(tun_par)
        params_name.append(name)

    # function for creating all the exhausted combination of the parameters
    print ('\t3 - Creating parameters space: ')
    combs = create_grid(comb)

    for comb in combs:

        # pick the i-th combination of the parameters for the k-th feature selector
        fs_model.setParams(comb,params_name,params[fs_name])

        # number of folds for k-CV
        k_fold = 5

        X = dataset.data
        y = dataset.target
        kf = KFold(n_splits=k_fold)

        print ('\t4 - Performing K-cross validation: ')
        for train_index, test_index in kf.split(X):
            X_train, X_test = X[train_index, :], X[test_index, :]
            y_train, y_test = y[train_index], y[test_index]

            print ('\t5.1 - Performing feature selection using: ', fs_name)
            idx = fs_model.fit(X_train, y_train)

            # At this point I have the ranked features

            print ('5.2 - Classification...')
            for n_rep in xrange(step, max_num_feat + step, step): 

                # Using classifier to evaluate the algorithm performance on the test set using incrementally the retrieved feature  (1,2,3,...,max_num_feat)

                X_train_fs = X_train[:, idx[0:n_rep]]
                X_test_fs = X_test[:, idx[0:n_rep]]

                _clf = clf.Classifier(names=clf_name, classifiers=model)
                DTS = _clf.train_and_classify(X_train_fs, y_train, X_test_fs, y_test)

        # Averaging results of the CV
        print('\t4.Averaging results...')

В пункте 5.1 я использую классификатор для оценки производительности, полученной выбранным селектором функций на подмножестве функций (в моем случае я использую их постепенно, поскольку функция ранжируется) и усредняю ​​результаты с помощью схемы перекрестной проверки. . Результаты, которые у меня есть на данный момент, представляют собой среднюю оценку точности для каждого подмножества функций (например, 1: 70%, 2:75, 3:77%,..., N: 100%).

Очевидно, что последние усредненные результаты получаются для каждой комбинации параметров (см. таблицу ниже). Например, предположим, что текущему селектору функций нужно просто настроить параметр альфа, результаты, которые я получу, перечислены в следующей таблице.

введите здесь описание изображения

Мой вопрос: существует ли какой-либо известный подход для выбора наилучшей конфигурации параметров на основе достигнутых результатов для всех функций или фиксированного их количества?

Я думал о том, чтобы усреднить результаты и использовать его как «лучшую конфигурацию», но я не думаю, что это сработает. Кто-нибудь из вас знает какой-то конкретный подход?

Я был бы очень благодарен, если бы кто-то мог мне помочь.


person Davide Nardone    schedule 09.08.2018    source источник
comment
??? Я думаю, что цель состоит в том, чтобы выбрать лучший результат и использовать этот селектор функций вместе с этим набором параметров. Выбор функции можно рассматривать как еще один параметр.   -  person kutschkem    schedule 10.08.2018
comment
@kutschkem Моя проблема заключается в том, как выбрать лучший результат на основе оценки точности, которую я получил, когда запустил селектор функций с другим значением гиперпараметра (например, альфа) и путем изменения количества функций (от 1 до num_max_feats). Я не понимаю твою мысль...   -  person Davide Nardone    schedule 10.08.2018
comment
У вас есть проблема 2D-оптимизации (номер функции, альфа) и, по-видимому, таблица, в которой указана точность для каждой комбинации. Что не так с выбором комбинации (номер признака, альфа), где точность максимальна? Я предполагаю, что вы имеете в виду, что вам нужна альфа-версия, которая лучше всего работает независимо от количества функций. Если это так, я думаю, неясно, существует ли такая альфа, я не думаю, что они независимы.   -  person kutschkem    schedule 13.08.2018
comment
@kutschkem Да, это можно рассматривать как проблему 2D-оптимизации. Не могли бы вы быть более конкретными, когда вы говорите выбрать комбинацию, где точность максимальна. Беру ли я максимальную усредненную точность? Если нет, то какой показатель вы рекомендуете мне использовать? Я согласен с тем фактом, что альфа может давать разные результаты в зависимости от количества функций и что эти две переменные (номер функции, альфа) не являются независимыми друг от друга. Я также подумал использовать подход большинства голосов в таблице результатов и выбрать ту альфу, которая наберет больше голосов. Вы считаете это разумным подходом? Спасибо.   -  person Davide Nardone    schedule 13.08.2018


Ответы (2)


Чао @DavideNardone

Что касается показателя эффективности, @kutschkem прав: если вы работаете над бинарной классификацией, и ваш метод создает матрицу путаницы, используйте коэффициент корреляции Мэтьюса (MCC) вместо точности, оценки F1 или другого ставки. Пожалуйста, ознакомьтесь с Советом 8 в моей статье по научным соображениям.

Что касается того, как выбрать лучшую конфигурацию для вашей модели, я думаю, что ваш подход большинства находится в правильном направлении. Я бы переформулировал это так:

  1. Голосование за лучшую конфигурацию (самый высокий коэффициент корреляции Мэтьюса MCC), когда количество функций варьируется, а затем
  2. Выбор конфигурации, которая имеет наибольшее количество голосов.

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

Кроме того, я думаю, что Stack Overflow — не лучшее место, где можно задавать вопросы о вычислительном интеллекте; Я бы посоветовал вам переместить/повторно задать этот вопрос на Cross Validated или на другом веб-сайты Stack Exchange.

Удачи!

person DavideChicco.it    schedule 09.02.2019
comment
К сожалению, случаи классификации, с которыми я имел дело, не являются бинарными. Однако, помимо меры точности, которую я могу использовать, я искал несколько советов по точной настройке параметров для выбора функций. В любом случае, спасибо за совет! - person Davide Nardone; 15.02.2019

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

Почему усредненная точность не является правильным показателем?

Усредненная точность подчеркивает самый большой класс или более чувствительна к нему. Однако часто это не самый интересный класс.

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

F1-Measure, похоже, подвергается критике за пределами задач поиска информации за предвзятость, аналогичную точности. Кажется, лучшим показателем является коэффициент корреляции Мэтьюса. Эта мера использует все ячейки матрицы путаницы и не подвержена тем же смещениям, что и две другие меры. У меня нет опыта работы с этой мерой, но, согласно статье в Википедии, Давиде Чикко рекомендует ее в своей статье "Десять советов по машинному обучению в вычислительной биологии".

person kutschkem    schedule 13.08.2018
comment
Ok. Я понимаю вашу озабоченность по поводу типа меры, которую следует принять, но, к сожалению, этот ответ не решает мою проблему. На самом деле мне нужна методология (независимо от типа измерения) для выбора правильной конфигурации путем настройки гиперпараметров при изменении количества функций. Я посоветовал поиск по сетке, потому что это хорошо известный метод, который можно адаптировать к моей проблеме. Что мне нужно, так это предварительная или последующая процедура, которая может указать мне наиболее справедливую/лучшую конфигурацию гиперпараметров для фиксированного количества функций (например, первые 10, 20, 50, 100 функций). - person Davide Nardone; 13.08.2018
comment
@DavideNardone Почему бы не сохранить лучшую конфигурацию для каждого количества функций и, в зависимости от того, какое количество вы используете в настоящее время, проверить, какую конфигурацию вам следует использовать? Должна ли это быть одна конфигурация, которую вы используете независимо от количества функций? - person kutschkem; 13.08.2018
comment
да. Идея, которую я уже реализовал, состоит из: 1. Голосование за лучшую конфигурацию (наибольшая точность) при изменении количества функций, а затем 2. Выбор конфигурации, набравшей наибольшее количество голосов (наибольшее число 1 подряд). Это подход также известен как подход большинства голосов. Мне было интересно (задавая этот вопрос), был ли в современном состоянии менее наивный подход... - person Davide Nardone; 13.08.2018