首页 > 编程语言 >回归问题求解 python---梯度下降+最小二乘法

回归问题求解 python---梯度下降+最小二乘法

时间:2024-04-20 17:22:05浏览次数:30  
标签:python 梯度 sum --- predict lr error grad 乘法

 

 

MSE = 1/m * ∑i=1m(yi−y^i)2

 

                                              
a = [1., 2., 3., 4., 5., 6., 7., 8., 9.]      
b = [3., 5., 7., 9., 11., 13., 15., 17., 19.] 
points = [[a[i],b[i]] for i in range(len(a))]

lr= 0.001
eps = 0.0001
m = len(points)
last_error = float('inf')
k = b = grad_k = grad_b = error = 0.0
for step in range(100000):
    error = 0.0  # 重新初始化误差为0
    for i in range(m):
        x,y = points[i]
        predict_y = x*k + b
        
        grad_k = (predict_y - y) * x  # 计算k的梯度
        grad_b = predict_y - y        # 计算b的梯度
        
        grad_k/=m
        grad_b/=m
        
        k-=grad_k*lr
        b-=grad_b*lr

        error += (predict_y - y) ** 2  # 累积误差

    if abs(last_error - error) < eps:
        break
    last_error = error

print('{0} * x + {1}'.format(k, b))

 

def liner_fitting(data_x,data_y):
      size = len(data_x);
      i=0
      sum_xy=0
      sum_y=0
      sum_x=0
      sum_sqare_x=0
      average_x=0;
      average_y=0;
      while i<size:
          sum_xy+=data_x[i]*data_y[i];
          sum_y+=data_y[i]
          sum_x+=data_x[i]
          sum_sqare_x+=data_x[i]*data_x[i]
          i+=1
      average_x=sum_x/size
      average_y=sum_y/size
      return_k=(size*sum_xy-sum_x*sum_y)/(size*sum_sqare_x-sum_x*sum_x)
      return_b=average_y-average_x*return_k
      return [return_k,return_b]

 

标签:python,梯度,sum,---,predict,lr,error,grad,乘法
From: https://www.cnblogs.com/zle1992/p/18147913

相关文章

  • MBR1040FCT-ASEMI超低VF值肖特基MBR1040FCT
    编辑:llMBR1040FCT-ASEMI超低VF值肖特基MBR1040FCT型号:MBR1040FCT品牌:ASEMI封装:TO-220F最大平均正向电流(IF):10A最大循环峰值反向电压(VRRM):40V最大正向电压(VF):0.54V~0.70V工作温度:-65°C~175°C反向恢复时间:5ns芯片个数:2芯片尺寸:74mil正向浪涌电流(IFMS):150AMBR1040FCT特性:......
  • POI2011ROZ-Difference
    POI#Year2011#枚举#贪心枚举最后差最大的两个字符\(a,b\),将原串中\(a\rightarrow1,b\rightarrow-1\),其他标\(0\)原来的问题转化为强制包含\(1,-1\)的最大字段和问题,维护每个位置前最近的\(-1\),贪心取最大的//Author:xiaruizeconstintMOD=1000000007;const......
  • POI2011PRO-Programming Contest
    POI#Year2011#Dinic#网络流#贪心容易想到拆点的费用流做法,但是二分再拆点的时间复杂度是不可接受的考虑因为每个的时间\(r\)是定值,所以不可能出现做题个数差超过\(1\)的情况所以每一轮每个分配一个,用\(Dinic\)在推进一次,知道满流//Author:xiaruizeconstintN=......
  • POI2011MET-Meteors
    POI#Year2011#整体二分整体二分板子,用树状数组维护即可//Author:xiaruizeconstintN=1e6+10;intn,m,t;vector<int>vec[N];structnode{ intl,r,x;}s[N];piia[N];structBIT{ inttr[N]; voidadd(intx,intv) { while(x<=m*2) { ......
  • POI2011LIZ-Lollipop
    POI#Year2011#构造#妙妙题假设能取到\(x\),那么\(\forally\),\(x,y\)奇偶性相同,\(x>y\),\(y\)一定可以是\(x\)的一个子区间,处理奇数和偶数的最大值,离线,从大到小做//Author:xiaruizeconstintN=1e6+10;intn,m;inta[N],s[N];piist,en;piiqry[N];p......
  • POI2011KON-Conspiracy
    POI#Year2011#数学考虑按照\(deg\)排序,然后暴力加入,这样可以得到一个极大的子集方案数分两种,一种为从团内去掉一个\(deg=siz-1\)的点,或者是将一个团外的\(deg=siz-1\)的点与一个团内的交换//Author:xiaruizeconstintINF=0x3f3f3f3f3f3f3f3f;constintMOD=10......
  • POI2011INS-Inspection
    POI#树上问题#贪心考虑什么样的点合法,这个点需要尽可能的均匀的子树,手摸几个发现,当且仅当这个点是重心的时候是可行的那么贪心的来说,我们希望最后一个不需要回来的路径长度尽可能的大,搜索就可以做到特判当有一个子树的\(siz\)为\(\frac{n}{2}\)时,最后的路径一定在这棵树......
  • POI2011DYN-Dynamite
    POI#Year2011#二分#树上dp二分答案对于每个点\(dp_{x,0/1}\)表示到\(x\),\(dp_{x,0}\)表示最远的没有被覆盖的点的距离,\(dp_{x,1}\)表示最近的被选中的点的距离转移按照题意,如果可以覆盖就覆盖,否则当留下来不合法就加点//Author:xiaruizeconstintN=3e5+10;......
  • 【CSP】202109-4 收集卡牌
    题目大意:小明抽卡,卡池共有n张卡,每张抽到的概率为pi,且每张重复的卡可以兑换成硬币,k个硬币可以兑换任意一张卡(硬币会攒起来在恰好可以兑换所有n张卡的时候一次性兑换)。问小明得到n张卡的期望抽卡次数是多少。(n<=16)分析:氪佬小明一看到n<=16就知道要状压dp,思路就是存储每一个状态......
  • 35-windows通过cmd查看端口占用,并停止该端口,杀死进程kill等命令
     1)cmd命令提示符窗口后,输入“netstat-ano”并按下回车执行,之后就会显示电脑上运行的所有端口号netstat-ano 2) 如果已知被占用的端口时,可以用命令netstat-aon|findstr8109直接找到端口号为7009的进程,PID为36304 netstat-aon|findstr8019 3) 根据PID进......