想到了一种计算线性回归方程的方法,不是学数学的,请教一下大家这种方法已经有了?有没有具体的名字?
具体是一系列的点中,假设有n个点,取两个相邻的点a(x1,y1)和b(x2,y2),得到两个点中间的点c((x1+x2)/2,(y1+y2)/2),每两个点都可以计算一个中间的点,n点计算一次有(n-1)个点,将这(n-1)个点按照同样的方法再计算,得到(n-2)个点,一直计算下去,直到只有两个点,既可以得到一条回归直线。
计算示例图:
与正常的线性回归曲线对比:蓝色的是正常的,绿色的是我想的这种方法计算出来的线性回归曲线。
用代码进行递归计算就能很快的计算出来,但是前提是先把坐标点进行排序,排序规则为先看x轴,从左到右,相同时再看y轴,从下到上。
- import numpy as np
- x1 = [5,7,8,7,2,17,2,9,4,11,12,9,6]
- y1 = [99,86,87,88,111,86,103,87,94,78,77,85,86]
- arr=[]
- for yy in range(len(x1)):
- rr=[x1[yy],y1[yy]]
- arr.append(rr)
- arr.sort()
- def line(arra):
- if len(arra) > 2:
- arr2=np.array(arra)
- tmptmp=[]
- for x in range(len(arr2)-1):
- tmp1=np.array(arr2[x])
- tmp2=np.array(arr2[x+1])
- h1=(tmp1[0]+tmp2[0])/2
- h2=(tmp1[1]+tmp2[1])/2
- tmp3=[h1,h2]
- tmptmp.append(tmp3)
- line(tmptmp)
- else:
- print(arra)
- line(arr)
复制代码 |