如何用sklearn训练算法权衡数据点

How to weigh data points with sklearn training algorithms

我希望使用 sklearn 训练随机森林或梯度提升算法。我拥有的数据的结构方式是,每个数据点都具有可变权重,该权重对应于该数据点在数据集中出现的次数。有没有办法在训练过程中给 sklearn 这个权重,或者我是否需要将我的数据集扩展到一个非加权版本,该版本具有每个单独表示的重复数据点?

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)

然后您可以根据您的测试数据评估您的模型。

现在,对于你的最后一点,你可以在这个例子中根据权重通过重复对你的训练集进行重新采样。但在大多数现实世界的例子中,这最终可能会非常乏味,因为

  • 您需要确保所有权重都是整数才能执行复制
  • 您将不得不无用地增加数据的大小,即 memory-consuming 并且很可能会减慢训练过程