Python拟合线性平台曲线

问题描述

我的曲线最初 Y 随 X 线性增加,然后在 C 点达到平台。 换句话说,曲线可以定义为:

if X < C: 
    Y = k * X + b
else: 
    Y = k * C + b

训练数据是 X ~ Y 值的列表。我需要通过机器学习方法(或类似方法)确定 k、b 和 C,因为数据是嘈杂的,并且反射点 C 会随时间变化。我想要比通过观察当前样本数据获得 C 更强大的东西。 我如何使用 sklearn 或 scipy 来做到这一点?

解决方法

WLOG 你可以说第二个等式是

Y = C

看起来你有一个线性回归来拟合这条线,然后是一个检测点来找到常数。

您知道在 X 的高值中,就像在 X > C 中一样,您已经处于常量。因此,只需检查 X 的值回退多远即可获得相同的常数。

然后进行线性回归以找到 X 值为 X <= C 的线

,

您的模型是非线性的 我认为解决这个问题最聪明的方法是执行以下步骤:

  1. 求 Y 的最大值,它等于 k*C+b
M=max(Y)
  1. 从数据集中删除这个最大值

df1 = df[df.Y != M]

然后你有简单的数据集来拟合你的 X 到 Y,你可以使用 sklearn 来