Регресс Лассо: функция непрерывного тяжелого шага - PullRequest
0 голосов
/ 31 мая 2019

Из многих документов я узнал рецепт регрессии Риджа:

loss_Ridge = loss_function + lambda x L2 norm of slope

и рецепт регрессии Лассо:

loss_Lasso = loss_function + lambda x L1 norm of slope

Когда я прочитал тему «Реализация регрессии Лассо и Риджа» в « TensorFlow Machine Learning Cookbook », ее автор объяснил, что:

"... мы будем использовать непрерывное приближение к функции шага, называемой функция непрерывного тяжелого шага ... "

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

Ответы [ 2 ]

1 голос
/ 31 мая 2019

По предоставленной вами ссылке,

if regression_type == 'LASSO':
    # Declare Lasso loss function
    # Lasso Loss = L2_Loss + heavyside_step,
    # Where heavyside_step ~ 0 if A < constant, otherwise ~ 99
    lasso_param = tf.constant(0.9)
    heavyside_step = tf.truediv(1., tf.add(1., tf.exp(tf.multiply(-50., tf.subtract(A, lasso_param)))))
    regularization_param = tf.multiply(heavyside_step, 99.)
loss = tf.add(tf.reduce_mean(tf.square(y_target - model_output)), regularization_param)

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

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

Чтобы получить интуицию о прочтении ограниченного раздела формулировки 1.6 в https://www.cs.ubc.ca/~schmidtm/Documents/2005_Notes_Lasso.pdf

Вы можете видеть, что в вашем коде, если A <0,9, то регуляризация_парам исчезает, поэтому оптимизация ограничит A в этом диапазоне. </p>

0 голосов
/ 31 мая 2019

Если вы хотите нормализовать функции с помощью регрессии Лассо, у вас есть один пример:

from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import Lasso
estimator = Lasso()
featureSelection = SelectFromModel(estimator)
featureSelection.fit(features_vector, target)
selectedFeatures = featureSelection.transform(features_vector)
print(selectedFeatures)
...