0

对于所有机器学习的人。

我想知道的是如何借助用户偏好/点击形式的输入来搜索高维数据。

假设我有一个从特征向量生成图像的程序。该程序随机抽取 N 个向量样本,生成它们对应的图像,并在计算机屏幕上以网格的形式显示这些图像。接下来,用户点击他认为“最佳”的图像(在显示的 N 个图像中,并根据某些给定标准)。该程序现在生成另一个图像样本,将这些图像显示给用户,并重复该过程。

给定这样的系统,您将使用什么算法来找到“最佳”特征向量(和相应的图像)......在我正在研究的情况下,特征向量是长度为 512 的二进制值,网格是3x3(每次迭代选取 9 个向量)。此外,用户偏好或“最佳”是一个非常主观的衡量标准。

4

3 回答 3

1

由于问题空间很大,训练集的规模很小(正如 kudkudak 所说),我认为您需要强调利用迄今为止发现的知识。Thomson 采样将平衡探索与利用,但我担心您需要多次迭代才能使其工作。

您可以尝试翻转所选向量的 n 个随机位,然后在下一轮翻转 n-1 位,等等,而不是 Thomson 采样。这将是一个非常贪婪的算法,很可能以局部最小值结束,但目标是其他任何东西似乎很牵强(我认为)。

在这个问题上与遗传算法有明显的相似之处,交叉和变异具有探索/利用的作用。你可能会在那里找到一些灵感。

于 2013-09-18T11:13:21.267 回答
1

这是我目前的方法:

基本上,我目前正在做的是构建一个朴素贝叶斯分类器(它可能看起来很复杂,但实现起来相当简单)。对于每个特征的每个可能状态(512 个特征 * 2 个状态 = 1024),我分配了一个Beta先验,它估计了这个特定特征状态将导致用户“点击”的概率。当用户单击图像时,我会更新我的先验。

现在的问题是,如何生成一个包含 9 个样本向量的新列表以显示给用户?好吧,我意识到这是一个多臂强盗问题。为此,Thompson Sampling是一种易于使用的方法。对于每个向量和每个特征,我选择概率为 p 的状态(0 或 1),其中 p 与所选状态为最佳的概率成正比(即,导致我的朴素贝叶斯分类器的最大似然) . 为此,我只是从 Beta 分布中对处于状态 0 的特征以及处于状态 1 的特征进行采样。然后我根据哪个样本最大来设置特征。

这在某种程度上有效。

大警告:

我正在做的主要问题是我假设我的功能是独立的。不仅如此,部分原因是这些特征不是独立的,当我遍历这个时,分布会发生变化(部分地使以前的数据无效)。最后,我使用 Thompson 采样的方式可能不是最好的。

现在在哪里?

我的大问题是,一旦我有了朴素贝叶斯分类器,我该如何消除独立性假设?有了这个更新的模型,我还能做汤普森抽样之类的事情吗?

探索与剥削

汤普森抽样有助于平衡探索与利用。但由于我有 9 张图片可供选择,因此其中一些肯定更具剥削性。这是我必须保留当前模型的一个想法,但要使其更具剥削性。如果我们知道某个特征被设置的概率(基于 Thompson 采样),我们可以通过对该概率进行指数加权来使算法更具开发性。即:Pnew = p^w / (p^w + (1-p)^w)... 因为我要显示 9 张图像,我也许可以选择 w=[1..9]... 我们必须估计 p(一个 beta 随机变量大于另一个的概率)。为此,我可以使用矩匹配来估计正态分布,并从中确定概率。这在此处进行了描述-在 CrossValidated StackExchange 中. 为了进一步增强这一点,我可能会保留上一次迭代中选择的图像(仅提供 8 个新图像)。

于 2013-09-18T01:21:46.370 回答
0

我可能无法正确理解您的问题。我在这里看到您的问题的 2 种解释,或者您正试图在每个 3x3 网格中或从所有图像中找到最佳特征向量(图像)。我将尝试提出在这两种情况下都有效的方法。

由于高维和可能很小的训练集,这似乎很难。使用较小的向量会容易得多,您可以尝试应用降维算法(如 PCA、自动编码器)。

我想到的一种方法是进行 ELO 评级,即使这不是最终答案,您也可以随时使用它(例如作为特征向量的另一个条目)。

如果可能的话,我会首先降低维度。然后将用户点击转换为形式的训练集(v_1, v_2), y,其中 y 表示 v_1 图像或 v_2 图像更好(因此它是 1 或 0)。然后我们可以尝试为此训练一个分类器。它假设在每 3x3 中最好的特征向量获胜,并且其他示例不影响仅“成对”进行的决策,这是非常明智的。

为了找到最好的,我们可以比较所有n^2对,看看哪个特征向量得分最好。对于完美学习的模型,应该有一个比其他模型更好(传递关系)。


另一个想法是训练神经网络模型,为每个特征向量分配实数。现在对于每个训练示例(从 3x3 中选择最好的),我们可以获得 8 个比较,并查看特征向量的预测“分数”是否符合用户的偏好。对于训练错误:我们可以天真地要求神经网络使它们仅相差一个。或者我们可以利用 ELO 并通过 ELO 的差异来衡量差异。这使用了整个训练集的知识,应该会得到更好的结果

于 2013-09-17T21:48:50.910 回答