【问题标题】:Label Propagation in sklearn is classifying every vector as 1sklearn 中的标签传播将每个向量分类为 1
【发布时间】:2013-12-03 13:44:28
【问题描述】:

我有 2000 个标记数据(7 个不同的标签)和大约 100K 未标记数据,我正在尝试使用 sklearn.semi_supervised.LabelPropagation。数据有 1024 个维度。我的问题是分类器将所有内容标记为 1。我的代码如下所示:

X_unlabeled = X_unlabeled[:10000, :]
X_both = np.vstack((X_train, X_unlabeled))
y_both = np.append(y_train, -np.ones((X_unlabeled.shape[0],)))
clf = LabelPropagation(max_iter=100).fit(X_both, y_both)
y_pred = clf.predict(X_test)

y_pred 都是一。此外,X_train 是 2000x1024,X_unlabeled 是未标记数据的子集,即 10000x1024。

在分类器上调用 fit 时,我也会收到此错误:

/usr/local/lib/python2.7/site-packages/sklearn/semi_supervised/label_propagation.py:255: RuntimeWarning: 除法中遇到无效值 self.label_distributions_ /= 规范化器

【问题讨论】:

  • 我遇到了类似的问题。事实证明,我的X 设置错误,整个矩阵重复了一行。我建议检查X_unlabeledX_both等的元素。
  • @Andrew Danks:这篇文章已经很老了,但是你是怎么解决这个问题的?

标签: machine-learning scikit-learn


【解决方案1】:

您是否尝试过 gamma 参数的不同值?由于该图是通过计算 rbf 内核构建的,因此计算包括一个指数,如果该值是一个太大的负数,python 指数函数将返回 0(请参阅http://computer-programming-forum.com/56-python/ef71e144330ffbc2.htm)。并且如果图表用 0 填充,label_distributions_ 用“nan”填充(因为归一化)并出现警告。 (注意,scikit 实现中的 gamma 值乘以欧几里得距离,和朱论文中的不一样。)

【讨论】:

  • 你的英文没问题,但感觉更像是评论。但是,由于您的帖子的长度,我暂时忽略了这一点。其他人可能不同意宽大处理。 :) 请在答案中争取答案。您需要在发表评论之前获得足够的声誉,您可以通过多种方式做到这一点。
  • 我完全同意。这是对问题的讨论,而不是答案。 Stack Overflow 采用问答格式,而不是讨论线程格式。 “答案”意味着您实际上是在为问题提供答案。它与论坛中的“回复”不同。一旦你有至少 50 个代表,你可以post comments。请阅读About 页面以更好地了解该网站的格式。
  • 对不起,我不知道这些 cmets 是否是私人的,或者我是否可以私下询问您的信息。我同意你的观点,但我在这个问题上工作了一段时间,但在网上没有找到答案。我真的不相信我,所以我不只是说:“改变伽玛值”(或 exp() 在 numpy 中的实现)。但我觉得这可以帮助某人。谢谢你的宽大处理,但也许我可以减少我的“答案”,然后你可以把它作为评论?谢谢,请删除此评论。
【解决方案2】:

LabelPropagation 最终将在 0.19 版本中修复

【讨论】:

    猜你喜欢
    • 2021-11-21
    • 2017-10-11
    • 2022-06-28
    • 2016-10-15
    • 2020-03-07
    • 1970-01-01
    • 2018-09-11
    • 2019-03-18
    • 2021-12-06
    相关资源
    最近更新 更多