Как взвешивать образцы с помощью Cross_validate sklearns только для оценки?Python

Программы на Python
Гость
Как взвешивать образцы с помощью Cross_validate sklearns только для оценки?

Сообщение Гость »


Я выполняю задачу регрессии для набора данных, состоящего как из подлинных, так и из дополненных выборок. Дополненные сэмплы генерируются путем дрожания аутентичных. Я хотел бы выбрать наиболее эффективную модель с перекрестной проверкой со sklearn.
Для этого я хотел бы:
  • < br />
  • Обучите модель на наборе, состоящем как из аутентичных, так и из дополненных образцов. Я не хочу, чтобы процедура подгонки учитывала происхождение выборки (т. е. она должна быть эквивалентна запуску estimator.fit(..., sample_weights = [1,1,..., 1]) .
  • Оценивайте модели на основе их производительности только на аутентичных образцах. Для этого я подумал о том, чтобы установить вес расширенных (соответственно аутентичных) образцов равным 0 (соответственно 1).
Как добиться этого с помощью cross_validate sklearn?
I попробовал следующее:

Код: Выделить всё

from sklearn import model_selection
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import r2_score, mean_squared_error, make_scorer
import numpy as np

n_smpl, n_feats = 100, 5
arr_source = np.random.random((n_smpl, n_feats))
arr_target = np.random.random((n_smpl, n_feats))
arr_weight = np.random.randint(0, 2, n_smpl)  # 0 for augmented, 1 for authentic

model = RandomForestRegressor()
kfold_splitter = model_selection.KFold(n_splits=5, random_state=7, shuffle=True)
my_scorers = {
"r2_weighted": make_scorer(r2_score, sample_weight=arr_weight),
"mse_weighted": make_scorer(mean_squared_error, greater_is_better=False, sample_weight=arr_weight)
}

cv_results = model_selection.cross_validate(model, arr_source, arr_target, scoring = my_scorers, cv=kfold_splitter)
But this returns ValueError: Found input variables with inconsistent numbers of samples: [20, 20, 100]. I understand that this happens because cross_validate is not able to split the sample weights according to the folds.
Is there any way to get this to run through cross-validate? Or any other method?


Источник: https://stackoverflow.com/questions/781 ... oring-only

Вернуться в «Python»