Spe*_*edo 5 python machine-learning training-data scikit-learn boosting
我有一个非常不平衡的数据集,我需要在此基础上构建一个模型来解决分类问题。该数据集有大约 30000 个样本,其中大约 1000 个样本被标记为\xe2\x80\x941\xe2\x80\x94,其余为 0。我通过以下几行构建模型:
\n\nX_train=training_set\ny_train=target_value\nmy_classifier=GradientBoostingClassifier(loss=\'deviance\',learning_rate=0.005)\nmy_model = my_classifier.fit(X_train, y_train)\nRun Code Online (Sandbox Code Playgroud)\n\n由于这是一个不平衡的数据,因此像上面的代码一样简单地构建模型是不正确的,所以我尝试使用类权重,如下所示:
\n\nclass_weights = compute_class_weight(\'balanced\',np.unique(y_train), y_train)\nRun Code Online (Sandbox Code Playgroud)\n\n现在,我不知道如何使用 class_weights(基本上包括 0.5 和 9.10 值)来训练和构建模型GradientBoostingClassifier。
任何想法?我如何使用加权类或其他技术处理这些不平衡的数据?
\n您应该使用样本权重而不是类别权重。换句话说,GradientBoostingClassifier您可以为每个观察值而不是类别分配权重。假设 y = 0 对应权重 0.5,y = 1 对应权重 9.1:
import numpy as np
sample_weights = np.zeros(len(y_train))
sample_weights[y_train == 0] = 0.5
sample_weights[y_train == 1] = 9.1
Run Code Online (Sandbox Code Playgroud)
然后将这些权重传递给fit方法:
my_model = my_classifier.fit(X_train, y_train, sample_weight = weights)
Run Code Online (Sandbox Code Playgroud)