Python决策树对复杂对象的分类

时间:2014-11-03 10:19:07

标签: python machine-learning scikit-learn classification decision-tree

我有一系列具有各种属性的服装/配饰产品(由Python对象表示)。这些产品是通过查询外部API和抓取商家网站以获得各种属性而生成的。

我的目标是开发一种分类器,使用这些属性对产品进行正确分类(即分类为裤子,T恤,连衣裙等)。

我有一个训练和一个测试数据集,它们是随机统一选择的整个数据集的一个子集,已经手动分类。

我和一位专门研究机器学习的前大学同事交谈,他建议使用决策树。但是,Python中的决策树库似乎非常注重数字(而不是专注于基于文本属性对数据进行分类)。

我知道像Scikit Learn这样的图书馆,但从我的简短分析来看,它们通常涉及规则的逻辑比我要求的更简单。

任何关于方法,库,代码结构等的建议都将不胜感激。但是,这个问题的主要焦点是哪个Python机器学习库(如果有的话)最适合这个任务

产品属性包括以下内容:

  • 名称(str
  • description(str
  • available_sizes([str, str...]
  • available_colours([str,str ...])
  • 价格(float
  • url(str
  • category_name(str
  • images([str, str...] - urls)

产品示例:

{   'category': u"Men's Accessories",
    'colours': [u'White'],
    'description': u'Keep your formal style looking classic with this white short sleeve Oxford shirt with roll up sleeve detailing.',
    'ean': u'',
    'gender': u'M',
    'images': [   u'http://media.topman.com/wcsstore/TopMan/images/catalog/83D21DWHT_large.jpg',
                  u'http://media.topman.com/wcsstore/TopMan/images/catalog/83D21DWHT_2_large.jpg',
                  u'http://media.topman.com/wcsstore/TopMan/images/catalog/83D21DWHT_3_large.jpg',
                  u'http://media.topman.com/wcsstore/TopMan/images/catalog/83D21DWHT_4_large.jpg'],
    'last_scraped': datetime.datetime(2014, 11, 1, 7, 13, 28, 943000),
    'merchant_id': 2479L,
    'merchant_uri': u'http://www.topman.com/en/tmuk/product/white-oxford-short-sleeve-shirt-157702?geoip=noredirect',
    'name': u'White Oxford Short Sleeve Shirt',
    'price': 26.0,
    'sizes': [u'XXS', u'XS', u'S', u'M', u'L', u'XL', u'XXL']}

1 个答案:

答案 0 :(得分:2)

您可以使用scikit-learn,但需要预处理数据。决策树的其他实现可以直接处理分类数据,但这并不能解决您的问题。您仍然需要预处理数据。

首先,我会遗漏图像,因为使用它们有点复杂。 对于所有其他变量,您需要以对机器学习敏感的方式对它们进行编码。例如,可用的大小可以编码为0或1,具体取决于给定大小是否可用。 如果颜色来自固定的字符串集,则可以将颜色编码为分类。如果这是一个自由文本字段,使用分类可能不是很好(例如,人们可能使用灰色和灰色,这将是两个完全不相关的值,或者有拼写错误等)。

每个产品的描述和名称可能都是唯一的,因此使用分类变量并不合理,因为每个产品只能看一次。对于这些,最好使用一袋单词方法对它们进行编码。

您可以在tutorials section of the scikit-learn documentation中找到有关文本分类的教程。您可能也希望查看其他教程。

最后,我建议从线性分类器开始,如Naive Bayes或LinearSVC。如果你想提取实际规则,单树很有用,并且很少用于文本处理afaik(通常有数十或数十万个特征/单词,因此很难提取有意义的规则)。如果你想使用基于树的方法,使用像随机森林或梯度增强这样的集合很可能会产生更好的结果。