简介
在本实验中,我们将学习核岭回归(Kernel Ridge Regression,KRR)及其在 Python 中使用 scikit-learn 库的实现。KRR 将岭回归与核技巧相结合,以在核诱导的空间中学习线性函数。它是一种非线性回归方法,可以处理输入和输出变量之间的非线性关系。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。
导入库
首先,让我们导入本实验所需的库。
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 是一种强大的非线性回归方法,能够处理变量之间的复杂关系。