В этом проекте я использую модель лассо:
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 элемент»
Вы получаете эту ошибку, потому что 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
см. редактировать. вы просто добавляете его как еще один столбец вместо индекса
ааа вижу спасибо!
Да, это работает!! Спасибо чувак! Быстрый вопрос, как бы я назвал первый столбец «меткой». Итак, у меня есть столбцы «метка» и «коэф».