上下文搜索:对购物产品进行分类

Contextual Search: Classifying shopping products

我从客户那里得到了一项新任务(不是传统的),它是关于机器学习的。 因为我从未去过 "machine learning" 除了一些数据挖掘的小东西所以我需要你的帮助。

我的任务是根据性别(产品所属的人)、年龄组等对任何购物网站上的产品进行分类,我们可以拥有的训练数据是产品的标题、关键字(可在html 的产品页面)和产品描述。

我做了很多研发,我发现Image Recog APIs(cloudsight,vufind)可以返回产品图像的细节但不能完全满足需求,使用google suggestqueries,搜索了很多机器学习算法,最后...

我开始了解 "Decision Tree Learning Algorithm" 但不知道它如何适用于我的问题。 我尝试了 "PlayingTennis" 数据集,但不知道该怎么做。

你能告诉我从哪里开始这段旅程的方向吗?我应该专注于决策树学习算法还是您建议我应该专注于根据上下文对产品进行分类的任何其他算法?

如果你说,我会详细分享我搜索的内容来解决我的问题。

请考虑支持向量分类器 (SVC),或者 Google 考虑支持向量机 (SVM)。如果你有一个大的训练集(我怀疑)搜索 "fast" 或 "scalable".

的实现

我建议执行以下操作:

  1. 浏览数据集中的项目并class手动验证它们(确定每个项目的性别)。存储每个决定,以便您能够以某种方式 link 具有目标 class.
  2. 的原始数据集中的每个项目
  3. 开发一种算法,将数据集中的每个项目转换为特征向量。该算法应该能够将原始数据集中的每个项目转换为数字向量(稍后将详细介绍如何执行此操作)。
  4. 将所有具有适当 classes 的数据集转换为如下所示的数据集:

Feature_1, Feature_2, Feature_3, ..., 性别

value_1, value_2, value_3, ...男

将其存储在 CSV 文件中是一个不错的决定,因为您可以加载它并在不同的机器学习工具中进行处理(稍后会详细介绍)。

  1. 在您选择的机器学习工具中加载您在第 3 步中创建的数据集,并尝试提出可以按性别class确定数据集中项目的最佳模型。

  2. 在步骤 4 中创建的商店模型。它将成为您的生产系统的一部分。

  3. 开发可以转换未class化产品的生产代码,从中创建特征向量并将该特征向量传递给您在第 5 步中保存的模型。此操作的结果应该是预测的性别。

详情

如果您的原始数据集中的项目太多(比如数万个),您自己 class 对其进行验证可能是不切实际的。您可以做的是使用 Amazon Mechanical Turk 来简化您的任务。如果您无法使用它(我上次检查过您必须有一个美国地址才能使用它),您只需 class 验证几百个项目即可开始在您的模型上工作并且 class 验证其余部分以提高 class 化的准确性(您使用的训练数据越多,准确性就越好,但达到一定程度)

如何从数据集中提取特征

如果关键字具有类似 tag=true/false 的形式,则它是一个布尔特征。 如果关键字的形式类似于 tag=42,则它是一个数字或 ordinal。例如,它可以是价格值或价格范围(0-10、10-50、50-100 等) 如果关键字有像 tag=string_value 这样的形式,你可以将它转换为 into a categorical value A class(性别)只是布尔值 0/1 您可以尝试一下如何提取特征,因为它可能会影响结果的准确性。

如何从产品描述中提取特征

有多种方法可以将文本转换为特征向量。寻找 TF-IDF 算法或类似的东西。

机器学习工具

您可以使用一个现有的机器学习库并修改一些代码来加载您的 CSV 数据集、训练模型并检查准确性,但首先我建议使用 Weka 之类的东西。它或多或少具有直观性 UI,您可以快速开始尝试不同的机器学习算法,将数据集中的不同特征从字符串转换为类别,或从实数值转换为序数值等。Weka 的优点是它具有 Java API,因此您可以自动执行所有数据转换过程、以编程方式训练模型等。

选择什么算法

我建议使用像 C4.5. It's fast and show good results on wide range of machine learning tasks. Additionally you can use ensemble of classifiers 这样的决策树算法。有多种算法可以组合多种算法,例如(google 用于提升或随机森林以了解更多信息)通常它们会提供更好的结果,但工作速度更慢(因为您需要 运行 单个特征向量通过几种算法。

可以用来使算法更准确的另一个技巧是使用适用于不同特征集的模型(例如,一种算法使用从标签中提取的特征,另一种算法使用从产品描述中提取的数据)。然后,您可以使用 stacking 等算法将它们组合起来,得出最终结果。

对于class基于文本提取特征的化,可以尝试使用Naive Bayes algorithm or SVM。它们在文本 classification.

中都显示出良好的结果