收藏   订阅   蔚来影讯
你现在的位置:首页 » 业余爱好 » 正文

tensorflow 线性回归推导

时间:2019年09月15日 19:03:35 | 作者 :老马 | 分类 : 业余爱好 | 浏览:839 | 评论:0
import numpy as np
# 对给定的离散样本预测构建函数:y=wx+b 计算w b 使得预测y 与 真实的label 最小 ,这里采用均方误差 即 差的平方 做数据研究
points = np.loadtxt('./data.csv', delimiter=',')
# print(points,points[0,0],len(points))


def loss(w, b, points):
  loss = 0
  for i in range(len(points)):
    x = points[i,0]
    y = points[i,1]
    # loss = wx+b-label label 也就是数据集点的y值 也就是label
    loss += (w * x + b - y)**2
  return loss/len(points)


# 计算loss对w 和 b 的导数 并更新w_new b_new
def get_w_b(w_current,b_current,points,lr):
  w_gradient = 0
  b_gradient = 0
  # loss 对w导数 对b导数
  # 2 * (w * x + b - y) * x      2 * (w * x + b - y)
  # 计算初始的w b 遍历完所有点最后的累计变化值
  for i in range(len(points)):
    x = points[i,0]
    y = points[i,1]
    w_gradient += 2/len(points) * (w_current * x + b_current - y) * x
    # w_current ++
    b_gradient += 2/len(points) * (w_current * x + b_current - y)
    # b_current ++
    # 计算w b累计变化与w b初始值的变化值
  w_new = w_current - lr * w_gradient
  b_new = b_current - lr * b_gradient
  return w_new, b_new


# 迭代 更新 w b
def times_update_w_b(w,b,points,lr,num):
  w_current=w
  b_current=b
  for i in range(num):
    w_current,b_current = get_w_b(w_current,b_current,points,lr)
  return w_current,b_current


def main(points):
  lr = 0.0001
  num = 1000
  w = 0
  b = 0
  minloss = loss(w, b, points)
  print('当w={0},b={1}时候,loss为{2}'.format(w,b,minloss))
  w_new,b_new = times_update_w_b(w,b,points,lr,num)
  minloss = loss(w_new,b_new,points)
  print('尊敬的雇主,您好,经过本数据研究小组的测算,贵公司要求预测的参数w={0},b={1}时候,可以使得我们构建的模型得到最小的loss为{2}'.format(w_new,b_new,minloss))


if __name__ == '__main__':
    main(points)


上一篇:关于 pad_Sequence embedding用法 (未完待更新) 下一篇:tensorflow 切割数据集为两部分
本站致力于揭露全国影视投资诈骗案件 避免更多老百姓受骗上当
经历分享 请投稿

网络世界,不加微信QQ手机,留言沟通

发表评论

必填

回复后邮件通知

客服会联系您

◎欢迎参与讨论,聆听心声,下滑更多影视投资诈骗相关内容。

栏目
文章归档
标签列表