scikit.svm.SRV.predict(X) 的复制
Replication of scikit.svm.SRV.predict(X)
我正在尝试复制 scikit-learn 的 svm.svr.predict(X),但不知道如何正确执行。
我想做的是,因为在使用 RBF 内核训练 SVM 之后,我想在另一种编程语言 (Java) 上实现预测,并且我需要能够导出模型的参数能够对未知案例进行预测。
在 scikit 的文档页面上,我看到有 'support_ 和 'support_vectors_ 属性,但不明白如何复制 .predict(X) 方法。
形式为 y_pred = f(X,svm.svr.support_, svm.svr.support_vectors_,etc,...) 的解就是我要找的。
提前致谢!
编辑:
它的 SVM 用于回归,而不是分类!
编辑:
这是我现在正在尝试的代码,来自 但没有成功...
from sklearn import svm
import math
import numpy as np
X = [[0, 0], [1, 1], [1,2], [1,2]]
y = [0, 1, 1, 1]
clf = svm.SVR(gamma=1e-3)
clf.fit(X, y)
Xtest = [0,0]
print 'clf.decision_function:'
print clf.decision_function(Xtest)
sup_vecs = clf.support_vectors_
dual_coefs = clf.dual_coef_
gamma = clf.gamma
intercept = clf.intercept_
diff = sup_vecs - Xtest
# Vectorized method
norm2 = np.array([np.linalg.norm(diff[n, :]) for n in range(np.shape(sup_vecs)[0])])
dec_func_vec = -1 * (dual_coefs.dot(np.exp(-gamma*(norm2**2))) - intercept)
print 'decision_function replication:'
print dec_func_vec
两种方法得到的结果不同,为什么??
clf.decision_function:
[[ 0.89500898]]
decision_function replication:
[ 0.89900498]
感谢B@rmaley.exe的贡献,我找到了手动复制SVM的方法。我不得不更换
dec_func_vec = -1 * (dual_coefs.dot(np.exp(-gamma*(norm2**2))) - intercept)
与
dec_func_vec = (dual_coefs.dot(np.exp(-gamma*(norm2**2))) + intercept)
所以,完整的矢量化方法是:
# Vectorized method
norm2 = np.array([np.linalg.norm(diff[n, :]) for n in range(np.shape(sup_vecs)[0])])
dec_func_vec = -1 * (dual_coefs.dot(np.exp(-gamma*(norm2**2))) - intercept)
我正在尝试复制 scikit-learn 的 svm.svr.predict(X),但不知道如何正确执行。
我想做的是,因为在使用 RBF 内核训练 SVM 之后,我想在另一种编程语言 (Java) 上实现预测,并且我需要能够导出模型的参数能够对未知案例进行预测。
在 scikit 的文档页面上,我看到有 'support_ 和 'support_vectors_ 属性,但不明白如何复制 .predict(X) 方法。
形式为 y_pred = f(X,svm.svr.support_, svm.svr.support_vectors_,etc,...) 的解就是我要找的。
提前致谢!
编辑: 它的 SVM 用于回归,而不是分类!
编辑:
这是我现在正在尝试的代码,来自
from sklearn import svm
import math
import numpy as np
X = [[0, 0], [1, 1], [1,2], [1,2]]
y = [0, 1, 1, 1]
clf = svm.SVR(gamma=1e-3)
clf.fit(X, y)
Xtest = [0,0]
print 'clf.decision_function:'
print clf.decision_function(Xtest)
sup_vecs = clf.support_vectors_
dual_coefs = clf.dual_coef_
gamma = clf.gamma
intercept = clf.intercept_
diff = sup_vecs - Xtest
# Vectorized method
norm2 = np.array([np.linalg.norm(diff[n, :]) for n in range(np.shape(sup_vecs)[0])])
dec_func_vec = -1 * (dual_coefs.dot(np.exp(-gamma*(norm2**2))) - intercept)
print 'decision_function replication:'
print dec_func_vec
两种方法得到的结果不同,为什么??
clf.decision_function:
[[ 0.89500898]]
decision_function replication:
[ 0.89900498]
感谢B@rmaley.exe的贡献,我找到了手动复制SVM的方法。我不得不更换
dec_func_vec = -1 * (dual_coefs.dot(np.exp(-gamma*(norm2**2))) - intercept)
与
dec_func_vec = (dual_coefs.dot(np.exp(-gamma*(norm2**2))) + intercept)
所以,完整的矢量化方法是:
# Vectorized method
norm2 = np.array([np.linalg.norm(diff[n, :]) for n in range(np.shape(sup_vecs)[0])])
dec_func_vec = -1 * (dual_coefs.dot(np.exp(-gamma*(norm2**2))) - intercept)