使用词袋

时间:2017-08-31 08:44:44

标签: python machine-learning text-classification one-hot-encoding

我面临机器学习问题。基本上,我试图将一些文本分类为类别(标签),因此这是一种监督分类算法。 我有训练数据,文本及其相应的标签。通过一个单词方法,我设法将每个文本转换为最常出现的单词列表,就像在这张图片中一样: bag of words

如您所见,列表具有不同的大小(因为输入数据的文本有时非常短......)。

现在,我有一个训练数据框,其中包含这些单词列表及其相应的标签。但是,我对如何继续实施我的机器学习算法感到很困惑。如何修改列表以便我可以使用分类器?

我看过一个热门编码,但问题是:

  • 每个列表的不同大小以及列表中每个单词的随机位置
  • 如何使用其他列表中可能的0的外观对一个列表进行编码

--->例子

INPUT

L1= ['cat','dog','home','house']

L2=['fish','cat','dog']

输出

Vector1 = [1,1,1,1,0]
Vector2=[1,1,0,0,1]

另外,仅从这个例子中我想,即使我这样做,结果向量也可能具有非常重要的大小。

我希望这是有道理的,我对机器学习很陌生。但是,我甚至不确定我所做的那些方法真的很有帮助,所以如果你认为我走向了错误的方向,请不要犹豫。 / p>

我使用熊猫和scikit-learn,这是我第一次遇到文字分类问题。

谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

我建议使用NLTK,特别是nltk.classify.naivebayes。看一下这里的示例:http://www.nltk.org/book_1ed/ch06.html。您需要构建一个特征提取器。我会做类似以下(未经测试的)代码:

from nltk.classify import NaiveBayesClassifier

def word_feats(words):
    return dict([(word.lower(), True) for word in words])

train_data = [ (word_feats(L1), 'label1'), (word_feats(L2), 'label2') ]

classifier = NaiveBayesClassifier.train(train_data)

test_data = ["foo"]

classifier.classify(test_data)