python学习笔记(27)----一元线性回归

梯度下降
目标函数求解J(θ),初始化θ(随机初始化,可以初始化为0),沿着负梯度方向下降,更新后θ让J(θ)更小,学习率一般从大到小给定

import numpy as np
import matplotlib.pyplot as plt

data = np.genfromtxt("data.csv", delimiter=",")
x_data = data[:,0]
y_data = data[:,1]

lr = 0.01
b = 0
k = 0
epochs = 50


def eroor(x_data,y_data,b,k):
    total_error=0
    for i in range(len(x_data)):
        total_error+=(k*x_data[i]+b-y_data[i])**2
    return total_error/float(len(x_data))


def gradient(x_data,y_data,b,k,lr,epochs):
    for i in range(epochs):
        b_grd=0
        k_grd=0
        for j in range(len(x_data)):
            b_grd+=(k*x_data[i]+b-y_data[i])/len(x_data)
            k_grd += (k * x_data[i] + b - y_data[i])*x_data[j]/len(x_data)
        b=b-lr*b_grd
        k=k-lr*b_grd
    return b,k


b,k=gradient(x_data,y_data,b,k,lr,epochs)



plt.plot(x_data, y_data, 'b.')
plt.plot(x_data, k*x_data + b, 'r')
plt.show()




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值