python – 可以在scikit-learn中使用预先计算的内核从SVM制作ROC
发布时间:2020-12-20 13:34:42 所属栏目:Python 来源:网络整理
导读:我正在使用此示例从SVM分类结果创建ROC图: http://scikit-learn.org/0.13/auto_examples/plot_roc.html 但是,每个数据点实际上由4个length-d特征向量组成,使用不符合特定K(X,X)范例的自定义内核函数进行组合.因此,我必须为scikit-learn提供预先计算的内核才
我正在使用此示例从SVM分类结果创建ROC图:
http://scikit-learn.org/0.13/auto_examples/plot_roc.html
但是,每个数据点实际上由4个length-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,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,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,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? 解决方法
简短的回答是“也许不是”.
你尝试过类似下面的东西吗? 基于http://scikit-learn.org/stable/modules/svm.html的示例,您需要以下内容: import numpy as np from sklearn import svm X = np.array([[0,0],[1,1]]) y = [0,1] clf = svm.SVC(kernel='precomputed') # kernel computation K = numpy.zeros(shape = (n,n)) # "At the moment,the kernel values between all training vectors # and the test vectors must be provided." # according to scikit learn web page. # -- This is the problem! # v1: array,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,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,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,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) # scikit-learn is a wrapper LIBSVM and looking at the LIBSVM Readme file # it seems you need kernel values for test data something like this: Kt = numpy.zeros(shape = (nt,n)) # t1: array,shape (nt,1) chi = sklearn.metrics.pairwise.chi2_kernel(t1,v1) mu = 1.0 / numpy.mean(chi) Kt += w1 * numpy.exp(-mu * chi) # v2: array,1) chi = sklearn.metrics.pairwise.chi2_kernel(t2,v2) mu = 1.0 / numpy.mean(chi) Kt += w2 * numpy.exp(-mu * chi) # v3: array,1) chi = sklearn.metrics.pairwise.chi2_kernel(t3,v3) mu = 1.0 / numpy.mean(chi) Kt += w3 * numpy.exp(-mu * chi) # v4: array,1) chi = sklearn.metrics.pairwise.chi2_kernel(t4,v4) mu = 1.0 / numpy.mean(chi) Kt += w4 * numpy.exp(-mu * chi) clf.fit(K,y) # predict on testing examples probas_ = clf.predict_proba(Kt) 从这里只是复制底部的http://scikit-learn.org/0.13/auto_examples/plot_roc.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |