想成为博客专家的渣渣
2020-02-22 14:04
采纳率: 50%
浏览 572

关于机器学习梯度下降求 w 和 b 的问题

# 类目的求解斜率和截距
class Linear_model(object):
    def __init__(self):
        self.w = np.random.randn(1)[0]

        self.b = np.random.randn(1)[0]
        print('----------------------起始随机生成的斜率和截距',self.w,self.b)

#   model就是方程f(x) = wx + b
    def model(self,x):
        return self.w * x + self.b

#   线性问题,原理都是最小二乘法
    def loss(self,x,y):
#         方程中几个未知数???
        cost = (y - self.model(x))**2

#         求偏导数 ,把其他的都当成已知数,求一个未知数的导数
#         导数是偏导数的一种特殊形式
        g_w = 2*(y - self.model(x))*(-x)
        g_b = 2*(y - self.model(x))*(-1)
        return g_w,g_b

#     梯度下降
    def gradient_descend(self,g_w,g_b,step = 0.01):
#         更新新的斜率和截距
        self.w = self.w - g_w*step
        self.b = self.b - g_b*step
        print('----------------------',self.w,self.b)

    def fit(self,X,y):
        w_last = self.w + 1
        b_last = self.b + 1
        precision = 0.00001
        max_count = 3000
        count = 0
        while True:
            if (np.abs(self.w - w_last) < precision) and (np.abs(self.b - b_last) < precision):
                break

            if count > max_count:
                break

#             更新斜率和截距
            g_w = 0
            g_b = 0
            size = X.shape[0]
            for xi,yi in zip(X,y):
                g_w += self.loss(xi,yi)[0]/size
                g_b += self.loss(xi,yi)[1]/size

            self.gradient_descend(g_w,g_b)
            count += 1

    def coef_(self):
            return self.w

    def intercept_(self):
            return self.b

请问
def fit(self,X,y):
w_last = self.w + 1
b_last = self.b + 1
这里为什么

w_last = self.w + 1
b_last = self.b + 1

加一是什么意思

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • qq_44837381 2020-02-22 14:54
    已采纳

    fit函数里面的while循环里的第一个if语句是想判断当前求得的self.w的精度,如果self.w和b的改变小于precision即认为精度达到要求,退出循环!

    而第一次while循环时明显没有可以拿来比较的,所以自己定义一个与self.w差距为1的w_last 来保证if判断

    实际上你可以改成2,3,4,0.5都可以,随意。

    点赞 打赏 评论
  • blownewbee 2020-02-22 14:43

    估计是原始取值是-1~1,要调整到0~2

    点赞 打赏 评论

相关推荐 更多相似问题