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

时间:2014-03-11 15:17:33

标签: python scikit-learn

我创建了一个带有我自己定义的内核函数的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)

1 个答案:

答案 0 :(得分:2)

我快速浏览了一下,SVC类(以及交叉验证工具)似乎都期望内核callables从全数据矩阵一次计算整个内核矩阵(这使得这个特性非常有限,我同意)。请查看测试以获取更多详细信息:

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