错误 - 在scikit-learn中使用自定义SVM内核

5 投票
1 回答
3056 浏览
提问于 2025-04-17 21:48

我创建了一个支持向量机(SVM)的实例,并使用了我自己定义的核函数。当我尝试对这个模型进行交叉验证时,出现了以下错误:

值错误:X 应该是一个方形的核矩阵
错误追踪信息:

scores = cross_val_score(model, X, y, cv=10)

文件 "C:\Python27\lib\site-packages\scikit_learn-0.14.1-py2.7-win32.egg\sklearn\cross_validation.py",第 1152 行,在 cross_val_score
for train, test in cv)

文件 "C:\Python27\lib\site-packages\scikit_learn-0.14.1-py2.7-win32.egg\sklearn\externals\joblib\parallel.py",第 517 行,在 call

self.dispatch(function, args, kwargs)

文件 "C:\Python27\lib\site-packages\scikit_learn-0.14.1-py2.7-win32.egg\sklearn\externals\joblib\parallel.py",第 312 行,在 dispatch

job = ImmediateApply(func, args, kwargs)

文件 "C:\Python27\lib\site-packages\scikit_learn-0.14.1-py2.7-win32.egg\sklearn\externals\joblib\parallel.py",第 136 行,在 init

self.results = func(*args, **kwargs)

文件 "C:\Python27\lib\site-packages\scikit_learn-0.14.1-py2.7-win32.egg\sklearn\cross_validation.py",第 1047 行,在 _cross_val_score

raise ValueError("X 应该是一个方形的核矩阵")

这是我的代码:

def hist_intersection(x, y):
    return np.sum(np.array([min(xi,yi) for xi,yi in zip(x,y)]))

model = svm.SVC(kernel = hist_intersection)
scores = cross_val_score(model, X, y, cv=10)

1 个回答

3

我简单看了一下,SVC类(还有交叉验证工具)似乎都希望内核函数能够一次性从完整的数据矩阵计算出整个内核矩阵(这确实让这个功能变得很有限,我同意)。如果你想了解更多细节,可以看看测试部分:

https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/svm/tests/test_svm.py#L124

撰写回答