当前位置 博文首页 > 文章内容

    python代码利用梯度下降法实现简单的线性回归

    作者: 栏目:未分类 时间:2020-10-20 18:00:59

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    
    
     1 def myregression():
     2     #由于在tensofflow2.0以上的版本,eager execution 是默认开启的。如果不加此语句,直接运行程序将会报错
     3     tf.compat.v1.disable_eager_execution()
     4     '''
     5     自实现一个线性回归预测
     6     :return:
     7     '''
     8     #1.准备数据,x特征值[100,1],y目标值[100]
     9     x=tf.compat.v1.random_normal([100,1],mean=1.75,stddev=0.5,name='x_data')
    10     #假设y的真实值为y=0.7x+0.8,a的值随机给为0.7,b偏置的值随机给0.8
    11     #矩阵相系必须是二维的,故[[0.7]]  y_true为训练集数据
    12     y_true=tf.matmul(x,[[0.7]])+0.8  
    13 
    14     #第二步:建立线性回归模型。确认了只有一个特征,故只有一个权重,一个偏置 y= w x+b
    15     #随机给一个权重和偏置的值,让他去计算损失,然后当前状态下优化
    16     #因为权重训练的过程中,不断变化,故初始化用的是variable.mean和stddev随机给为0.0,1.0
    17     weight=tf.Variable(tf.compat.v1.random_normal([1,1],mean=0.0,stddev=1.0,name='w'))
    18     #偏置初始值为0.0,后面下降时不断+1
    19     bias=tf.Variable(0.0,name='b')
    20     #预测的结果=x * weight +bias
    21     y_predict=tf.matmul(x,weight)+bias
    22 
    23     #3、建立损失波函数,均方误差.--先求每个样本的误差的平方,然后将误差平方进行求和之后求平均值。 即全部相减求平方之后再相加的总数再除以样本数
    24     #最后返回其损失
    25     loss=tf.math.reduce_mean(tf.math.square(y_true-y_predict))
    26 
    27     #4、梯度下降优化损失 learning_rate随机指定.最小化损失.返回op
    28     train_op=tf.compat.v1.train.GradientDescentOptimizer(learning_rate=0.1).minimize(loss)
    29 
    30     #定义一个初始化变量的op
    31     init_op=tf.compat.v1.global_variables_initializer()
    32     #通过会话运行程序
    33     with tf.compat.v1.Session() as sess:
    34         #初始化变量
    35         sess.run(init_op)
    36         #打印随机最先初始化的权重和偏置
    37         print('随机初始化的参数权重为:%f,偏置为%f'%(weight.eval(),bias.eval()))#因为weigth和bias都为op,不能直接调出数值
    38 
    39         #运行优化,由于不是一次性能优化,故要循环,假设训练100次
    40         #循环1000次后,发现已经靠近w--0.7,b==0.8
    41         for i in range(1010):
    42             sess.run(train_op)
    43             print('参数权重为:%f,偏置为%f' % (weight.eval(), bias.eval()))  # 因为weigth和bias都为op,不能直接调出数值
    44     return None