我正在寻找使用sklearn训练随机森林或梯度增强算法的方法。我拥有的数据的结构使其对每个数据点具有可变的权重,该权重与数据点在数据集中出现的次数相对应。是否有办法在训练过程中赋予sklearn这样的权重,还是我需要将我的数据集扩展到一个非加权版本,该版本具有重复的数据点,每个数据点分别代表?
答案 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)
然后您可以根据测试数据评估模型。
现在,到最后一点,在本示例中,您可以根据重复的权重对训练集进行重新采样。但是在大多数现实世界的示例中,这可能会变得非常乏味,因为