Python 复杂对象的决策树分类

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

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

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

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

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

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

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

产品属性包括以下内容:

  • 名称(str)
  • 描述(str)
  • available_sizes ([str, str...])
  • available_colours ([str, str...])
  • 价格( float )
  • 网址 (str)
  • category_name (str)
  • 图像([str, str...] - url)

产品示例:

{   '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']}

最佳答案

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

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

每个产品的描述和名称可能都是唯一的,因此使用分类变量没有意义,因为每个产品只会被看到一次。对于这些,最好使用词袋方法对它们进行编码。

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

最后,我建议从线性分类器开始,例如朴素贝叶斯或 LinearSVC。如果您想提取实际规则,单树最有用,并且很少用于文本处理(通常有数万或数十万个特征/单词,因此提取有意义的规则很困难)。如果您想使用基于树的方法,那么使用随机森林或梯度提升等集成很可能会产生更好的结果。

关于Python 复杂对象的决策树分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26712080/

相关文章:

python - 在 scikit-learn 中对多个随机森林模型进行平均

python - 如何关闭 mechanize 浏览器?

python - 显示为框的刻度标签上的 matplotlib 负数

python - Scikit-learn - ValueError : Input contains NaN, 无穷大或对于 dtype ('float32' 的值太大)与随机森林

python - countVectorizer Scikit-learn 中的特殊字符

machine-learning - 使用机器学习 (ANN) 对奇数进行分类

python - <class 'UnicodeDecodeError' > 仅出现在 Python 3 中,而不出现在 Python 2 中

python - 获取时间日期范围

python - Keras:两个同时层,其中一个对前一层的输出进行卷积

machine-learning - kNN 最先进的实现