【问题标题】:ValueError: y contains non binary labels for VotingClassifier with my GradientBoostingClassifierValueError: y contains non binary labels for VotingClassifier with my GradientBoostingClassifier
【发布时间】:2016-06-04 20:30:24
【问题描述】:

您好,我正在尝试将 VotingClassifier 与 GradientBoostingClassifier 一起使用,我在其周围放置了一个包装器以使用 sample_weight。 但是,我收到以下错误,无法弄清楚如何解决它。

代码:

class MyGradientBoostingClassifier(GradientBoostingClassifier):
    def fit(self, X , y=None):
        return super(GradientBoostingClassifier, self).fit(X, y, sample_weight=y)


rf =  RandomForestClassifier(n_jobs=-1)
mygb = MyGradientBoostingClassifier()

vc = VotingClassifier(estimators=[('rf', rf), ('mygb', mygb)],
                        voting='soft',
                        weights=[1,2])

mygb.fit(X5, y5)

y 的样本是[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 0.],它是 np 数组

错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-62-c56d4cac146f> in <module>()
     13                         weights=[1,2])
     14 
---> 15 mygb.fit(X5, y5)

<ipython-input-62-c56d4cac146f> in fit(self, X, y)
      3         print np.shape(y), np.shape(X), Counter(y), type(y)
      4         print y[:20]
----> 5         return super(GradientBoostingClassifier, self).fit(X, y, sample_weight=y)
      6 
      7 

/Users/a/anaconda/lib/python2.7/site-packages/sklearn/ensemble/gradient_boosting.pyc in fit(self, X, y, sample_weight, monitor)
    987 
    988             # fit initial model - FIXME make sample_weight optional
--> 989             self.init_.fit(X, y, sample_weight)
    990 
    991             # init predictions

/Users/a/anaconda/lib/python2.7/site-packages/sklearn/ensemble/gradient_boosting.pyc in fit(self, X, y, sample_weight)
    117 
    118         if neg == 0 or pos == 0:
--> 119             raise ValueError('y contains non binary labels.')
    120         self.prior = self.scale * np.log(pos / neg)
    121 

ValueError: y contains non binary labels.

【问题讨论】:

    标签: python machine-learning scikit-learn classification


    【解决方案1】:

    对于分类模型,y 预计是一个整数类标签(0 和 1),因此将其同时用作分类目标和样本权重是没有意义的。

    所有权重为 0 的样本都被模型忽略,不可能只用训练集中同一类的样本训练二元分类模型。

    【讨论】:

    • 嗨,ogrisel,感谢您的评论。那么你的意思是在这种情况下我不应该使用样品重量吗?你能给我更详细的建议吗?
    • 刚刚删除了我的答案,因为它可能令人困惑,@ogrisel 是对的
    • 有人能解释一下 ogrisel 的解释吗?
    • 您可以使用样本权重,但您应该传递真实权重,而不是目标类标签。否则,您将所有类别标签为 0 的样本的权重设为 0,这会导致模型忽略这些样本并仅保留类别标签为 1 的样本。阅读参数 sample_weight 的文档字符串。
    猜你喜欢
    • 2020-11-29
    • 2014-06-17
    • 2023-01-11
    • 2017-10-19
    • 1970-01-01
    • 2023-02-11
    • 1970-01-01
    • 2016-10-24
    • 2017-11-10
    相关资源
    最近更新 更多