我正在使用 scikit SVM,我想测试一个 SVM,其中包含自定义的 sample_weights
并传递给分类器,并再次使用通常的实现,其中 sample_weights
是每个样本的默认值 1
。 (sample_weight
允许用户给予某些样本比其他样本更大的影响力。)因此工作流程是标准的——将每个模型拟合到训练子集,在保留的开发集上测试每个模型,看看我是否应该使用或不使用重量。我的代码是这样的:
clf = svm.SVC( kernel = 'rbf', gamma = .001) ## initialize the model- i only do this once!
clf.fit(X_train, y_train) ## fit the model/do the optimization
accuracy[name + "_no_weights"] = clf.score(X_test, y_test) ## store results
clf.fit(X_train, y_train, sample_weight = sample_weight_test) ## fit the model/do the optimization w/ different regularization
accuracy[name + "_w_weights"] = clf.score(X_test, y_test) ## store results
请注意,如果我要测试要使用哪个内核,我必须通过重新定义 clf
来重新初始化分类器。要点是,上面我在两种情况下训练相同的分类器,但我没有重新初始化分类器。因此,在我第二次调用 .fit
时,它的参数可能已经初始化(不是随机的,而是来自之前的训练)。这意味着第二个 .fit 方法之后的结果可能具有不公平的优势——它们的优化起点非常接近良好的决策边界。
有人知道这是如何工作的或有建议吗?
最佳答案
这对于 SVM 来说根本不重要,因为它总是收敛到全局最小值。它不会“从好的解决方案开始”,SVM 不是神经网络 - 它不需要良好的初始化。换句话说 - 您可以根据需要调用 fit 多次,而不必重新初始化分类器。在 sklearn 的情况下,情况更加明显,因为它的 .fit 方法甚至不传递当前的拉格朗日乘数,它只是调用 SVM 求解器的外部低级实现。
关于python - 重复调用 Python Scikit 分类器 `.fit` 方法是否会产生任何影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38982494/