python - 使用加权类处理 GradientBoostingClassifier 中的不平衡数据?
问题描述
我有一个非常不平衡的数据集,我需要在此基础上构建一个模型来解决分类问题。该数据集有大约 30000 个样本,其中大约 1000 个样本标记为 -1,其余为 0。我通过以下几行构建模型:
X_train=training_set
y_train=target_value
my_classifier=GradientBoostingClassifier(loss='deviance',learning_rate=0.005)
my_model = my_classifier.fit(X_train, y_train)
由于这是一个不平衡的数据,所以像上面的代码那样简单地构建模型是不正确的,所以我尝试使用类权重如下:
class_weights = compute_class_weight('balanced',np.unique(y_train), y_train)
现在,我不知道如何使用 class_weights
(基本上包括 0.5 和 9.10 值)使用GradientBoostingClassifier
.
任何想法?如何使用加权类或其他技术处理这些不平衡数据?
解决方案
您应该使用样本权重而不是班级权重。换句话说,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
然后将这些权重传递给fit
方法:
my_model = my_classifier.fit(X_train, y_train, sample_weight = weights)
推荐阅读
- c - 将指针传递给函数的问题
- nginx - NGINX & Kestrel 502 响应(111:连接被拒绝)
- r - R 2 点“..something..”有什么作用?
- typescript - 在 TypeScript 中声明根全局对象
- dart - 如何确保在主线程上完成长任务之前更新 UI
- apache-spark - 使用pyspark计算组总数的百分比
- java - Apache POI 从 File 读取时抛出编码错误,但不是从 Stream 读取
- python-3.x - 导入 wxPython 时出错:AttributeError:模块“wx”没有属性“__version__”
- java - Do-While 循环在 Java 中的不同行上计数 1 到 30
- prebid.js - 无法判断 Prebid CPM 调整是否有效