python - 重复调用 Python Scikit 分类器 `.fit` 方法是否会产生任何影响?

标签 python machine-learning scikit-learn svm libsvm

我正在使用 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/

相关文章:

python - 当某些字符串与 BeautifulSoup 相邻时如何提取它们

machine-learning - 在执行语义分割任务时是否应该减去图像均值?为什么或者为什么不?

python - 训练和验证数据结构

machine-learning - 从 nltk 学习单词对齐

python - 在 GridSearchCV 中使用 sample_weight

python - 在线/流媒体学习的验证

python - 如何使用 Pandas python 中的另一个数据框替换数据框中的单词

Python:重命名文件夹时参数无效

python - 使用交叉验证 (CV) 计算 scikit-learn 多类 ROC 曲线

python - 为什么在使用 pyodbc 从 MSSQL 获取数据时出现此错误?