Я использую 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
могут иметь несправедливое преимущество — их начальная точка для оптимизации была очень близка к границе хорошего решения.
Кто-нибудь знает, как это работает или есть предложения?