【问题标题】:How do I create a binary feature vector for my classifier如何为我的分类器创建二元特征向量
【发布时间】:2017-09-04 12:36:33
【问题描述】:

我已经成功实现了 SVM 分类器。我没有使用 scikit 方法。我目前正在使用不同类型的数据对其进行训练。现在,我想针对单个文本输入对其进行测试。 我尝试使用 pandas,但后来我不得不改变我的方法,所以我决定不使用它。 该分类器被用于带有正面、负面和中性标签的情绪分析。馈送到分类器的数据集由来自 twitter 的推文组成。 这是我的分类器:https://pastebin.com/JZ5LVLW7

因此,我需要帮助在 python 中设计一个函数,该函数将接受一个字符串输入,将其与我的特征列表进行比较并生成一个二进制向量。或者如果有其他选择,请提出建议。 示例:如果我的文本输入是“足球是欧洲的一项流行运动” 因此,提议的函数将扫描特征列表(已经在测试数据的帮助下生成),如果特征列表中出现“足球”、“流行”、“运动”、“欧洲”等特征词,它将append 1 or else 0. 因此,通过函数扫描后,输出应该类似于 [..., 1,0,1,1,0,0,0,...]。

【问题讨论】:

  • 分类器是干什么用的,特征是什么,目标是什么?
  • 抱歉省略了一些细节。分类器用于带有正面、负面和中性标签的情感分析,它包含从推文数据集中提取的特征。
  • 所以你的意思是为文本输入生成one-hot特性? scikit 有一些文本功能工具。
  • 热门功能?只是一个特征向量,它扫描特征列表并生成 1(如果存在输入特征)或 0 的二进制数组。请检查示例。

标签: python machine-learning svm


【解决方案1】:

使用您感兴趣的单词和相同大小的热门编码器创建一个词汇表。阅读文本文件,并更新热编码器,以防您在词汇表中找到单词。这段代码应该可以工作。

vocabulary = ['Football', 'Europe'] # Put your targer words in here
hot_encoder = [0] * len(vocabulary)
binary_bag = dict(zip(vocabulary, hot_encoder))
with open('text.txt', 'r') as f: #Put your text sample in here
    words = [word for line in f for word in line.split()]
    for word in words:
        if word in vocabulary and binary_bag[word] == 0:
            binary_bag[word] = 1

【讨论】:

  • 感谢您的回答!如果我能隐藏输出中的标签就好了。示例:而不是 ['Football':1, 'Europe':0..] 可以只是 [1,0,0..] 吗?
  • 这一步要小心。由于您正在使用字典,因此您应该记住字典不会保持顺序。因此,您应该使用初始列表来帮助您实现这一目标。此代码应该可以工作:for idx, key in enumerate(vocabulary): hot_encoder[idx] = binary_bag[key]
猜你喜欢
  • 2017-08-15
  • 1970-01-01
  • 2014-08-18
  • 2015-03-20
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
相关资源
最近更新 更多