【发布时间】:2014-06-11 19:59:21
【问题描述】:
我正在使用 Scikit RandomForestClassifier 对不平衡数据进行分类。目标类数据为“1”或“0”(99% 的值为 0)。
我想指定一个权重。我怎样才能做到这一点。
我在文档中找到:
sample_weight : 类似数组,shape = [n_samples] 或 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)
由于我没有得到预期的结果,有人可以确认一下吗?
【问题讨论】:
-
第一个是要走的路。您可能想尝试 100 而不是 5,以反映逆频率(这是一种启发式方法,没有理论规定该值)。出于好奇:您有多少真实目标/数据点可用?
-
我有 50K 件商品!我应该这样使用它:s_weight = y_train[:, 1:100].T.ravel()
-
第一个选项,不是第二个选项。
-
我应该这样做:s_weight = np.array([100 if i == 1 else 1 for i in y_train]) 还是这样:s_weight = np.array([100 if i == 1 else 0 for i in y_train]) 与第一个一样,我将 0 更改为 1 并将 1 更改为 100。
-
在大多数具有样本权重的估计器中,将 0 指定为样本权重就像省略样本一样。我不认为这是你想要的。
标签: python machine-learning classification scikit-learn