当我们拥有群组的数据时,如何专门针对群组中的个人进行机器学习?

数据挖掘 机器学习 神经网络 scikit-学习 预测建模 随机森林
2022-01-28 23:14:59

让我们在下图的帮助下指定问题:我们知道行为的一部分(我们的目标 Y)将取决于公共参数(对于组)。它由图中的灰色区域表示。而那一部分是特定于每个人的参数。(由粉色和蓝色区域表示)

确切的问题是:

知道我们有来自整个组的数据。如何使用组的所有数据,为这个组的个人创建一个特定的模型?这个想法是获得一个可靠的模型/结果,因为它基于所有可用数据,但仍然特定于个人。 我想以实现这一目标的技术的简短列表的形式给出答案。

在此处输入图像描述

让我们用一个例子来说明这个问题:

我们对 100 人进行了研究。让我们命名这些人 [0, 1, 2, 3, 4, 5 ... 99] 对于每个人,我们进行 30 天的研究。每天,我们对人 (X) 的情绪进行 5 次测量。然后测量晚餐中卡路里的数量(Y)。

在此示例中,使用机器学习的目标是在第 55 天(测试后)知道第 3 个人的 X,以便能够预测给定人的 Y(在第 55 天)。我经常遇到这个问题。通过我的实验、测试和研究,我看到了两种可能性:

  • 第一种选择是采集所有样本。100 人 * 30 次测量(5 个样本 x 和 y)= 3000 点。我们创建了一个将 x 连接到 y 的模型。然后我们采用新的 x(对于第 3 个人),并“预测”y。然后我们有一个答案,它考虑了所有观察结果,但不考虑 3 号人的特殊性。模型和答案是人群的“平均行为反应”。该模型更对应于您在上图中看到的灰色区域。

  • 第二个选项是仅从人员 3 获取信息来创建模型。我们有 30 分。我们创建了一个将 x 连接到 y 的模型。该模型确实特定于第 3 个人。由于模型使用的点较少,因此准确性较低。我们没有使用灰色区域的全部知识/数据。

我有一种深刻的直觉,有一种方法可以比这两个选项做得更好。我尝试了很多,但没有令人满意的成功。

我尝试使用随机森林算法同时使用所有数据并在 X 向量中添加一个 id。此 id 代表个人。它似乎没有奏效。我在这个主题上所做的互联网搜索给了我不相关的结果。欢迎任何有关此主题的帮助或关键字。

我共享示例数据集是否有用或有必要?

1个回答

还有许多其他选项。在它们之间进行选择的方法是问自己:你将如何部署这个分类器?分类器可以使用哪些数据?

可以构建一个仍然能够为特定人个性化的模型。您可以通过添加另一个标识此人的属性来做到这一点;通常,这将被编码为 one-hot 向量,因此您有 3000 个数据点,每个数据点都有一些与其情绪测量相关的特征,再加上 one-hot-encoded 标识向量的 100 多个特征。

确切的细节取决于测试时可用的数据。假设您将尝试根据过去一周的情绪测量来预测晚餐中的卡路里数量。然后你有个数据点(每个人的前 6 天不可用,因为你还没有一周的情绪测量)。每个数据点有 135 个特征:35 个特征用于过去 7 天的情绪测量,100 个特征用于 one-hot-encoded 向量。然后你训练一个模型。100×(306)=2400

如果您使用这种方法,则需要注意如何将数据拆分为训练集、验证集和测试集。我建议您按而不是按数据点拆分;所以如果你想要一个 60/20/20 的分割,你选择 60 人在训练集中(导致训练集中 60 ×数据点,20 人在验证集中(数据)点),测试集 20 人(数据点)。这是基于一个部署场景,你根据一些人的数据训练一个模型,然后预测一个新人的卡路里,你不要根据新人的历史数据重新训练它。60×2420×2420×24

希望您能看到如何根据部署场景进行调整。基本原则是弄清楚分类器在实践中将如何使用,然后选择与它的使用方式相匹配的评估策略。


另一种选择是首先尝试将用户聚集到几个集群中,并构建一个分类器来预测每个人所在的集群。然后,为每个集群构建一个模型。


第三种选择是尝试识别该人的一些额外属性,以帮助您预测他们的卡路里消耗量。将此添加为附加功能 (W)。例如,这可能是性别或人口统计数据或您认为具有预测能力的任何其他内容。