哪些监督学习算法可用于匹配?

数据挖掘 机器学习 初学者 相似 监督学习 推荐系统
2021-09-28 04:35:15

我正在一个非营利组织工作,我们试图通过将他们与想要分享他们的经验/智慧的校友匹配来帮助潜在的大学申请者,目前,它是手动进行的。所以我会有两张桌子,一张是学生,一张是校友(他们可能有一些共同点,但不一定是全部)

NameGenderHeightKathyF165TommyM182RuthF163......... NameGenderWeightMiss LucyF65Miss GeraldineF70Miss EmilyF60.........

目前,我们正在手动将表 1 的成员与表 2 中的成员进行匹配。我们还将在匹配后收集信息(“匹配得好吗?请从 1 到 10 进行评分”)。所以它看起来像这样:

Person #1Person #2Match?RuthMiss LucyNTommyMiss EmilyYKathyMiss GeraldineNRuthMiss EmilyN.........

我想为此过程使用学习算法。我知道一点机器学习,但我还是个新手(所以这也是我了解它的机会),但我无法理解你将如何进行这种监督学习当您有两组都具有多个功能时。有哪些匹配算法可以做到这一点?(另外,我更喜欢在 R 中工作)

(顺便说一句,如果您能指出我正确的方向,我将不胜感激,我会尝试阅读并自己解决它。另外,我知道看到已经回答的问题是多么令人沮丧-- 如果是这种情况,请不要犹豫,在不回答问题的情况下让我知道。我已经尝试在 Google 和 StackExchange 上搜索各种字符串,但大多是在图论上找到似乎不是的讲座幻灯片我在找什么(尽管可能只是因为它有点超出我的想象)。非常感谢!)

3个回答

您可以尝试将此问题描述为推荐系统情况。您在哪里拥有您的用户(准学生)和项目(校友),并希望向用户推荐一个项目。

这不是一个完美的匹配,因为您只需要为每个用户提供一个项目,并且您没有每个用户以前的匹配数据。但是,您可以进一步研究这个想法。我正在将这些技术应用于招聘问题,我正在将用户与工作机会相匹配,并且取得了一些成功。

尝试阅读一些关于推荐系统的内容,首先我推荐挖掘海量数据集的第 9 章,它确实是介绍性的,但很好地概述了最常用的技术。

我会将问题分为两部分:

  1. 预测某对是否会是一个很好的匹配。
  2. 匹配对。

首先,让我们讨论预测问题。我认为您应该将匹配对视为监督学习问题,而不是推荐问题。正如若昂·阿尔梅达(João Almeida)所写,新生不会与校友有任何以前的关系。
即使是校友,以前的关系也很少。我会为每个校友添加一些基于聚合的特征(例如,过去的关系数量,过去良好匹配的比率)。

之后,您应该使用“匹配?”构建过去对的数据集。作为概念。尚不清楚您是否能够学习一个好的匹配规则,即使它存在。我猜你的数据集很小。如果匹配的概率很低,则可能存在不平衡问题。正如 AN6U5 评论的那样,身高和体重是非常奇怪的特征,无法将学生与校友相匹配。计算特征和概念之间的关系(例如互信息皮尔逊相关),看看你是否有有用的特征。

至于第二个问题,即使你能很好地预测一对是否会是一个很好的匹配,你仍然有一个算法问题,即使用哪一对。考虑一个适合任何学生的“超级校友”。你不会想把它与“超级学生”相匹配,而是与一个很难与其他校友相匹配的学生。幸运的是,您可以使用匹配算法。以学生和校友为节点构建图表。如果您预测一个好的匹配并在其上运行匹配算法,则创建一条边

当您有一些关于好/坏匹配的历史数据(以及描述这些匹配的“好”特征)时,您可以尝试使用Siamese Neural Network这种类型的模型是“few shot”模型,这意味着它旨在处理相对少量的(训练)数据和潜在的噪声特征。

本质上,您将模型拟合到(训练)数据对(“匹配”)。该模型将学习解释可用特征,以便计算对之间的欧几里得距离,例如0=“没有距离”(完美匹配)vs.1=“最大距离”(非常差的匹配)。好消息是,即使观察结果很少,您也可以生成大量训练数据(通过配对)(整个想法来自于训练图像很少的图像分类,就像一个魅力!)。

一旦你有一个训练有素的模型并且你想为大学申请者找到一个新的匹配,你可以简单地制作(假设的)对来由模型预测,例如:

1 Applicant A <-> Alumni 1
2 Applicant A <-> Alumni 2
3 Applicant A <-> Alumni 3

当您将这些(假设的)匹配项提供给网络并进行预测时,您将获得这些对的“距离”向量,例如:

1 0.83
2 0.06
3 0.56

假设你的训练数据没问题并且你的模型运行良好,你可以立即对可能的匹配进行排名(距离越小越好,即 231 在上面的例子中)。

我是连体网络的忠实粉丝。它们可能有点复杂,但是当你得到正确的模型时,孪生网络非常强大(并且通常比替代模型/方法更强大)。

我手头没有 R 中的示例代码。但是,请参阅此 GitHub存储库,了解 Python 中使用 Keras/Tensorflow 的连体神经网络的“玩具版”。该模型使用“虹膜数据”(三类)。您应该能够为您的用例使用现成的大部分代码(数据准备和模型)。也许调整模型的某些部分,例如隐藏层。由于 Keras 也可用于 R,因此您可以将模型调整为 R。

对于预测部分,只需如上所述预测单个对(与代码示例中的类平均不同)。

请注意,示例代码中的模型使用自定义 lambda 层。所以当你保存模型时,你只需要保存权重当您加载模型进行预测时,只需以纯代码加载模型并添加(加载)权重。Keras 的保存/加载命令无法正确编译 Lambda 层。因此,只需要对模型进行硬编码并加载权重。