核岭回归

Beginner

This tutorial is from open-source community. Access the source code

简介

在本实验中,我们将学习核岭回归(Kernel Ridge Regression,KRR)及其在 Python 中使用 scikit-learn 库的实现。KRR 将岭回归与核技巧相结合,以在核诱导的空间中学习线性函数。它是一种非线性回归方法,可以处理输入和输出变量之间的非线性关系。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 90%。获得了学习者 91% 的好评率。

导入库

首先,让我们导入本实验所需的库。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.kernel_ridge import KernelRidge

生成合成数据

接下来,让我们生成一些用于实验的合成数据。我们将创建一个正弦目标函数,并给它添加一些随机噪声。

## 生成输入数据
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))

拟合核岭回归模型

现在,让我们将核岭回归模型拟合到数据上。我们将使用径向基函数(RBF)核,它常用于非线性回归。

## 拟合核岭回归模型
alpha = 1.0  ## 正则化参数
gamma = 0.1  ## RBF 核的核系数
krr = KernelRidge(alpha=alpha, kernel='rbf', gamma=gamma)
krr.fit(X, y)

可视化预测函数

模型训练完成后,让我们将预测函数与原始数据点一起可视化。

## 生成测试数据点
X_test = np.linspace(0, 5, 100)[:, None]

## 预测目标值
y_pred = krr.predict(X_test)

## 可视化数据和预测函数
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

## 定义参数网格
param_grid = {'alpha': [1e-3, 1e-2, 1e-1, 1, 10],
              'gamma': [1e-3, 1e-2, 1e-1, 1, 10]}

## 执行网格搜索
grid_search = GridSearchCV(krr, param_grid, cv=5)
grid_search.fit(X, y)

## 获取最佳超参数
best_alpha = grid_search.best_params_['alpha']
best_gamma = grid_search.best_params_['gamma']
best_krr = grid_search.best_estimator_

print("最佳 alpha:", best_alpha)
print("最佳 gamma:", best_gamma)

可视化优化后的预测函数

最后,让我们使用优化后的超参数来可视化预测函数。

## 使用优化后的模型预测目标值
y_pred_opt = best_krr.predict(X_test)

## 可视化数据和优化后的预测函数
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()

总结

在本实验中,我们学习了核岭回归(KRR)以及如何使用 Python 中的 scikit-learn 库来实现它。我们生成了合成数据,将 KRR 模型拟合到数据上,可视化了预测函数,并使用网格搜索优化了超参数。KRR 是一种强大的非线性回归方法,能够处理变量之间的复杂关系。