Вернуть перехват из sklearn enet_path
При использовании таких функций, как sklearn.linear_model.lasso_path, если return_models имеет значение False, возвращаемые значения - это альфа и коэффициенты. Тем не менее, перехваты для пути НЕ возвращаются, что означает, что коэффициенты не могут быть применены для прогнозирования новых данных. В качестве альтернативы можно попросить вернуть модели, но похоже, что возвращающиеся модели будут устаревшими в ближайшее время из-за предупреждения, которое я получил:
"DeprecationWarning: используйте enet_path(return_models=False), так как он возвращает коэффициенты и альфа-значения, а не просто список моделей, как ранее lasso_path
/enet_path
сделал. return_models
в конечном итоге будет удален в 0,15, после чего возвращение альф и коф станет нормой ".
Итак, как можно получить полный путь, включающий коэффициенты, альфы и перехваты?
Спасибо
2 ответа
Добавление нового столбца из 1 к X будет наказывать новый столбец, однако термин перехвата обычно не наказывается в лассо. я пришел к выводу, чтоsklearn.linear_model.lasso_path
предполагает, что переменная ответа центрирована в следующем примере:
remove_shift = True
df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
columns=['a', 'b', 'c'])
train_x = df.iloc[:,:-1]
train_y = df.iloc[:,-1]
if remove_shift:
y_shift = train_y.mean()
train_y -= y_shift
# Provide a single alpha value (0.5) for the path
print("Lasso path solution:")
_, coefs_lasso, _ = lasso_path(train_x, train_y, alphas=[.5])
print("Coefficients:", coefs_lasso)
print("Lasso solution:")
my_model = Lasso(max_iter=1000, alpha = .5, fit_intercept = False).fit(train_x, train_y)
print("Model coefs:", my_model.coef_)
print("Intercept:",my_model.intercept_)
Это также требует использования Lasso сfit_intercept = False
. Таким образом, центрирование переменной ответа перед вызовомlasso_path
достаточно имхо.
Быстрый взлом состоит в том, чтобы добавить вашу матрицу X с новым столбцом 1 с. Перехват тогда просто становится одним из коэффициентов.