Создание DF внутри модели лассо

В этом проекте я использую модель лассо:

def build_and_fit_lasso_model(X, y):
    """Creates and returns a LASSO model that is fitted to the values of the
    given predictor and target X, and y.
    """
    model = LassoLarsCV(cv=10, precompute = False)  
    model = model.fit(X_train.values, y_train.values)
    return model

lasso_model = build_and_fit_lasso_model(X_train, y_train)
lasso_model

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

def get_coefficients(model, X):
    """Returns a DataFrame containing the columns `label` and `coeff` which are
    the coefficients by column name.
    """
    predictors_model = pd.DataFrame(filtered_data)#filtered_data is the name of the df used in the model
    predictors_model.columns = ['label']
    predictors_model['coeff'] =  model.coef_ 
    return predictors_model

Когда я запускаю этот код:

coefficients = get_coefficients(lasso_model, X)

Я получаю сообщение об ошибке «ValueError: Несоответствие длины: ожидаемая ось имеет 19 элементов, новые значения имеют 1 элемент»

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
211
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы получаете эту ошибку, потому что 1. в коде X указано, но не используется, и 2. размеры неверны, вы указываете data.frame, длина которого равна вашим входным данным. Допустим, ваши данные такие:

from sklearn.linear_model import LassoLarsCV
def build_and_fit_lasso_model(X, y):

    model = LassoLarsCV(cv=10, precompute = False)  
    model = model.fit(X_train.values, y_train.values)
    return model

df = pd.DataFrame(np.random.normal(0,1,(50,5)),columns=['x1','x2','x3','x4','x5'])
df['y']  = np.random.normal(0,1,50)

X_train = df[['x1','x2','x3','x4','x5']]
y_train = df['y']
lasso_model = build_and_fit_lasso_model(X_train, y_train)

Быстрый способ — поместить коэффициенты в data.frame и добавить имена в качестве другого столбца:

def get_coefficients(model,X):

    predictors_model = pd.DataFrame({'label':X.columns,'coeff':model.coef_})
    return predictors_model

get_coefficients(lasso_model,X_train)

    label   coeff
0   x1  0.0
1   x2  0.0
2   x3  0.0
3   x4  0.0
4   x5  0.0

Да, это работает!! Спасибо чувак! Быстрый вопрос, как бы я назвал первый столбец «меткой». Итак, у меня есть столбцы «метка» и «коэф».

Tenoch 12.12.2020 02:11

см. редактировать. вы просто добавляете его как еще один столбец вместо индекса

StupidWolf 12.12.2020 02:16

ааа вижу спасибо!

Tenoch 12.12.2020 03:51

Другие вопросы по теме

Похожие вопросы