【问题标题】:Can I use tf-idf on OneHotEcoded data?我可以在 OneHotEcoded 数据上使用 tf-idf 吗?
【发布时间】:2021-06-16 13:18:43
【问题描述】:

我有一个 800 行和 16k 列的数据集。 它采用 OneHotEcoding 格式(二进制:0,1)。这样如果列值存在于一行中,则 row[col] = 1,否则 = 0。 这些是我数据集中的 16k 个特征。如何使用 tfidf 从中选择 5k 和 10k 特征?

例如我的数据:

ID col1 col2 col3 col4
a   0    0    1    0
b   1    0    0    0 
c   0    1    1    1 
d   0    0    0    1

但是,对于 ~800 行和 16k 列。 我尝试了主题建模并从数据集中选择了前 300 个特征(使用 LDA),但这还不够。 我被要求使用 tf-idf 并从数据框中选择 5k 个特征。 (最初我被要求尝试 5k 到 16k 左右的功能,中间有 500 到 1k 步 )。 我不明白最初问的是什么,但想弄清楚使用 tf-idf 来选择功能。那么也许可以为 6k、7k、8k...16k 功能运行相同的功能? 任何有关使用什么库以及如何对其进行编码的帮助都会有所帮助!

【问题讨论】:

    标签: python pandas scikit-learn deep-learning


    【解决方案1】:

    您不能使用 OneHotEcoding 格式来计算 tf-idf 分数。

    tf-idf的公式如下:

    tf-idf = tf*idf
    

    tf:一个单词在文档中出现的次数/文档中的总单词数。
    idf:log(文档数/包含该单词的文档数)

    如您所见,OneHotEcoding 格式允许您计算idf,但不能计算tf。要计算tf,您需要知道一个单词在文档中出现了多少次。但是,OneHotEcoding 格式只计算一个单词在文档中出现的次数,无论它出现多少次。例如,如果“apple”在文档中出现 3 次,OneHotEcoding 只会将其计为 1。

    如果您有原始文本数据(在将其转换为词袋之前),您可以使用 sklearn 中的TfidfVectorizer 来计算 tf-idf 分数。

    【讨论】:

      猜你喜欢
      • 2013-10-19
      • 2011-02-01
      • 1970-01-01
      • 2020-04-13
      • 2020-09-08
      • 1970-01-01
      • 2012-06-21
      • 2020-11-30
      • 2023-03-11
      相关资源
      最近更新 更多