Введение
В этом лабе мы узнаем о Kernel Ridge Regression (KRR) и его реализации с использованием библиотеки scikit-learn в Python. KRR комбинирует регрессию с риджем с ядровым трюком для обучения линейной функции в пространстве, индуцированном ядром. Это метод нелинейной регрессии, который может обрабатывать нелинейные зависимости между входными и выходными переменными.
Советы по работе с ВМ
После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Импортируем библиотеки
Сначала импортируем необходимые библиотеки для этого лаб.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.kernel_ridge import KernelRidge
Генерируем синтетические данные
Далее сгенерируем некоторые синтетические данные для работы. Создадим синусоидальную целевую функцию и добавим к ней некоторый случайный шум.
## Generate input data
np.random.seed(0)
X = np.sort(5 * np.random.rand(100, 1), axis=0)
y = np.sin(X).ravel()
y += 0.5 * (0.5 - np.random.rand(y.size))
Обучаем модель Kernel Ridge Regression
Теперь обучим модель Kernel Ridge Regression на этих данных. Будем использовать ядро RBF (Radial Basis Function), которое часто используется для нелинейной регрессии.
## Fit Kernel Ridge Regression model
alpha = 1.0 ## Параметр регуляризации
gamma = 0.1 ## Коэффициент ядра для ядра RBF
krr = KernelRidge(alpha=alpha, kernel='rbf', gamma=gamma)
krr.fit(X, y)
Визуализируем предсказанную функцию
После того, как модель обучена, давайте визуализируем предсказанную функцию вместе с исходными точками данных.
## Generate test data points
X_test = np.linspace(0, 5, 100)[:, None]
## Predict the target values
y_pred = krr.predict(X_test)
## Visualize the data and the predicted function
plt.scatter(X, y, color='blue', label='Data')
plt.plot(X_test, y_pred, color='red', label='Predicted Function')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()
Оптимизируем гиперпараметры
В предыдущем шаге мы использовали значения гиперпараметров по умолчанию для alpha и gamma. Чтобы повысить производительность модели, мы можем оптимизировать эти гиперпараметры с использованием сеточного поиска.
from sklearn.model_selection import GridSearchCV
## Define the parameter grid
param_grid = {'alpha': [1e-3, 1e-2, 1e-1, 1, 10],
'gamma': [1e-3, 1e-2, 1e-1, 1, 10]}
## Perform grid search
grid_search = GridSearchCV(krr, param_grid, cv=5)
grid_search.fit(X, y)
## Get the best hyperparameters
best_alpha = grid_search.best_params_['alpha']
best_gamma = grid_search.best_params_['gamma']
best_krr = grid_search.best_estimator_
print("Best alpha:", best_alpha)
print("Best gamma:", best_gamma)
Визуализируем оптимизированную предсказанную функцию
Наконец, давайте визуализируем предсказанную функцию с использованием оптимизированных гиперпараметров.
## Predict the target values using the optimized model
y_pred_opt = best_krr.predict(X_test)
## Visualize the data and the optimized predicted function
plt.scatter(X, y, color='blue', label='Data')
plt.plot(X_test, y_pred_opt, color='green', label='Optimized Predicted Function')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()
Резюме
В этом практическом занятии мы изучили Kernel Ridge Regression (KRR) и методы ее реализации с использованием библиотеки scikit - learn в Python. Мы сгенерировали синтетические данные, обучили модель KRR на этих данных, визуализировали предсказанную функцию и оптимизировали гиперпараметры с использованием сеточного поиска. KRR - это мощный метод нелинейной регрессии, который может обрабатывать сложные зависимости между переменными.