人类定向搜索

时间:2013-09-17 19:46:22

标签: search machine-learning pattern-matching artificial-intelligence bayesian

对于所有机器学习人员。

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

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

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

3 个答案:

答案 0 :(得分:1)

这是我目前的方法:

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

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

这在某种程度上有效。

BIG警告:

我正在做的主要问题是我假设我的功能独立。更重要的是,部分因为这些功能独立,分布会随着我的迭代而改变(部分地使之前的数据无效)。最后,我使用Thompson采样的方式可能不是最好的。

现在在哪里?

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

探索与剥削

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

答案 1 :(得分:1)

由于问题空间巨大且训练集的规模很小(正如kudkudak所说),我认为你需要充分利用到目前为止所发现的知识。汤姆森抽样将平衡探索与剥削,但我担心你需要多次迭代才能使其发挥作用。

取代Thomson采样,您可以尝试翻转所选矢量的n个随机位,然后翻转n-1位下一轮等。这将是一个非常贪婪的算法,最有可能最终在局部最小值,但瞄准对于其他任何事情似乎都很遥远(我认为)。

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

答案 2 :(得分:0)

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

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

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

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

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


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