【问题标题】:How can anisotropic kernels for Gaussian process regression be used with a variable number of features?高斯过程回归的各向异性内核如何与可变数量的特征一起使用?
【发布时间】:2019-02-13 00:22:45
【问题描述】:

我的用例是,我想为高斯过程回归自动选择特征。对于各向同性内核,这很容易做到,如下例所示:

import numpy as np
from mlxtend.feature_selection import SequentialFeatureSelector
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF

X = np.random.rand(100, 10)
y = np.random.rand(100)

gpr = GaussianProcessRegressor(kernel=RBF(length_scale=[1]))
selector = SequentialFeatureSelector(gpr, forward=False)
selector.fit(X, y)

为了使用各向异性内核,必须将内核的定义更改为RBF(length_scale=[1] * num_features)

但是,每轮特征选择的特征数量都会发生变化,从而引发ValueError: Anisotropic kernel must have the same number of dimensions as data (10!=9)

有没有办法获得具有动态特征数量的各向异性内核?

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    作为一个肮脏的黑客,我对GaussianProcessRegressor 进行了子类化,并向fit 添加了一个函数,该函数递归地扫描所有内核,并用一个向量替换所有可能是各向异性的内核(目前只有RBF 和Matern)的length_scale 参数。

    class GaussianProcessRegressorAnisotropic(GaussianProcessRegressor):
        def fit(self, X, y):
            self._fix_kernel_length_scales(self.kernel, X.shape[1])
            super().fit(X, y)
    
        def _fix_kernel_length_scales(self, kernel, num_features):
            if isinstance(kernel, RBF) or isinstance(kernel, Matern):
                kernel.length_scale = [kernel.length_scale] * num_features
            elif isinstance(kernel, Product) or isinstance(kernel, Sum):
                self._fix_kernel_length_scales(kernel.k1, num_features)
                self._fix_kernel_length_scales(kernel.k2, num_features)
            elif isinstance(kernel, Exponentiation):
                self._fix_kernel_length_scales(kernel.kernel, num_features)
            elif isinstance(kernel, CompoundKernel):
                for sub_kernel in kernel.kernels:
                    self._fix_kernel_length_scales(sub_kernel, num_features)
    

    但也许有人有更好的解决方案?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-30
      • 2018-09-28
      • 2020-09-04
      • 2020-01-31
      • 2018-10-21
      • 2020-12-24
      • 2015-09-10
      • 2015-01-13
      相关资源
      最近更新 更多