【问题标题】:How to Avoid negative values error when using TruncatedSVD?使用 TruncatedSVD 时如何避免负值错误?
【发布时间】:2013-12-27 15:24:19
【问题描述】:

在 CountVectorizer/TfidfVectorizer 变为 (40,845 X 218,904) (unigram) 之后,我遇到了一个只有 2 个类和我的训练数据集矩阵大小的文档分类问题。我想使用 TruncatedSVD;但是,CountVectorizer/TfidfVectorizer 似乎会产生负值。我想知道为什么以及如何避免负值。

    tsvd = TruncatedSVD(10000, algorithm="randomized")

      features = [
                dict(name="count_ng1",
                feat=CountVectorizer(tokenizer=tokenizer, ngram_range=(1,1))),
                dict(name="tfidf_ng1",
                feat=TfidfVectorizer(tokenizer=tokenizer, ngram_range=(1,1))),
               ]
           for data in datas:
               (D_train, y_train, d_test, y_test) = g.get_train_test(**data['params'])

              for feat in features:
                  x_train = feat['feat'].fit_transform(d_train)
                  x_test = feat['feat'].transform(d_test)
                  X_trainSVD = tsvd.fit_transform(x_train)
                  X_testSVD = tsvd.transform(x_test) 

【问题讨论】:

  • 你应该包含一些代码
  • 我添加了一些代码。只是使用了 sklearn 包中的必要功能
  • 它看起来不像是一个有效的 python 缩进,为了提出一个好问题(因此 - 获得有价值的答案),您必须准备一个简短的、可重复的示例
  • 另外,请务必提及您正在使用的库版本(在本例中为 scikit-learn)。

标签: python-2.7 machine-learning scikit-learn


【解决方案1】:

TruncatedSVD 处理负值应该没有问题。

CountVectorizer/TfidfVectorizer 不应产生负值。如果他们这样做,那可能是一个错误。

如果您将问题更新为:

  • 为我们提供有效的重现脚本,如果可能的话,最好在自包含数据上(例如,将d_train / d_test 定义为 Python 字符串的小列表,这样就可以在无需访问您的真实数据的情况下重现问题),
  • 修复缩进,以便可以复制和粘贴您的代码 sn-p 并运行它,
  • 提供您收到的错误消息以及完整的回溯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 2020-06-17
    相关资源
    最近更新 更多