我最近一直在研究高斯过程。概率多输出的观点在我的领域很有前景。特别是空间统计。但是我遇到了三个问题:
- 多输出
- 过拟合和
- 各向异性。
meuse
让我用数据集(来自 R 包sp
)运行一个简单的案例研究。
更新:用于这个问题的 Jupyter 笔记本,并根据Grr 的回答进行了更新,在这里。
import pandas as pd
import numpy as np
import matplotlib.pylab as plt
%matplotlib inline
meuse = pd.read_csv(filepath_or_buffer='https://gist.githubusercontent.com/essicolo/91a2666f7c5972a91bca763daecdc5ff/raw/056bda04114d55b793469b2ab0097ec01a6d66c6/meuse.csv', sep=',')
例如,我们将重点关注铜和铅。
fig = plt.figure(figsize=(12,8))
ax1 = fig.add_subplot(121, aspect=1)
ax1.set_title('Lead')
ax1.scatter(x=meuse.x, y=meuse.y, s=meuse.lead, alpha=0.5, color='grey')
ax2 = fig.add_subplot(122, aspect=1)
ax2.set_title('Copper')
ax2.scatter(x=meuse.x, y=meuse.y, s=meuse.copper, alpha=0.5, color='orange')
事实上,铜和铅的浓度是相关的。
plt.plot(meuse['lead'], meuse['copper'], '.')
plt.xlabel('Lead')
plt.ylabel('Copper')
因此这是一个多输出问题。
from sklearn.gaussian_process.kernels import RBF
from sklearn.gaussian_process import GaussianProcessRegressor as GPR
reg = GPR(kernel=RBF())
reg.fit(X=meuse[['x', 'y']], y=meuse[['lead', 'copper']])
predicted = reg.predict(meuse[['x', 'y']])
第一个问题:当 y 具有多个维度时,内核是为相关多输出构建的吗?如果没有,我该如何指定内核?
我继续分析以显示第二个问题,过度拟合:
fig = plt.figure(figsize=(12,4))
ax1 = fig.add_subplot(121)
ax1.set_title('Lead')
ax1.set_xlabel('Measured')
ax1.set_ylabel('Predicted')
ax1.plot(meuse.lead, predicted[:,0], '.')
ax2 = fig.add_subplot(122)
ax2.set_title('Copper')
ax2.set_xlabel('Measured')
ax2.set_ylabel('Predicted')
ax2.plot(meuse.copper, predicted[:,1], '.')
我创建了一个 x 和 y 坐标网格,该网格上的所有浓度都被预测为零。
最后,在土壤 3D 中特别出现的最后一个问题是:我如何在此类模型中指定各向异性?