我创建了一个带有我自己定义的内核函数的SVM实例。当我尝试在创建的模型上运行交叉验证时,我收到以下错误:
ValueError:X应该是方形核矩阵
回溯:
得分= cross_val_score(型号,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中 用于火车,在cv中测试)
文件“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行,在发货中
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中
提高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)
答案 0 :(得分:2)
我快速浏览了一下,SVC类(以及交叉验证工具)似乎都期望内核callables从全数据矩阵一次计算整个内核矩阵(这使得这个特性非常有限,我同意)。请查看测试以获取更多详细信息:
https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/svm/tests/test_svm.py#L124