Scikit-Learn SVM:获取计算内核函数的引用



我正在使用Scikit-learn进行一些基本的SVM分类。我的结果是在我的数据上运行sklearn.svm.

skObject = clf.fit(X,y)

我得到一个具有一些有用属性的对象,例如 skObject.dual_coef_中的双公式的系数。

我的问题是:我如何获得Scikit Learn使用的内核的python级访问?这是skObject的属性,这不容易以其名称说明吗?具体来说,我想要一个快速(C级)函数,可以用于计算新数据点的边距。

这是我尝试过的

>>> skObject.kernel
'rbf'

只是字符串

>>> skObject._compute_kernel
<bound method SVC._compute_kernel of SVC(C=1.0, cache_size=200, 
class_weight=None, coef0=0.0, degree=3, gamma=0.0, kernel='rbf', max_iter=-1, 
probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False)>
>>> skObject._compute_kernel(data[0], data[1])
... TypeError: _compute_kernel() takes 2 positional arguments but 3 were given
>>> help(skObject._compute_kernel)
_compute_kernel(self, X) method of sklearn.svm.classes.SVC instance
Return the data transformed by a callable kernel

我不确定最后一点是什么意思,因为内核是转换数据的内部产物,而不是数据的转换。另外,它似乎在我给它的示例上计算了身份映射。

无法在SVC中使用内核的实际实现,因为由于效率原因,libsvm懒洋洋地计算出libsvm的内核。您要访问的功能是私有的(有领先的下划线),仅供内部使用。如果要计算RBF内核,则只需调用RBF_KERNEL功能即可。RBF内核的昂贵部分是欧几里得距离计算,可以用Blas有效地进行。SVM实现甚至更快的原因是因为它从不计算整个内核矩阵,只有必要的部分。

最新更新