重复调用Python Scikit分类器的`.fit`方法会有什么影响?

我在使用scikit的SVM,并且我想测试一个SVM模型,既使用自定义的sample_weights传递给分类器,又使用sample_weights为每个样本默认值1的常规实现。(sample_weight允许用户对某些样本赋予更大的影响力。)所以工作流程是标准的——将每个模型拟合到训练子集上,然后在保留的开发集上测试每个模型,以确定是否应该使用权重。我的代码如下:

clf = svm.SVC(kernel = 'rbf', gamma = .001) ## 初始化模型 - 我只做一次!
clf.fit(X_train, y_train) ## 拟合模型/进行优化
accuracy[name + "_no_weights"] = clf.score(X_test, y_test) ## 存储结果
clf.fit(X_train, y_train, sample_weight = sample_weight_test) ## 拟合模型/使用不同的正则化进行优化
accuracy[name + "_w_weights"] = clf.score(X_test, y_test) ## 存储结果

请注意,如果我要测试使用哪个内核,我需要通过重新定义clf来重新初始化分类器。关键是,上述情况下我是在训练同一个分类器,但没有重新初始化分类器。因此,在第二次调用.fit时,其参数可能已经初始化(不是随机的,而是来自之前的训练)。这意味着第二次.fit方法后的结果可能具有不公平的优势——它们的优化起点非常接近一个好的决策边界。

有谁知道这是如何运作的,或者有什么建议吗?


回答:

这对SVM来说根本不重要,因为它总是收敛到全局最小值。它不会“围绕好的解决方案开始”,SVM不是神经网络——它不需要好的初始化。换句话说——你可以随意多次调用fit,并且不需要重新初始化分类器。在sklearn的情况下,这一点更为明显,因为它的.fit方法甚至不传递当前的拉格朗日乘数,它只是调用外部的、低级的SVM求解器实现。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注