2015-12-10 3 views
1

Я пытаюсь сделать выбор функции с помощью библиотеки scikit-learn. Мои данные просты. Строки - это образцы, а столбцы - это функции. Хотя этикетка оригинала Класс Х и Y, я изменил их числовое для линейной регрессии, X 0 и Y в 1.Выбор функции с использованием LinearRegression()

G1 G2 G3 ... Gn Class 
1.0 4.0 5.0 ... 1.0 0 
4.0 5.0 9.0 ... 1.0 0 
9.0 6.0 3.0 ... 2.0 1 
... 

Я использовал библиотеку sklearn.linear_model.LinearRegression(), и она была выполнена хорошо. Теперь я использую значение coef_ для выбора функции. В этом случае у меня есть 2 вопроса.

Можно ли использовать значение coef_ для функций? Или есть некоторые другие лучшие параметры для выбора функции в LinearRegression()?

Кроме того, существует ли какое-то правило для определения правильного порога (например, минимальное значение coef_ для выбора функции)?

+0

вы можете захотеть google 'lasso' :) – cel

+0

@cel Как я знаю, lasso - это модель, использующая штраф L1. Однако, хотя я использую lasso, будет такая же проблема при определении правильного порога. Я могу выбрать функции ранжирования Top-N, но я хочу найти некоторую границу (определенное значение) для принятия решения. – z991

+2

Преимущество штрафа L1 заключается в том, что он предпочитает 0-значные коэффициенты. Он выполняет выбор функции для вас, устанавливая коэффициент несущественных функций на 0. Вам просто нужно установить параметр регуляризации достаточно высоким, пока не удовлетворитесь номером функции против компрометации точности. Тогда вам не понадобится ни одного порога, так как коэффициент уже равен 0. –

ответ

4

Простое решение по значению коэффициента явно нелогично. Это связано с тем, что, если вы не нормализуете данные, коэффициент не указывает ничего.

Для примера: предположим, что один из признаков варьируется от (0,1), а его коэффициент равен 0,5, а другой - от (0,10000), а его коэффициент равен 0,5. Очевидно, что вес более поздней функции намного больше из-за большего диапазона в генерации конечного результата.

Итак, как правило, рекомендуется нормализовать функции. i.e $ x '= \ frac {x-mean (x)} {std (x)} $. а затем решить, исходя из значения коэффициентов.

Примечание: Чтобы предсказать, не забудьте преобразовать функции.

Это может не всегда работать, так как нормализация может искажать функции. Существуют и другие эвристики. Вы можете прочитать их в другом месте.

Другой способ - устранить, устранить особенности по одному и посмотреть, насколько они важны. Это можно сделать, проверив p-значение в случае регрессии или просто ошибку соответствия (сумма квадратов).

Предложение: Похоже, вы используете линейную регрессию для проблемы классификации, что опять-таки принципиально неверно, поскольку линейная регрессия предполагает, что выход y является непрерывным, где здесь y равно 0 или 1. Вместо этого вы можете использовать логическую регрессию.

+0

Спасибо вам большое! Потому что я не думал о нормализации, я был в борьбе. Ваш совет очень полезен, и я могу многому научиться у вас. Я хочу задать еще один вопрос, если вы не возражаете. Могу ли я использовать регрессию Lasso или Ridge для выбора функции, хотя метка равна 0 и 1? Хотя я могу обрабатываться как двоичное значение, но, похоже, это неправильно. – z991

+1

Это зависит от того, чего вы хотите. Лассо не наказывает большое значение веса. Следовательно, вы можете получить некоторые нули и некоторые очень большие значения. Регрессия хребта наказывает большие веса, и, следовательно, вы получите множество весов, близких к нулю. Таким образом, это зависит от проб и ошибок и данных, которые у вас есть. Если вы ожидаете очень мало ненулевых весов, попробуйте лассо. –

+0

Еще раз спасибо за ваше объяснение. – z991

Смежные вопросы