10、核岭回归与高斯过程回归的比较

10、核岭回归与高斯过程回归的比较

import time

import numpy as np

import matplotlib.pyplot as plt

from sklearn.kernel_ridge import KernelRidge

from sklearn.model_selection import GridSearchCV

from sklearn.gaussian_process import GaussianProcessRegressor

from sklearn.gaussian_process.kernels import WhiteKernel, ExpSineSquared

plt.rcParams['font.sans-serif'] = ['SimHei']

plt.rcParams['axes.unicode_minus'] = False

rng = np.random.RandomState(0)

# 生成样本数据

X = 15 * rng.rand(100, 1)

y = np.sin(X).ravel()

y += 3 * (0.5 - rng.rand(X.shape[0]))  # 添加噪声

# 基于五重交叉验证的参数选择拟合KernelRidge

param_grid = {"alpha": [1e0, 1e-1, 1e-2, 1e-3],

              "kernel": [ExpSineSquared(l, p)

                        for l in np.logspace(-2, 2, 10)

                        for p in np.logspace(0, 2, 10)]}

kr = GridSearchCV(KernelRidge(), param_grid=param_grid)

stime = time.time()

kr.fit(X, y)

print("Time for KRR fitting: %.3f" % (time.time() - stime))

gp_kernel = ExpSineSquared(1.0, 5.0, periodicity_bounds=(1e-2, 1e1)) \

    + WhiteKernel(1e-1)

gpr = GaussianProcessRegressor(kernel=gp_kernel)

stime = time.time()

gpr.fit(X, y)

print("Time for GPR fitting: %.3f" % (time.time() - stime))

# 利用核脊进行预测

X_plot = np.linspace(0, 20, 10000)[:, None]

stime = time.time()

y_kr = kr.predict(X_plot)

print("Time for KRR prediction: %.3f" % (time.time() - stime))

# 用高斯过程回归进行预测

stime = time.time()

y_gpr = gpr.predict(X_plot, return_std=False)

print("Time for GPR prediction: %.3f" % (time.time() - stime))

stime = time.time()

y_gpr, y_std = gpr.predict(X_plot, return_std=True)

print("Time for GPR prediction with standard-deviation: %.3f"

      % (time.time() - stime))

# 绘图结果

plt.figure(figsize=(10, 5))

lw = 2

plt.scatter(X, y, c='k', label='data')

plt.plot(X_plot, np.sin(X_plot), color='navy', lw=lw, label='True')

plt.plot(X_plot, y_kr, color='turquoise', lw=lw,

        label='KRR (%s)' % kr.best_params_)

plt.plot(X_plot, y_gpr, color='darkorange', lw=lw,

        label='GPR (%s)' % gpr.kernel_)

plt.fill_between(X_plot[:, 0], y_gpr - y_std, y_gpr + y_std, color='darkorange',

                alpha=0.2)

plt.xlabel('data')

plt.ylabel('target')

plt.xlim(0, 20)

plt.ylim(-4, 4)

plt.title('核岭回归与高斯过程回归的比较')

plt.legend(loc="best",  scatterpoints=1, prop={'size': 8})

plt.show()


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容