Вы можете точно указать веса во время обучения этих классификаторов в scikit-learn
. В частности, это происходит во время шага fit
. Вот пример использования RandomForestClassifier
, но то же самое относится и к GradientBoostingClassifier
:
from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
import numpy as np
data = load_breast_cancer()
X = data.data
y = data.target
X_train, X_test, y_train, y_test = train_test_split(X,y, random_state = 42)
Здесь я определяю некоторые произвольные веса только для примера:
weights = np.random.choice([1,2],len(y_train))
И тогда вы можете подогнать свою модель под следующие модели:
rfc = RandomForestClassifier(n_estimators = 20, random_state = 42)
rfc.fit(X_train,y_train, sample_weight = weights)
Затем вы можете оценить свою модель по данным испытаний.
Теперь, к вашему последнему пункту, вы можете в этом примере пересчитать ваш тренировочный набор в соответствии с весами путем дублирования. Но в большинстве реальных примеров это может оказаться очень утомительным, потому что
- вам нужно убедиться, что все ваши веса являются целыми числами для выполнения дублирования
- вам придется бесполезно умножать размер ваших данных, который занимает много памяти и, скорее всего, замедлит процедуру обучения