help me with python code. I Wrote code for data analysis but i don't know how to use specific variables in data when i fit model. I want to fit model only for bmi, bp, s3, s4, s5, s6
There is my code:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split

# Загрузка датасета
diabetes = load_diabetes()
X = diabetes.data
y = diabetes.target
feature_names = diabetes.feature_names

df = pd.DataFrame(X, columns=feature_names)
df['target'] = y

#обучающая+валидационная (80%) и тестовая (20%)
X_train_dev, X_test, y_train_dev, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

#обучающая (60%) и валидационная (20%) выборки
X_train, X_dev, y_train, y_dev = train_test_split(
    X_train_dev, y_train_dev, test_size=0.25, random_state=42
)

print(f'Размер обучающей выборки: {X_train.shape[0]} образцов')
print(f'Размер дев выборки: {X_dev.shape[0]} образцов')
print(f'Размер тестовой выборки: {X_test.shape[0]} образцов')

from sklearn.neighbors import KNeighborsRegressor
from sklearn.metrics import mean_squared_error, r2_score

# Инициализация модели k-ближайших соседей
knn_model = KNeighborsRegressor(n_neighbors=5)

# Обучение модели на обучающей выборке
knn_model.fit(X_train, y_train)

# Предсказание на тестовой выборке
y_pred_test = knn_model.predict(X_test)

# Оценка модели на тестовой выборке
mse_test = mean_squared_error(y_test, y_pred_test)
r2_test = r2_score(y_test, y_pred_test)

print("\nРезультаты на тестовой выборке:")
print(f"Среднеквадратичная ошибка (MSE): {mse_test:.2f}")
print(f"Корень из среднеквадратичной ошибки (RMSE): {np.sqrt(mse_test):.2f}")
print(f"Коэффициент детерминации (R^2): {r2_test:.2f}")

from sklearn.linear_model import LinearRegression, Ridge, Lasso
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import GridSearchCV
from sklearn.preprocessing import StandardScaler


# Стандартизация признаков
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_dev = scaler.transform(X_dev)
X_test = scaler.transform(X_test)

# Создадим словарь моделей для перебора
linear_models = {
    'LinearRegression': LinearRegression(),
    'Ridge': Ridge(),
    'Lasso': Lasso()
}

# Оценим каждую модель на валидационной выборке
for name, model in linear_models.items():
    # Обучаем модель на обучающей выборке
    model.fit(X_train , y_train)
    # Предсказание на валидационной выборке
    y_pred_dev = model.predict(X_dev)
    # Оценка модели
    mse_dev = mean_squared_error(y_dev, y_pred_dev)
    r2_dev = r2_score(y_dev, y_pred_dev)
    print(f"\nМодель: {name}")
    print(f"Среднеквадратичная ошибка на валидационной выборке (MSE): {mse_dev:.2f}")
    print(f"Коэффициент детерминации на валидационной выборке (R^2): {r2_dev:.2f}")

# Настройка гиперпараметра alpha для Ridge
ridge_params = {'alpha': np.logspace(-3, 3, 7)}
ridge_grid = GridSearchCV(Ridge(), ridge_params, cv=5, scoring='r2')
ridge_grid.fit(X_train, y_train)

# Лучший параметр alpha
best_alpha = ridge_grid.best_params_['alpha']
print(f"\nЛучшее значение alpha для Ridge: {best_alpha}")

# Оценка модели с лучшим alpha на валидационной выборке
ridge_best = Ridge(alpha=best_alpha)
ridge_best.fit(X_train, y_train)
y_pred_dev = ridge_best.predict(X_dev)
mse_dev = mean_squared_error(y_dev, y_pred_dev)
r2_dev = r2_score(y_dev, y_pred_dev)
print(f"Среднеквадратичная ошибка на валидационной выборке с лучшим alpha (MSE): {mse_dev:.2f}")
print(f"Коэффициент детерминации на валидационной выборке с лучшим alpha (R^2): {r2_dev:.2f}")

X_train_dev_scaled = np.vstack((X_train, X_dev))
y_train_dev = np.hstack((y_train, y_dev))

