Python实现线性回归

一、线性回归原理

1.构造模型

y = w1x1+w2x2…+b

2.构建损失函数

均方误差

3.优化损失

梯度下降:
使用梯度下降优化损失,当损失最小时候所对应的权重和偏置就是我们想要的模型参数

二、设计方案

1.准备数据

假定随机指点100个点,只有一个特征。x和y之间的关系满足y=kx+b
x = (100,1)
真实的y_true = (100,1)

数据分布满足y = 0.8*x+0.7
x(100,1) * weight(1,1) + bias(1,1) = y_true(100,1)
预测y_predict = tf.matmul(x,weight) + bias

2.构造损失函数

error = tf.reduce_mean(tf.square(y_predict-y_true))

3.优化损失

optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(error)

最后在会话中不断迭代optimizer当损失最小时候获取模型参数(权重weight和偏置bias)

三、代码实现

import tensorflow as tf
def linear_regression():
    #1.准备数据
    X= tf.random_normal(shape=[100.1])
    y_true = tf.matmul(X,[[0.8]])+0.7
    #构造权重weight和偏置 使用变量来创建
    weight = tf.Variable(initial_value=tf.random_normal(shape=[1,1]))
    bias = tf.Variable(initial_value=tf.random_normal(shape=[1,1]))
    y_predict = tf.matmul(X,weight)+bias
    #2.构造损失函数
    error = tf.reduce_mean(tf.square(y_predict-y_true))
    #3.优化损失
    optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1).minimize(error)

    #初始化变量
    tf.global_variables_initializer()
    with tf.Session() as sess:
        #运行初始化变量
        sess.run(init)
        print('训练前查看模型参数:权重:%f,偏置:%f,损失:%f'%(weight.eval(),bias.eval(),error.eval()))
        #训练
        for i in range(100):
            sess.run(otimizer)
            print('训练%d后查看模型参数:权重:%f,偏置:%f,损失:%f'% ((i+1),weight.eval(),bias.eval(),error.eval()))

                    
if __name__=='__main__':
    linear_regression()

四、总结

学习率训练次数权重偏置损失
0.0110000.7999990.6999990.00000
0.11000.798380.6995690.00000
5100nannannan

显然,
在学习率为0.01时,训练398次后,损失达到0,权重稳定在0.8,偏置稳定在0.7;
在学习率为0.1时,训练33次后,损失达到0,权重稳定在0.8,偏置稳定在0.7;
在学习率为5时,出现训练爆炸

特征没做好,参数调到老。学习率不是越高越好,调参要根据实际情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客范儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值