最小二乘python实现

什么是最小二乘法

通常用来对改定数据集D做线性回归,找到一条最逼近整个数据集的直线;在这里我只使用了一个属性到y的映射,其实也有多个属性可以同时进行映射,就需要用到降维的思想,例如我们有一对刮南瓜、西瓜、黄瓜;既可以使用三个坐标系将它们进行刻画。

让拟合直线上的每一个点距离D中的点的离均差的误差最小

Σ1m(f(xi)-yi)2

推理步骤

  • 当所有样本到直线上的点最小时,相当于对K和b求偏导为0
  • 分别对k和b的公式进行转换,得到k和b的值
  • 我发现它必定要过(x,y)的平均值的那个点

不想用markdown写数学公式

python实现

#coding=UTF-8
'''

进行一元数据的拟合

'''
x=[1,2,3,4,5,6,7]
y=[3,4,5,6,7,8,9]

###计算拟合参数######

def lineFitting(data_x,data_y):
    ###获取集合中样本数目
    size=len(data_x)
    ##构造遍历索引变量
    i=0
    ###声明公式中的变量
    sum_x=0
    sum_y=0
    sum_Xsquare=0
    sum_xy=0
    average_x=0
    average_y=0
    ######对各个变量进行赋值
    while i<size:
        sum_x+=data_x[i]
        sum_y+=data_y[i]
        sum_Xsquare+=data_x[i]*data_x[i]
        sum_xy+=data_x[i]*data_y[i]
        i+=1
    average_x=sum_x/size
    average_y=sum_y/size
    ###获取各个参数后直接套公式####
    k=(sum_xy-sum_y*average_x)/(sum_Xsquare-sum_x*average_x)
    b=average_y-k*average_x
    return [k,b]

#########计算拟合后的参数#########
fittingParameter=lineFitting(x,y)
print("y="+str(fittingParameter[0])+"*x"+"+"+str(fittingParameter[1])+"\n")

绘图

最后本来打算画一个图的,但是在服务器上跑脚本,图片就算了吧