SVM:训练后从零开始生成模型

克里斯特尔·琼科

训练后如何生成模型?我没有使用 sklearn 包来进行拟合和预测。我的代码如下所示:

class SVM(object):

def __init__(self, kernel=polynomial_kernel, C=None):
    self.kernel = kernel
    self.C = C
    if self.C is not None: self.C = float(self.C)

def fit(self, X, y):
    n_samples, n_features = X.shape

    # Gram matrix
    K = np.zeros((n_samples, n_samples))
    for i in range(n_samples):
        for j in range(n_samples):
            K[i,j] = self.kernel(X[i], X[j])

    P = cvxopt.matrix(np.outer(y,y) * K)
    q = cvxopt.matrix(np.ones(n_samples) * -1)
    A = cvxopt.matrix(y, (1,n_samples))
    b = cvxopt.matrix(0.0)

    if self.C is None:
        G = cvxopt.matrix(np.diag(np.ones(n_samples) * -1))
        h = cvxopt.matrix(np.zeros(n_samples))
    else:
        tmp1 = np.diag(np.ones(n_samples) * -1)
        tmp2 = np.identity(n_samples)
        G = cvxopt.matrix(np.vstack((tmp1, tmp2)))
        tmp1 = np.zeros(n_samples)
        tmp2 = np.ones(n_samples) * self.C
        h = cvxopt.matrix(np.hstack((tmp1, tmp2)))

    # solve QP problem
    solution = cvxopt.solvers.qp(P, q, G, h, A, b)

    # Lagrange multipliers
    a = np.ravel(solution['x'])

    # Support vectors have non zero lagrange multipliers
    sv = a > 1e-5
    ind = np.arange(len(a))[sv]
    self.a = a[sv]
    self.sv = X[sv]
    self.sv_y = y[sv]
    print("%d support vectors out of %d points" % (len(self.a), n_samples))

    # Intercept
    self.b = 0
    for n in range(len(self.a)):
        self.b += self.sv_y[n]
        self.b -= np.sum(self.a * self.sv_y * K[ind[n],sv])
    self.b /= len(self.a)


    # Weight vector
    if self.kernel == linear_kernel:
        self.w = np.zeros(n_features)
        for n in range(len(self.a)):
            self.w += self.a[n] * self.sv_y[n] * self.sv[n]
    else:
        self.w = None

def project(self, X):
    if self.w is not None:
        return np.dot(X, self.w) + self.b
    else:
        y_predict = np.zeros(len(X))
        for i in range(len(X)):
            s = 0
            for a, sv_y, sv in zip(self.a, self.sv_y, self.sv):
                s += a * sv_y * self.kernel(X[i], sv)
            y_predict[i] = s
        return y_predict + self.b

def predict(self, X):
    return np.sign(self.project(X))

我试图在我的测试文件中显示我的模型:

self.clf = SVM(C=1000.1)
self.svm_model=self.clf.fit(X, Y)
print(self.svm_model)

输出显示:

没有任何

然后我尝试将模型保存在 Pickle 中:

    SVM_pkl_filename=QtGui.QFileDialog.getSaveFileName(self,'Save File')

    print ("SVM classifier :: ", self.svm_model)

    #SVM_pkl_filename = 'SVM_model.pkl'
    SVM_model_pkl = open(SVM_pkl_filename, 'wb')
    # Dump the trained SVM classifier with Pickle
    pickle.dump(self.svm_model, SVM_model_pkl)

    # Close the pickle instances
    SVM_model_pkl.close()

我打开保存的文件,它什么也没显示。我将它与我使用 Sklearn 的另一个 Saved 模型文件进行了比较,它有一些随机内容。

我的模型的目的是使用 Pickle 保存和加载它。我使用 Pickle 来训练我的 4 个数据集,每次训练我的数据集时我的模型都会更新。并加载模型进行测试。

维维克·卡利亚纳兰甘

问题出在这一行 - self.svm_model=self.clf.fit(X, Y)

请注意,您正在尝试将函数的输出存储fit()self.svm_model,但该fit()函数不返回任何内容。

您必须为returnfit 函数分配一条语句,或者self.svm_modelfit()函数中就地分配对象

另外,我对你想要的东西没有明确的看法svm_model你想保存权重还是想要一个有自己fit()predict()方法的便利对象scikit-learn

假设您只想保存权重,请将fit()函数更改return self.w为最后。

pickle工作不只是这个结果。一旦你解决了这个svm_model问题,酸洗应该会自行解决。

编辑

您的代码中有另一个条件 -

else:
        self.w = None

它可以返回的另一个原因None如果不查看执行情况和数据,很难判断。

至于酸洗前的检查,可以做一个简单的空检查。

if not self.svm_model: # check not None
    # pickle here

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从零开始训练gpt 2?

来自分类Dev

从零开始的模型或微调或转移倾斜

来自分类Dev

如何从零开始训练通用句子编码器

来自分类Dev

在tensorflow 2中从零开始训练keras应用

来自分类Dev

从零开始的MoCa

来自分类Dev

从零开始的Linux

来自分类Dev

除法后如何输出从零开始的浮点数?

来自分类Dev

从零开始的ArUco程序

来自分类Dev

从零开始实现`Stack`

来自分类Dev

如何生成一个随机的手机号码,从零开始,有 10 位数字,从零开始?

来自分类Dev

从Python到C#。从零开始?

来自分类Dev

从零开始的Lua / C ++绑定

来自分类Dev

使用awk打印从零开始的行号

来自分类Dev

从零开始证明Coq的强烈归纳

来自分类Dev

从零开始的Symfony2应用

来自分类Dev

从零开始的Lua / C ++绑定

来自分类Dev

从零开始构建IP语音

来自分类Dev

Linux从零开始在LXC容器中

来自分类Dev

Android Sqlite 结果从零开始

来自分类Dev

训练SVM模型后如何加载未标记的数据进行情感分类?

来自分类Dev

.proto文件的字段可以从零开始吗?

来自分类Dev

动画计数器从零开始用逗号

来自分类Dev

为什么MediaPlayer.start不从零开始播放?

来自分类Dev

MPAndroidChart / CombinedChart-条形总是从零开始

来自分类Dev

从零开始的基本文本框

来自分类Dev

每月减一(不是因为它从零开始)

来自分类Dev

从零开始基于令牌的WebAPI理论

来自分类Dev

将numpy数组更改为从零开始

来自分类Dev

GraphView总是从零开始,并且动态地