如何仅通过 5 到 7 个数据点估计逻辑回归的上限?

机器算法验证 物流 估计
2022-03-12 11:08:44

我的数据格式为对于的估计,我使用本文的公式:John Fox - Nonlinear Regression and Nonlinear Least Squares 在本文中,通过查看数据来估计如果我这样做,它会很好,即使我只有三分。由此我可以计算出另外两个。我用 R 中的 nls() 和 C# 中的 LevenbergMarquardt 测试了我的参数。他们返回的模型令人满意。y=β11+exp(β2+β3x)β1β3β1

问题是我不想查看数据来获得的良好估计,我希望我的程序计算它。有一段时间,我使用的值略高于我的最大值(介于\max * 1.5之间。只要这些点覆盖了大部分函数,​​它就可以正常工作。如果数据点位于曲线“顶部”的某个位置,但是当它们都来自拐点“下方”的区域时,这个估计值肯定低于应有的值,我无法拟合模型。如果我使用一些东西这绝对高于最大值(通过将它与高得离谱的值相乘)模型不适合任何有用的方式。β1max1.1max1.5

测量可能如下所示:

x = (40, 50, 60, 70), y = (1000, 950, 400, 200) -> 容易估计

x = (40, 50, 60, 70), y = (1000, 950, 800, 100) -> 容易估计

x = (40, 50, 60, 70), y = (500, 200, 100, 50) -> 不太容易估计

我想我可以通过计算给定点中的增量并根据它计算上限来找出我在函数中的位置(在“底部”、“顶部”、斜坡中)。有没有人暗示更好的解决方案?附加信息:如果无法做到,对我来说更重要的是可以适合的测量值尽可能好,并且我接受某些测量值根本不适合。

(虽然我想在 C# 中实现我在这里发布,但我认为问题与语言无关)

更新(此应用):

x 是温度值,y 是相应的测量值。从本质上讲,它应该看起来像在较低温度下具有较高 y 值的逻辑曲线,反之亦然。熔点等于曲线的拐点,随着模型参数的微小变化而变化很大。

更新(有些由 7 个数据点组成,已知拐点为 60):

//first I made up some data without any noise and enough (13) points
double[] x17 = { 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90 };
double[] y17 = { 2000, 1920, 1820, 1700, 1500, 1280, 1000, 720, 500, 300, 180, 80, 0 };
//calculated inflection point: 59.642....

//Then I took three different parts of that data 
(to simulate how much data I will have in the real world)
double[] x18 = { 30, 35, 40, 45, 50, 55, 60 };
double[] y18 = { 2000, 1920, 1820, 1700, 1500, 1280, 1000 };
//calculated inflection point: 59.263.... is ok!

double[] x19 = { 60, 65, 70, 75, 80, 85, 90 };
double[] y19 = { 1000, 720, 500, 300, 180, 80, 0 };
//calculated inflection point: 53.447.... to small!

double[] x20 = { 45, 50, 55, 60, 65, 70, 75 };
double[] y20 = { 1700, 1500, 1280, 1000, 720, 500, 300 };
//calculated inflection point: 59.868... almost perfect!

我目前的上限估计方法是 y0 * y0 / y1。这样我希望考虑到我可能并不总是有一个接近最大值的值。

更新: x 和 y 值永远不会是负数。除非数据点丢失,否则 x 将始终为 { 40, 45, 50, 55, 60, 65, 70 }。

更新: 我对应该易于拟合的模拟数据进行了很多很多测试(我选择了恰好在曲线上的数据点 = 没有任何噪音),我发现它工作正常,除非第一个或第二个数据点(其中x=40 或 x=45) 丢失。我想我将不得不放弃这样的测量,而用户将不得不忍受它。

1个回答

今年早些时候我研究了一个类似的问题。我使用的解决方案是基于这篇论文,它使用线性代数来消除,最大值。这样,剩余参数的结果,一旦通过某种程序确定(我只是最小化了误差表面,与论文中的相同),就可以在最后推断出β1β1

直观地说,这个解决方案的前提是所有具有相同速率和位置参数的逻辑曲线都是自相似的,因此设置上限只是意味着将 S 形曲线“拉伸”到适当的最大值。