我正在使用这个例子从SVM分类结果创建ROC曲线:http://scikit-learn.org/0.13/auto_examples/plot_roc.html
然而,每个数据点实际上由4个长度为d的特征向量组成,使用一个不符合特定K(X,X)范例的自定义核函数进行组合。因此,我必须向scikit-learn提供一个预计算的核以进行分类。它看起来像这样:
K = numpy.zeros(shape = (n, n))
# w1 + w2 + w3 + w4 = 1.0
# v1: array, shape (n, d)
# w1: float in [0, 1)
chi = sklearn.metrics.pairwise.chi2_kernel(v1, v1)
mu = 1.0 / numpy.mean(chi)
K += w1 * numpy.exp(-mu * chi)
# v2: array, shape (n, d)
# w2: float in [0, 1)
chi = sklearn.metrics.pairwise.chi2_kernel(v2, v2)
mu = 1.0 / numpy.mean(chi)
K += w2 * numpy.exp(-mu * chi)
# v3: array, shape (n, d)
# w3: float in [0, 1)
chi = sklearn.metrics.pairwise.chi2_kernel(v3, v3)
mu = 1.0 / numpy.mean(chi)
K += w3 * numpy.exp(-mu * chi)
# v4: array, shape (n, d)
# w4: float in [0, 1)
chi = sklearn.metrics.pairwise.chi2_kernel(v4, v4)
mu = 1.0 / numpy.mean(chi)
K += w4 * numpy.exp(-mu * chi)
return K
从上面的链接中生成ROC图的主要障碍似乎是将数据分成两组,然后在测试集上调用predict_proba()
的过程。 在scikit-learn中是否可以使用预计算的核来实现这一点?
X_test
,而由于每个数据点包含4个不同的n维特征向量组合在核函数中,我无法创建它。除非你提倡创建两个格拉姆矩阵,否则我不能将数据分成训练和测试,而scikit-learn实际上禁止这样做(“结果会出乎意料”)。 - Magsolpredict_proba()
中提供一个与训练SVM时使用的Gram矩阵K
不同的Gram矩阵Kt
是完全可以接受的吗?(但需要注意的是,在Kt
中的测试向量需要与训练向量进行比较) - Magsolw_f
)以总和为1。mu_f
是该特征集合中所有chi ^ 2距离的平均值的倒数。我在实现中有遗漏吗? - Magsol