Пользовательское ядро ​​в sklearn, гауссовское ядро ​​со степенью - PullRequest
0 голосов
/ 17 апреля 2020

Я хочу использовать регрессию гребня ядра в sklearn с гауссовым возведенным в степень ядром. Который имеет форму K(x, y) = e^{-\gamma ||x-y||^2 + \beta x^T y}.

Для этого я хочу использовать реализованные ядра sklearn, так как это продукт обычного ядра RBF с линейным ядром, оцененным в ядре RBF. Поэтому я определяю свое собственное ядро ​​следующим образом:

import numpy as np
from sklearn.kernel_ridge import KernelRidge
from sklearn.metrics import pairwise

def gaussian_exponentiated_kernel(X, Y=None, gamma = None, beta = None):
    return pairwise.rbf_kernel(X, Y, gamma) * pairwise.rbf_kernel(beta * pairwise.linear_kernel(X, Y))

Затем я использую фиктивный код для KRR в sklearn:

n_samples, n_features = 10, 5
rng = np.random.RandomState(0)
y = rng.randn(n_samples)
X = rng.randn(n_samples, n_features)
clf = KernelRidge(kernel=gaussian_exponentiated_kernel)
clf.fit(X, y)

Затем я получаю следующее сообщение об ошибке, которое я не до конца понимаю :

ValueError: Expected 2D array, got 1D array instead:
array=[0.14404357 1.45427351 0.76103773 0.12167502 0.44386323].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

Оценка функции ядра для массивов соответствующего размера работает нормально, поэтому я не вижу, откуда возникает проблема измерения.

...