Выбор функции машинного обучения RFECV занимает слишком много времени на Python - PullRequest
0 голосов
/ 11 ноября 2019

Я относительно новичок в SKLearn и у меня есть вопрос по выбору функций.

Я пытаюсь построить модель SVM, в моих данных содержится около 30 объектов со всеми примерно 10 тыс. Точек данных, и яв настоящее время пытаюсь устранить как можно больше бесполезных функций. Сначала я удалил функции, которые тесно связаны с другими функциями, и теперь хочу использовать RFECV для оптимизации остальных.

Для начала я нашел этот код на веб-сайте sklearn, у меня есть пара проблемс этим и задавался вопросом, может ли кто-нибудь помочь.

X = df.drop(['label'], axis=1)
y = df['label']

rfe = RFECV(SVR(kernel='linear'), step=1, scoring='accuracy')
rfe.fit(X, y)
print(rfe.ranking_)

Во-первых, если я запускаю этот процесс таким, какой он есть, он запускается вечно, я оставляю его целую вечность, и на самом деле мне пока не удалось его завершить. Однако, если я удаляю kernel='linear', он запускается достаточно быстро, но затем выдает сообщение об ошибке, которое появляется из rfe.fit(X, y):

RuntimeError: The classifier does not expose "coef_" or "feature_importances_" attributes

Я сократил свои функциипримерно до 10, просто чтобы посмотреть, смогу ли я ускорить процесс в качестве теста, а также поиграться с переменной step, но с переменной kernel='linear' там, кажется, ничто не поможет ускорить его, он просто работаетчасами ничего не делая. Все, что я хочу, это список функций, которые можно использовать с помощью метода RFECV. У кого-нибудь есть предложения по поводу того, что я делаю неправильно или что я могу сделать, чтобы ускорить процесс?

Большое спасибо

1 Ответ

2 голосов
/ 11 ноября 2019
  1. Причина, по которой он быстро запускается при удалении "kernel = 'linear'", заключается в том, что он быстро выходит из строя.
  2. Только SVR (kernel = 'linear') возвращает значение coef_, которое можно использоватьпо RFECV. Если вы используете любое другое ядро, coef_ не возвращается, поэтому RFECV не может работать с ним.
  3. Установив «step = 1», вы заставляете RFECV (SVR (kernel = 'linear'), step = 1, оценка = 'точность') для подгонки по всем n объектам, за исключением одного с наименьшим коэффициентом, повторного подбора для n-1 объектов, исключения из него с наименьшим коэффициентом и т. д. Это отнимает много времени.

Попробуйте ускорить процесс:

RFECV(SVR(kernel='linear'), step=5, scoring='accuracy', min_features_to_select = 10)

Это должно быть значительно быстрее. Настройте «step» и «min_features_to_select» в соответствии со своими потребностями.

...