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

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

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

我有训练和测试数据集,这些数据集是从整个数据集中随机均匀选择的子集,并已被手动分类。

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

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

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

产品属性包括以下内容:

  • 名称(str
  • 描述(str
  • 可用尺寸([str, str...]
  • 可用颜色([str, str…])
  • 价格(float
  • URL(str
  • 类别名称(str
  • 图片([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']}

回答:

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

首先,我建议你忽略图片,因为使用它们比较复杂。对于所有其他变量,你需要以适合机器学习的方式对它们进行编码。例如,可用尺寸可以根据是否有特定尺寸可用编码为0或1。颜色如果来自一组固定的字符串,可以编码为分类变量。如果这是一个自由文本字段,使用分类变量可能不是很好(例如,人们可能使用gray和grey,这将是两个完全不相关的数值,或者有拼写错误等)。

描述和名称可能对每个产品都是独一无二的,因此在那里使用分类变量没有意义,因为每个变量只会出现一次。对于这些,最好使用词袋方法进行编码。

你可以在scikit-learn文档的教程部分找到关于文本分类的教程。你可能也想看看其他教程。

最后,我建议从线性分类器开始,如朴素贝叶斯或LinearSVC。单棵树主要在你想提取实际规则时有用,据我所知,它们很少用于文本处理(通常有成千上万的特征/词,因此提取有意义的规则很困难)。如果你想使用基于树的方法,使用像随机森林或梯度提升这样的集成方法可能会产生更好的结果。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注