我有一组服装/配饰产品(由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。单棵树主要在你想提取实际规则时有用,据我所知,它们很少用于文本处理(通常有成千上万的特征/词,因此提取有意义的规则很困难)。如果你想使用基于树的方法,使用像随机森林或梯度提升这样的集成方法可能会产生更好的结果。