【发布时间】:2019-08-23 08:54:17
【问题描述】:
我目前正在尝试根据它们的行为对一堆河流进行分类。许多河流的行为与二次多项式非常相似。
我想通过计算所有点与简单多项式的距离来对此进行分类。所以它基本上看起来像这样:
但为了能够做到这一点,我必须只计算那些“正常行为”的点的多项式。否则我的多项式会转移到发散行为的方向,我无法正确计算距离。
这是一些示例数据。
x_test = [-150,-140,-130,-120,-110,-100,-90,-80,-70,-60,-50,-40,-30,-20,-10,0,10,20,30,40,50,60,70,70,80,80,90,90,100,100]
y_test = [0.1,0.11,0.2,0.25,0.25,0.4,0.5,0.4,0.45,0.6,0.5,0.5,0.6,0.6,0.7, 0.7,0.65,0.8,0.85,0.8,1,1,1.2,0.8,1.4,0.75,1.4,0.7,2,0.5]
我可以用 numpy 从它创建一个多项式。
fit = np.polyfit(x_test, y_test, deg=2, full=True)
polynom = np.poly1d(fit[0])
simulated_data = polynom(x)
当我绘制它时,我得到以下信息:
ax = plt.gca()
ax.scatter(x_test,y_test)
ax.plot(x, simulated_data)
如您所见,多项式略微向下移动,这是由此处标记为黑色的点引起的:
是否有一种直接的方法可以找到那些不遵循主要趋势的点并将其排除以创建多项式?
【问题讨论】:
-
需要注意的一点是,这种方法对您选择的参考框架很敏感。如果选择的方式是所有点都“向上”,或者更糟糕的是,河岸倾斜超过 90°,这可能无法得出近似河流的解。不幸的是,我不知道有什么更好的方法,但是一旦我知道了就会回复你。
标签: python classification polynomial-math polynomial-approximations