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

Ste*_*sko 5 python scikit-learn sklearn-pandas

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

Max*_*Kan 7

您绝对可以在训练这些分类器时指定权重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)
Run Code Online (Sandbox Code Playgroud)

这里我定义了一些任意权重只是为了举例:

weights = np.random.choice([1,2],len(y_train))
Run Code Online (Sandbox Code Playgroud)

然后你可以用这些模型来拟合你的模型:

rfc = RandomForestClassifier(n_estimators = 20, random_state = 42)
rfc.fit(X_train,y_train, sample_weight = weights)
Run Code Online (Sandbox Code Playgroud)

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

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

  • 您需要确保所有权重都是整数才能执行复制
  • 您将不得不徒劳地乘以数据的大小,这会消耗内存,并且很可能会减慢训练过程