Я использую sklearn.svm.SVR
для «задачи регрессии», в которой я хочу использовать свой «настроенный метод ядра».Вот примеры набора данных и код:
index density speed label
0 14 58.844020 77.179139
1 29 67.624946 78.367394
2 44 77.679100 79.143744
3 59 79.361877 70.048869
4 74 72.529289 74.499239
.... and so on
from sklearn import svm
import pandas as pd
import numpy as np
density = np.random.randint(0,100, size=(3000, 1))
speed = np.random.randint(20,80, size=(3000, 1)) + np.random.random(size=(3000, 1))
label = np.random.randint(20,80, size=(3000, 1)) + np.random.random(size=(3000, 1))
d = np.hstack((a,b,c))
data = pd.DataFrame(d, columns=['density', 'speed', 'label'])
data.density = data.density.astype(dtype=np.int32)
def my_kernel(X,Y):
return np.dot(X,X.T)
svr = svm.SVR(kernel=my_kernel)
x = data[['density', 'speed']].iloc[:2000]
y = data['label'].iloc[:2000]
x_t = data[['density', 'speed']].iloc[2000:3000]
y_t = data['label'].iloc[2000:3000]
svr.fit(x,y)
y_preds = svr.predict(x_t)
проблема возникает в последней строке svm.predict
, которая гласит:
X.shape[1] = 1000 should be equal to 2000, the number of samples at training time
Я искал в Интернете, чтобы найти способ разобратьсяс проблемой, но многие вопросы (например, {1} , { 2 }, { 3 }) остались без ответа.
На самом делеЯ использовал SVM-методы с rbf
, sigmoid
, ... раньше, и код работал просто отлично, но я впервые использовал настраиваемые ядра, и я подозревал, что это должно быть причиной возникновения этой ошибки.
Итак, после небольшого исследования и чтения документации я обнаружил, что при использовании precomputed
ядер форма матрицы для SVR.predict()
должна быть похожа на [n_samples_test, n_samples_train]
shape.
Интереснокак изменить x_test
, чтобы получить прогнозы, и все работает отлично, без проблем, как, например, когда мы не используем настроенные ядра?
Если возможно, опишите, пожалуйста, причину, по которой входные данные для svm.predict
функция в ядре precomputed
отличается от других ядер ".
Я действительно надеюсь, что на оставшиеся без ответа вопросы, связанные с этой проблемой, можно будет ответить соответственно.