【发布时间】:2016-12-23 06:38:47
【问题描述】:
我正在使用 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 方法之后的结果可能具有不公平的优势——它们的优化起点非常接近良好的决策边界。
有人知道这是如何工作的或有建议吗?
【问题讨论】:
标签: python machine-learning scikit-learn svm libsvm