python实现最小二乘法_一元线性报错

python实现最小二乘法(一元线性)报错_心态爆炸啊

代码如下:

img

img

img

这里开始就出问题了

4.定义算法拟合函数,即把公式表示出来。

# 先把平均值给它求出来
def average(data):
    sum = 0
    num = len(data)
    for i in range(num):
        sum+=data[i]
        
    avg = sum/num
    return avg

# 开始手敲公式
def LeastSquareMutil(points):
    m = len(points)
    x_bar = average(points[:,0])
    
    
#     sum_yx = 0
#     sum_x2 = 0
#     sum_delta = 0
    
#     for i in range(m):
#         x = points[i, 0]
#         y = points[i, 1]
#         sum_yx += y * ( x - x_bar )
#         sum_x2 += x ** 2
#     # 根据公式计算w
#     w = sum_yx / ( sum_x2 - m * (x_bar**2) )
    
#     for i in range(m):
#         x = points[i, 0]
#         y = points[i, 1]
#         sum_delta += ( y - w * x )
#     b = sum_delta / m
    
    sum_yx=0
    sum_x2=0
    sum_y_xbar=0
    sum_y=0
    sum_x=0
    
    for i in range(m):
        x = points[:,0]# x表示每一行的第0号位元素
        y = points[:,1]# y表示每一行的第0号位元素
        #先求上半部分
        sum_yx+=(y*x)
        sum_y_xbar+=(y*x_bar)
        #再求下部分
        sum_x2+=(x**2)
    #出来循环之后,再优化调一下
    avg_m_sum_x2=sum_x2/m
    w=(sum_yx-sum_y_xbar)/(sum_x2-avg_m_sum_x2)
    
    #接下来计算b
    for i in range(m):
        x = points[:,0]# x表示每一行的第0号位元素
        y = points[:,1]# y表示每一行的第0号位元素
        sum_y+=y
        sum_x+=x
    #出来循环之后,再优化调一下
    avg_m_sum_wx = sum_x*w/m
    avg_m_sum_y = sum_y/m
    
    b=avg_m_sum_y-avg_m_sum_wx


    return w,b
    
    

img

img

到了第五部的时候可以看到输出的w,b以及cost都有一大推,每一个数的w,b,cost都给我显示出来了

没看到为啥啊,浅浅的学了点python = = ~,愣是没看懂。

  • 这篇博客: 逻辑回归与梯度下降策略之Python实现中的 3. 计算损失值cost 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 到这里数据算是已经准备完成,接下来我们就要根据参数计算损失,首先定义损失函数:
    在这里插入图片描述

    在这里插入图片描述
    损失函数代码:

    def cost(X, y, theta):
        left = np.multiply(-y, np.log(model(X, theta)))
        right = np.multiply(1 - y, np.log(1 - model(X, theta)))
        return np.sum(left - right) / (len(X))
    

    写完了损失函数,我们调用一下看看损失值:
    在这里插入图片描述
    我们现在也不用管这个损失值是大了还是小了,只要知道我们是能算出来的,公式是好用的就🆗了。