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

Gur*_*sad 5 python scikit-learn

我用我自己定义的内核函数创建了一个 SVM 实例。当我尝试对创建的模型运行交叉验证时,出现以下错误:

ValueError: X should be a square kernel matrix
Traceback:

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

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

File "C:\Python27\lib\site-packages\scikit_learn-0.14.1-py2.7-win32.egg\sklearn\ externals\joblib\parallel.py”,第 517 行,调用

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 行,在调度

作业中 = 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", line 1047, in _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)
Run Code Online (Sandbox Code Playgroud)

ogr*_*sel 3

我快速浏览了一下,SVC 类(和交叉验证工具)似乎都期望内核可调用项从完整数据矩阵中立即计算整个内核矩阵(我同意,这使得此功能非常有限)。请查看测试以了解更多详细信息:

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