Здравствуйте. В коде ошибка в строке grid_search.fit (X_train.values, y_train.values) Код написан на пайтон. Заранее огромное спасибо просто не понимаю. Вот весь код. import pandas as pd #Импорт библиотеки Pandas - для работы с датафреймами
import numpy as np #Импорт библиотеки NumPy - для работы с массивами

import matplotlib.pyplot as plt #Для работы с графиками


#Импорт модели обучения

from sklearn.linear_model import Ridge


#Импорт класса для решетчатого поиска с перекрестной валидацией

#И функции для разделения данных на наборы

from sklearn.model_selection import GridSearchCV,train_test_split


#Загружаем файл как объект DataFrame с помощью библиотеки Pandas

df = pd.read_csv("/content/DRUGS_exam_classification.csv", sep = ',',

index_col ='ChEMBL ID')

#Выбираем из них только те, что подходят под условия

filt=df.loc[(df['Heavy Atoms']>=12) & (df['Heavy Atoms']<=25)]

#Задаем целевое поле

y = df_filt['Molecular Species']

#Задаем поля дескрипторов

X = df_filt[['Molecular Weight','AlogP','Polar Surface Area','QED Weighted','CX LogP','CX LogD','Heavy Atoms']]

#Делим данные на обучающий и тестовый наборы

X_train, X_test, y_train, y_test = train_test_split(X,y,random_state=42)


#Задаем варьирующийся параметр модели 'alpha'

param_grid = {'alpha': [0.01,0.1,1,10]}

#Настраиваем параметры поиска - саму модель, число блоков валидации - 10

#И указываем метрику R^2

grid_search = GridSearchCV(Ridge(random_state=42),param_grid,

cv=10, scoring='roc_auc')

#Обучаем модели на подготовленном тренировочном наборе

grid_search.fit (X_train.values, y_train.values)

#Оцениваем лучшую модель (она автоматически сохраняется в grid_search)

score = grid_search.score(X_test.values,y_test.values)

print(f'Параметры лучшей модели: {grid_search.best_params_}')

print(f'R^2 модели при кросс-валидации - {round(grid_search.best_score_,6)}')

print(f'R^2 модели на тестовом наборе - {round(score,6)}')


#Создаем список для значений коэффициентов при разных alpha

coefs=[]

#И список значений alpha

alphas=[0.01,0.1,1,10]

#Рассчитываем модель при разных альфа

for i in alphas:

ridge = Ridge(alpha=i)

ridge.fit(X_train.values, y_train.values)

#Заносим значения коэффициентов в список

coefs.append(ridge.coef_)

#Создаем область рисования

fig = plt.figure(figsize=[10,10])

#Для каждого из 6 дескрипторов

for i in range(1,7):

#Создаем subplot

fig.add_subplot(2,3,i)

#И строим значения коэффициента для каждого alpha

plt.plot(alphas,[coefs[0][i-1],coefs[1][i-1],coefs[2][i-1],coefs[3][i-1]])

#Подписываем оси и название

plt.xlabel('alpha')

plt.xscale('log')

plt.ylabel('Весовой коэффициент параметра')

plt.title(X.keys()[i-1])

#Делаем красиво

plt.tight_layout()


#Вводим дескрипторы молекулы для поиска

x_unknown = np.array([[280.45,63.22,0.12,1.45,1.28,19]])

#Используем метод predict для классификации молекулы

result=grid_search.predict(x_unknown)

print(f'AlogP целевой молекулы равен {round(result[0],3)}')

Ответы

Ответ дал: forellka
0
Здравствуйте!

Ошибка в строке grid_search.fit(X_train.values, y_train.values) может возникнуть, если X_train и y_train имеют разный размер. Пожалуйста, проверьте размеры X_train и y_train с помощью print(X_train.shape) и print(y_train.shape). Если их размеры отличаются, убедитесь, что данные в df_filt были правильно отфильтрованы, чтобы они соответствовали тому, что ожидается.

Если размеры X_train и y_train одинаковы, то попробуйте использовать X_train и y_train напрямую, без использования .values, например, grid_search.fit(X_train, y_train).

Если ошибка не исчезает, пожалуйста, уточните ее текст, чтобы я мог помочь вам более точно.

savcukana5: gpt тащит
Аноним: Спасибо за ваш ответ. Проверил X_train и t_traun
Аноним: Спасибо за ответ. X_train и y_train имеют разные размеры. Как это можно исправить?
Ответ дал: savcukana5
0

Проблема в том, что в строке y = df_filt['Molecular Species'] использовано неправильное имя переменной filt, которая была определена на предыдущей строке. Исправьте ее на y = filt['Molecular Species'] и попробуйте снова.

Также, если вы получите другие ошибки, попробуйте установить необходимые библиотеки (например, scikit-learn) и убедитесь, что все импортированные библиотеки доступны.


Аноним: Здравствуйте. Не помогло.
savcukana5: а если сменить grid_search.fit (X_train.values, y_train.values) на grid_search.fit(X_train.values, y_train.values) таким образом, чтобы использовался правильный датафрейм X_train.
ты использовал фильтрованный датафрейм filt, но вместо него передал в модель исходный датафрейм df
Вас заинтересует