机器学习中的逆向预测

3
我对机器学习/数据科学中的逆预测有疑问。以下举个例子来说明我的问题: 我有20个输入特征X =(x0,x1,... x19)和3个输出变量Y =(y0,y1,y2)。训练/测试数据的数量通常很小,如训练集中的<1000个项目或甚至<100个项目。
通常情况下,通过使用机器学习工具箱(如scikit-learn),可以从X训练出模型(如随机森林、线性/多项式回归和神经网络)来处理Y。但实际上我想知道的是,比如说我应该如何设置X值,以便我可以在特定范围内获得y1值(例如y1> 100)。
有谁知道如何解决这种“逆预测”问题?我脑海中有两种方法:
1. 以正常方式训练模型:X-->Y,然后在高维度X空间中设置一个密集网格。在这个例子中,它有20个维度。然后将网格中的所有点作为输入数据并将其投入训练好的模型。选择所有预测的y1> 100的输入点。最后,使用一些方法(如聚类)来查找所选数据点中的某些模式。
2. 直接从Y学习模型。然后,在高维度Y空间中设置一个密集网格,使y1> 100。然后使用训练好的模型来计算X数据点。
当Y也有高维度时,第二种方法可能是可行的。但通常情况下,我的应用程序中Y的维度很低而X的维度很高,这使我认为第二种方法不太实用。
有没有人有新的想法呢?我认为这在工业中应该很常见,也许有些人之前遇到过类似的情况。
谢谢!

这通常被称为“反问题”;网络搜索将找到一些资源。在这种情况下,您有一个将更多维度m映射到较少维度n的F。如果F是可微的,我相信这意味着X中维数为m-n的集合映射到Y中的点。也就是说,X中所有这些点都映射到Y中的同一点。因此,任何这些点都是您反问题的解。您可以寻找满足某些标准(如最小范数标准)的点。 - Robert Dodier
为了找到一个解决方案,可以尝试最小化(F(X) - Y)^2 + G(X)关于X的值,其中Y是目标值,G是应用在等价类F(X) = Y中X的一些准则,例如X平方的范数。如果F是可微的,例如神经网络,可以采用梯度下降法。如果F是不可微的,例如决策树,则不确定模型会是什么样子。 - Robert Dodier
嗨,Rocco,你能解决这个问题吗?我遇到了类似的问题,想知道你的方法是怎样的。谢谢! - user3451660
2个回答

0
据我理解,#1非常适合这个问题。我建议您使用简单的二元分类器SVM来区分好/坏的X向量。SVM在高维空间中表现良好,并且在大多数SVM接口中读取系数很容易。

谢谢Prune!这是结合您的建议得出的想法:1.在手动生成的高维网格上使用训练模型。2.最后一步的结果是我们有比初始训练数据更多的数据点,其中一些数据点很好(y1>100),其余的则不好(y1<100)。3.使用SVM来查找好/坏的模式--寻找哪些X设置(X0,...,x19)更可能给出好的结果(y1>100)。我说得对吗? - Rocco
下一个问题是,如果我可以使用上述方法解决问题,为什么不直接在初始训练数据集上使用SVM?因为我通常有小的数据集。 - Rocco
如果您只想区分哪些输入会产生 y1 > 100 的输出,那么直接使用 SVM 可能是个不错的选择。从您的长篇演示中,我了解到您也需要第一组结果。 - Prune

0

类似的注意事项可能会有用: 在反向预测中,我们可以通过解决方程组X<---->Y并假设权重和截距来逆向预测,其准确性与直接/正向预测X--->Y和反向预测Y--->X相似。此外,通常对于线性问题AX=B而言,这样做更好。请注意,通常情况下,Python代码进行反向预测时,在解决方程组(n*n)时存在相当大的误差,因此更好的选择是具有适当精度的方法。 问候


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接