机器学习非常简单的文本分类?

Die*_*ter 15 python algorithm machine-learning text-analysis

可能重复:
文本分类到类别

我目前正在研究一种解决方案,根据他们的描述,在10k餐厅的数据库中提供食物类型.我正在使用关键字列表来决定提供哪种食物.

我读了一下机器学习,但我根本没有实际经验.任何人都可以向我解释是否/为什么它会更好地解决这样一个简单的问题?我发现准确性比性能更重要!

简化示例:

["China", "Chinese", "Rice", "Noodles", "Soybeans"]
["Belgium", "Belgian", "Fries", "Waffles", "Waterzooi"]
Run Code Online (Sandbox Code Playgroud)

可能的描述可能是:

"香港花园餐厅为我们的顾客提供咸味,价格合理的中餐.如果您发现周六晚上8点突然想要 米饭,面条大豆,请不要担心!我们开放七天一个星期,提供结转服务.你也可以在这里吃薯条!"

ami*_*mit 57

您确实描述了一个分类问题,可以通过机器学习来解决.

在此问题中,您的功能是说明中的单词.您应该使用Bag Of Words模型 - 这基本上表示每个单词的单词及其出现次数对分类过程至关重要.

要解决您的问题,请执行以下步骤:

  1. 创建一个特征提取器 - 给出餐馆的描述,返回该餐厅的"特征"(在上面解释的Bag Of Words模型下)(在文献中表示为示例).
  2. 手动标记一组示例,每个示例都标有所需的类(中文,比利时,垃圾食品......)
  3. 将标记的示例输入学习算法.它将生成一个分类器.根据个人经验,SVM通常会给出最好的结果,但还有其他选择,如朴素贝叶斯,神经网络决策树(通常使用C4.5),每个都有自己的优势.
  4. 当一个新的(未标记的)示例(餐馆)出现时 - 提取功能并将其提供给您的分类器 - 它会告诉您它的想法(通常 - 分类器的正确概率是多少).

评估:
您的算法评估可以通过交叉验证完成,或者从您的标记示例中分离出一个测试集,该测试集仅用于评估算法的准确性.


优化:

从个人经验来看 - 这里有一些我认为对特征提取有帮助的优化:

  1. 阻止和消除停用词通常会有很大帮助.
  2. 使用Bi-Grams倾向于提高准确性(尽管显着增加了特征空间).
  3. 有些分类器容易出现大的特征空间(不包括SVM),有一些方法可以克服它,例如降低特征的维数.PCA是一件可以帮助你的东西.对于子集选择,Genethic Algorithms(经验)也非常好.

图书馆:

不幸的是,我对python不够流利,但是这里有一些可能有用的库:

  • Lucene可能会对文本分析提供很多帮助,例如 - 可以使用EnglishAnalyzer完成词干.有一个叫做PyLucene的python版本的lucene ,我相信它可以帮到你.
  • Weka是一个开源库,为机器学习实现了许多有用的东西 - 包括许多分类器和功能选择器.
  • Libsvm是一个实现SVM算法的库.

  • 我不确定"倾向于大型特征空间"是什么意思,但LibSVM不是文本分类的一个很好的选择,因为它的训练算法在样本数量上缩放为O(n³).同一作者的Liblinear对于这种任务来说要好得多.我自己项目的广告:[scikit-learn](http://scikit-learn.org)提供了两者的Python绑定,以及你建议的几乎所有其他算法的实现. (4认同)