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

时间:2019-05-07 19:50:41

标签: python scikit-learn sklearn-pandas

我正在寻找使用sklearn训练随机森林或梯度增强算法的方法。我拥有的数据的结构使其对每个数据点具有可变的权重,该权重与数据点在数据集中出现的次数相对应。是否有办法在训练过程中赋予sklearn这样的权重,还是我需要将我的数据集扩展到一个非加权版本,该版本具有重复的数据点,每个数据点分别代表?

1 个答案:

答案 0 :(得分:3)

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)

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

现在,到最后一点,在本示例中,您可以根据重复的权重对训练集进行重新采样。但是在大多数现实世界的示例中,这可能会变得非常乏味,因为

  • 您需要确保所有权重都是整数才能执行重复
  • 您将不得不无用地增加数据大小,这会占用大量内存,并且很可能会减慢训练过程的速度