gpt4 book ai didi

python - 检测数据集线性部分的算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:38:15 26 4
gpt4 key购买 nike

我希望我是在正确的地方问这个问题,但我的问题如下:我有一组数据(两个列表 x 和 y),我没有太多关于这组的其他信息(没有功能,或者像这样的东西)。我的目标是找到该数据的线性子集(下图中以黄色突出显示的部分)。

enter image description here

正如您在绘制数据后在图像上看到的那样,我们可以看到它在一段时间内变为线性。我想自动检测该子集。因为我没有它背后的功能,所以我真的迷路了!!

有人知道如何做到这一点吗?我可以实现的算法或数学方法? (顺便说一句,我使用的是 python)

最佳答案

您可以首先使用 x 和 y 值确定两个点的斜率。

假设点 1 和 2,斜率 = 2。然后计算点 2 和点 3 的斜率。如果后者的斜率与前者不同,那么您就知道它不是线性的。

只需对整个数据集执行一个 for 循环,并将当前值与下一个值进行比较以获得斜率。

from decimal import Decimal
def linear_equation(p1,p2):
#points are arrays like p=(x,y)
m=slope(p1,p2) #slope
c=(p2[1]-(m*p2[0])) #y-intercept of line
return 'y='+str(m)+ 'x' +'+' +str(c)

def slope(p1,p2):
return Decimal((p2[1]-p1[1]))/Decimal(p2[0]-p1[0])

points =[[0,0],[1,1],[2,2],[3,4],[4,5],[5,6],[7,30],[8,35],[9,39]]


for p in range(0,len(points)-2):
#if the slopes of points (a,b) and (b,c) are the same then print the equation
#you could really omit the if statment if you just want to calculate the
#equations for each set of points and do the comparasons later.
#change the for condition to -1 instead of -2 if this is the case.
if slope(points[p],points[p+1]) == slope(points[p+1],points[p+2]):
print(str(lin_equ(points[p],points[p+1])))
else:
print("Non-Linear")

输出:

y=1x+0

非线性

非线性

y=1x+1

非线性

非线性

非线性

关于python - 检测数据集线性部分的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51136120/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com