Комментарии 23
Тут очень многое зависит от данных: их полноты, консистентности, содержащейся в них неопределенности и, конечно же, формы распределений.
Если данные идеальны, то для построения модели с 10 переменными, вам нужно ровно 10 точек данных.
Но в реальной жизни идеальные данные не встречаются. В них всегда есть неполнота и случайность.
Обычные бизнесовые данных зачастую происходят из экспоненциального семейства распределений (нормального, Пуассона, Бернулли, логистического и т.д.).
Для них можно использовать эмпирическое правило: N = C * p2,
где N — кол-во точек данных, p — размерность данных (кол-во признаков), С — константа, зависящая от имеющейся в данных неопределенности, по сути от модельной ошибки или степени невязки между параметрами и прогнозируемой переменной (обычное значение 3-10).
Так что если у вас 30 признаков, то желательно иметь не менее 3000 точек, а при 10 признаках — не менее 300.
А можно очень просто про L1 и L2 регуляризацию? Или хорошую сслылку.
Воронцов. Нелинейная регрессия, непараметрическая регрессия, нестандартные функции потерь
loss = cross_entry(predictions, y) + lamda * sqr(w)
Цель оптимизации — минимизировать функцию ошибки, и тут играет роль сами значения весов. Чем больше веса, тем больше ошибка.
L2 регулярузацию используют в случае если имеются нелинейные функции. В данном случае автору незачем использовать L2. Смысл приминения в том что при переобучении нелинейных функции значения весов сильно увеличиваются.
L1 регуляризация — тоже дополнительный критерии в функции ошибки. Только в данном случае добавляется ошибка не квадратичные значения а абсолютное значения весов, и «подталкивает» функции иметь меньше значения и меньше не нулевых значении. Тем самым вызывает разреженность в матрице весов.
loss = cross_entropy(predictions, y) + lambda * abs(w)
Не согласны/убеждены что я неверно описал? Можно вместе с минусом написать комментарии с чем не согласны…
Не стоит приписывать другим людям воображаемые вами намерения.
Комментарий по каким-то причинам попал на модерацию. Одобрил я его сразу после выходных как только добрался до компьютера.
И минус тоже не я поставил.
Минус я поставил, потому что, извините, лучше никакого объяснения, чем такое.
Формулы на питоне, в первой же 2 опечатки. L2-регуляризация — это добавление квадратов весов, а не корней (по-вашему норм, что производная в бесконечность уходит, если веса малы? как оптимизировать?)
"Смысл приминения в том что при переобучении нелинейных функции значения весов сильно увеличиваются." — тут я вообще не вкурил.
Вам тоже так объясняли основы машинного обучения?
В паскале была функция sqr(x) = x2
Как указал Роман, тут sqr — сокращенное от square. (sqrt — square root) Я предполагаю минус был именно за это…
Язык программирование тут не причем, я мог написать как сам пишу используя tensorflow в питоне:
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits, tf_train_labels))
# L2 regularization for fully connected layer
regularizers = (tf.nn.l2_loss(fc1_weights)
tf.nn.l2_loss(fc2_weights))
loss += 5e-4 * regularizers
Но решил использовать нечто вроде псевдо кода.
loss = cross_entry(predictions, y) + lamda * sqr(w)
В общем смысл не меняется, можно в функцию ошибки, например кросентропии (log likelihood) либо среднего квадратичного отклонения (mean squared error) добавить нужную нам критерии регуляризации.
«Смысл приминения в том что при переобучении нелинейных функции значения весов сильно увеличиваются.» — тут я вообще не вкурил.
Извините, что я пишу не ясно.
При переобучении сеть начинается подгонятся под обучаемую выборку. В этом процессе, значении весов будут увеличиваться, функция сети (hypothesis function) будет все более и более сложной. Например от линейной к квадратичным, до десятой степени и т.п.
График слева: черная линия — функция сети, жирные точки — обучаемая выборка, x — тестовая выборка.
Для решения данной проблемы, ограничивают область возможных значении для весов от начала координат (origin).
Надеюсь, выразился яснее.
Не знаете как ведет себя сеть при переобучении? Однако, data scientist-ы.
Для чего тогда тут сделаны дискусии, если уходите от нормального обсуждения.
Спасибо, что пояснили, что такое переобучение! :)
L2 регулярузацию используют в случае если имеются нелинейные функции
Что вы имеете в виду под нелинейностью? Полиномиальные признаки?
Если что, Ridge-регрессия — все еще линейная, и даже существующее у нее аналитическое решение линейно по ответам:
«Смысл приминения в том что при переобучении нелинейных функции значения весов сильно увеличиваются.» — тут я вообще не вкурил.
Спасибо, что пояснили, что такое переобучение!
В же не были согласны с тем что при одном из вариантов переобучения веса будут увеличиваться.
Что вы имеете в виду под нелинейностью?
Ridge-регрессия — все еще линейная, и даже существующее у нее аналитическое решение линейно по ответам
Стоит добавить — в случае Метода Наименьших Квадратов.
Для линейных обычно есть аналитическое решение. В случае МНК, только в отдельных случаях является приемлимым вариант с ridge-regression.
«In a Bayesian context, this is equivalent to placing a zero-mean normally distributed prior on the parameter vector.».
Будет перекос в решении на нормальное распределение (с центром 0) в значении веса, что очевидно так как мы добавили квадрат этого веса.
О L2 регуляризации линейной функции наглядно:
Имеется линеяная функция y=Ax + b.
Если добавить L2 регуляризацию, то в решении будет браться коэффицент с меньшим весом (чем среднее отклонение) так как мы добавили в ошибку квадратичное значение. В нашей формуле из многих значении A — перекос будет в сторону меньших значении. Что неверно в общем случае.
yorko: Ridge-регрессия — все еще линейная, и даже существующее у нее аналитическое решение линейно по ответам
erko: Стоит добавить — в случае Метода Наименьших Квадратов.
Для линейных обычно есть аналитическое решение. В случае МНК, только в отдельных случаях является приемлимым вариант с ridge-regression.
Вы бы хоть с первоисточниками ознакомились: Ridge-регрессия была впервые введена в 1970 году в работе "Ridge Regression: Biased Estimation for Nonorthogonal Problems".
И в ней оптимизируемый функционал определен как сумма квадратов ошибок и квадратов коэффициентов регрессии.
Иными словами (пусть и несколько некорректно), ridge-регрессия — это, по определению, линейная регрессия МНК с L2-регуляризацией.
Не вижу противоречии в своем утверждении. Да, излишнее было указывать МНК, но это не означает что в МНК в общем решении верно использвание ridge-регрессия.
В википедии: The standard approach is ordinary least squares linear regression. However, if no x satisfies the equation or more than one x does—that is the solution is not unique—the problem is said not to be well posed.
Вот в таком случае можно использовать ridge-regression.
В публикации: Biased Estimation for
Nonorthogonal Problems — само название говорит что решение будет пристрастным. Да в некоторых случаях вынуждены добавлять пристрастность, так как данные могут быть статистически не полными.
Иными словами (пусть и несколько некорректно) ..
Ну именно о данном утверждении yorko не согласен был.
Формулой: L1-регуляризация заключается в добавлении суммы модулей весов модели к оптимизируемому функционалу, а L2 — в добавлении суммы квадратов весов. Отличие вроде небольшое, но задача оптимизации сильно меняется.
На практике: регрессия с L1-регуляризацией (LASSO) часто используется для отбора признаков, поскольку в результате оптимизации некоторые веса становятся в точности нулевыми. Из набора признаков, сильно коррелирующих между собой, выберется только один.
L2-регуляризация (гребневая- или Ridge-регрессия) решает проблему мультиколлинеарности, которая в реальных данных есть почти всегда. Веса в модели не нулевые, и по качеству чаще Ridge работает лучше (в терминах функции потерь на кросс-валидации или отложенной выборке), чем Lasso, поскольку меньше ограничивает модель (в то время как Lasso явно зануляет коэффициенты перед некоторыми признаками).
В реальных задачах регуляризация нужна всегда, и если задача выбора признаков остро не стоит, лучше использовать L2. Если коротко, можно в документации Scikit-learn почитать или на Cross-Validated. А толково — в Hastie и Tibshirani.
А как контролировать переобучение, когда данных мало?
В классической постановке есть разные оценки обобщающей способности, и то VC-оценка, growth function и даже сложность Радемахера, как я понял, все еще сильно завышены в большинстве случаев.
На малых данных, получается, Computational Learning Theory нам не в помощь. На кросс-валидации мы тоже переобучимся, если много параметров будем перебирать. Возможно ли вообще какие-то гарантии давать в таком случае?
Проблема, как я вижу, особенно остра в случае медицинских данных.
Automatic Relevance Determination или машинное обучение когда данных очень мало