核岭回归

Machine LearningMachine LearningBeginner
立即练习

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

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

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

虚拟机使用提示

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

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/kernel_ridge("Kernel Ridge Regression") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/model_selection -.-> lab-71096{{"核岭回归"}} sklearn/kernel_ridge -.-> lab-71096{{"核岭回归"}} ml/sklearn -.-> lab-71096{{"核岭回归"}} end

导入库

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

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 是一种强大的非线性回归方法,能够处理变量之间的复杂关系。