如何提取使用“sklearn.svm.SVC”创建的分类器的内核矩阵?

Oma*_*hab 5 kernel svm scikit-learn deep-learning

我目前正在使用 sk-learn 支持向量机库附带的内核。

如何提取使用创建的分类器的内核矩阵sklearn.svm.SVC

小智 0

不幸的是,scikit 没有提供从训练有素的 svm 获取核矩阵的直接方法。

但是,scikit 允许 svm 采用自定义内核,我所做的是,

  1. 使用特定内核训练 svm,
  2. 根据训练后的 svm 给出的参数手动计算核矩阵,
  3. 定义一个具有相同类型内核和矩阵的新 svm,然后在同一列数据上检查新 svm 是否与前一个相同。

代码如下,仅以rbf和poly为例,

# rbf
K_train = np.exp(-clf.gamma * np.sum((X_train_C[..., None, :] - X_train_C) ** 2, axis=2))
# poly
# K_train = (clf.gamma * X_train_C.dot(X_train_C.T) + clf.coef0) ** clf.degree


clf_pre = SVC(kernel='precomputed')
clf_pre.fit(K_train, y_train_C)
pred_pre = clf_pre.predict(K_train)
Run Code Online (Sandbox Code Playgroud)

最后一件事我不太确定,当我加载预先计算的内核时,我无法直接使用它。我需要重新重新安装它,这与 scikit 给出的相同。

以下是 scikit 提供的示例。

  1. https://scikit-learn.org/stable/auto_examples/svm/plot_custom_kernel.html#sphx-glr-auto-examples-svm-plot-custom-kernel-py
  2. https://scikit-learn.org/stable/modules/svm.html?highlight=svc+custom+kernel(1.4.6.2 自定义内核)