【问题标题】:Error - Using custom kernels for SVM in scikit-learn错误 - 在 scikit-learn 中为 SVM 使用自定义内核
【发布时间】:2014-04-15 07:27:42
【问题描述】:

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

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

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)

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-09-29
      • 2015-10-14
      • 2015-06-02
      • 2013-04-21
      • 2017-10-15
      • 2016-01-24
      • 2020-09-17
      • 2014-03-15
      • 1970-01-01
      相关资源
      最近更新 更多