使用sklearn的RandomForestClassifier进行分类

0 投票
1 回答
544 浏览
提问于 2025-04-18 04:18

我正在使用Scikit的随机森林分类器来处理不平衡的数据。我的目标类数据只有'1'或'0'(99%的值都是0)。

我想给这些数据分配一个权重。请问该怎么做呢?

我在文档中找到了以下内容:

sample_weight:类似数组,形状为[n_samples]或None

样本权重。如果是None,那么所有样本的权重都是一样的。在寻找每个节点的分裂时,如果分裂后会产生净权重为零或负的子节点,这种分裂会被忽略。在分类的情况下,如果分裂会导致任何一个子节点中的某个类的权重为负,这种分裂也会被忽略。

我需要增加'1'的影响力。

我这样做可以吗:

s_weight = np.array([100 if i == 1 else 1 for i in y_train]) 

或者这样:

s_weight = y_train[:, 1:100].T.ravel()

clf.fit(X_train, y_train, sample_weight=s_weights)

因为我没有得到预期的结果,有人能确认一下吗?

1 个回答

1

从技术上讲

s_weight = np.array([100 if i == 1 else 1 for i in y_train]) 

是正确的,不过在随机森林(RF)中,权重的设置并不像支持向量机(SVM)那样简单。你需要进行交叉验证,才能找到最佳的权重设置(这个权重可能会比100小很多)。

撰写回答