【问题标题】:classification using sklearn RandomForestClassifier使用 sklearn RandomForestClassifier 进行分类
【发布时间】: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


【解决方案1】:

技术上

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

是正确的,尽管 RF 中的权重不像 SVM 那样简单。您必须交叉验证才能找到最佳权重(可能远小于100)。

【讨论】:

  • SVM 也没有那么简单。交叉验证的样本权重可以小于或大于逆频率。
  • 不像 SVM 那样简单解释就是我的意思。
猜你喜欢
  • 2013-12-03
  • 2021-08-20
  • 1970-01-01
  • 2015-11-20
  • 2016-05-09
  • 2020-06-07
  • 2019-08-03
  • 2019-08-18
  • 2016-03-18
相关资源
最近更新 更多