# Финальное обучение модели Ridge с лучшим alpha
ridge_final = Ridge(alpha=best_alpha)
ridge_final.fit(X_train_dev_scaled, y_train_dev)

# Оценка на тестовой выборке
y_pred_test = ridge_final.predict(X_test)
mse_test = mean_squared_error(y_test, y_pred_test)
r2_test = r2_score(y_test, y_pred_test)
print(f"\nРезультаты Ridge на тестовой выборке:")
print(f"Среднеквадратичная ошибка (MSE): {mse_test:.2f}")
print(f"Коэффициент детерминации (R^2): {r2_test:.2f}")

# Зададим сетку параметров для GridSearchCV
tree_params = {
    'max_depth': [None, 2, 4, 6, 8, 10],
    'min_samples_leaf': [1, 2, 5, 10]
}

tree_grid = GridSearchCV(DecisionTreeRegressor(random_state=42), tree_params, cv=5, scoring='r2')
tree_grid.fit(X_train, y_train)

# Лучшие параметры
best_params_tree = tree_grid.best_params_
print(f"\nЛучшие параметры для DecisionTreeRegressor: {best_params_tree}")

# Оценка модели с лучшими параметрами на валидационной выборке
tree_best = DecisionTreeRegressor(**best_params_tree, random_state=42)
tree_best.fit(X_train, y_train)
y_pred_dev = tree_best.predict(X_dev)
mse_dev = mean_squared_error(y_dev, y_pred_dev)
r2_dev = r2_score(y_dev, y_pred_dev)
print(f"Среднеквадратичная ошибка на валидационной выборке (MSE): {mse_dev:.2f}")
print(f"Коэффициент детерминации на валидационной выборке (R^2): {r2_dev:.2f}")

tree_final = DecisionTreeRegressor(**best_params_tree, random_state=42)
tree_final.fit(X_train_dev_scaled, y_train_dev)

# Оценка на тестовой выборке
y_pred_test = tree_final.predict(X_test)
mse_test = mean_squared_error(y_test, y_pred_test)
r2_test = r2_score(y_test, y_pred_test)
print(f"\nРезультаты DecisionTreeRegressor на тестовой выборке:")
print(f"Среднеквадратичная ошибка (MSE): {mse_test:.2f}")
print(f"Коэффициент детерминации (R^2): {r2_test:.2f}")

# Зададим сетку параметров для GridSearchCV
rf_params = {
    'n_estimators': [50, 100, 200],
    'max_depth': [None, 4, 6, 8],
    'min_samples_leaf': [1, 2, 4]
}

rf_grid = GridSearchCV(RandomForestRegressor(random_state=42), rf_params, cv=5, scoring='r2', n_jobs=-1)
rf_grid.fit(X_train, y_train)

# Лучшие параметры
best_params_rf = rf_grid.best_params_
print(f"\nЛучшие параметры для RandomForestRegressor: {best_params_rf}")

# Оценка модели с лучшими параметрами на валидационной выборке
rf_best = RandomForestRegressor(**best_params_rf, random_state=42)
rf_best.fit(X_train, y_train)
y_pred_dev = rf_best.predict(X_dev)
mse_dev = mean_squared_error(y_dev, y_pred_dev)
r2_dev = r2_score(y_dev, y_pred_dev)
print(f"Среднеквадратичная ошибка на валидационной выборке (MSE): {mse_dev:.2f}")
print(f"Коэффициент детерминации на валидационной выборке (R^2): {r2_dev:.2f}")

rf_final = RandomForestRegressor(**best_params_rf, random_state=42)
rf_final.fit(X_train_dev_scaled, y_train_dev)

# Оценка на тестовой выборке
y_pred_test = rf_final.predict(X_test)
mse_test = mean_squared_error(y_test, y_pred_test)
r2_test = r2_score(y_test, y_pred_test)
print(f"\nРезультаты RandomForestRegressor на тестовой выборке:")
print(f"Среднеквадратичная ошибка (MSE): {mse_test:.2f}")
print(f"Коэффициент детерминации (R^2): {r2_test:.2f}")