【问题标题】:Error with input dimension输入尺寸错误
【发布时间】:2017-08-30 11:48:21
【问题描述】:

我正在尝试实现自定义 rbf 内核函数。但是我收到以下错误。我不确定为什么需要一定数量的数据点? 这行代码出现错误:

rbf_y = rbf_kernel.predict(X_test)

代码

def myKernel(x,y):
    pairwise_dists = squareform(pdist(x, 'euclidean'))
    K = scip.exp(-pairwise_dists ** 2 / .08 ** 2)
    return K

rbf_kernel = svm.SVC(kernel=myKernel, C=1).fit(X_train, Y_train.ravel())
rbf_y = rbf_kernel.predict(X_test)
rbf_accuracy = accuracy_score(Y_test, rbf_y)

错误:

ValueError: X.shape[1] = 15510 should be equal to 31488, the number of samples at training time

数据形状

X_train shape:  (31488, 128)
X_test shape:  (15510, 128)
Y_train shape:  (31488, 1)
Y_test shape:  (15510, 1)

从内核返回形状

myKernel(X_train, X_train).shape = (31488, 31488)

【问题讨论】:

  • 能否请您发布完整的堆栈跟踪。

标签: python machine-learning scipy scikit-learn


【解决方案1】:

自定义内核kernel(X, Y) 应该计算矩阵X 和矩阵Y 之间的相似性度量,并且输出的形状应该是[X.shape[0], Y.shape[0]]。您的内核函数忽略了Y,并返回了一个形状为[X.shape[0], X.shape[0]] 的矩阵,这会导致您看到的错误。

要解决此问题,请实现一个计算正确形状的核矩阵的核函数。 Scikit-learn 的 custom kernels documentation 有一些简单的例子来说明这可能是如何工作的。

对于您的特定内核,您可以尝试使用cdist(x, y) 代替squareform(pdist(x))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 2021-09-14
    • 2019-06-05
    • 2018-03-06
    • 1970-01-01
    相关资源
    最近更新 更多