利用梯度下降法实现线性回归--python实现

利用梯度下降法代替最小二乘法,求线性回归方程。
首先引用库

import numpy as np
import matplotlib.pyplot as plt

定义相应的x和y

np.random.seed(666)
x = np.random.random(size=100)
y = x * 3. + 4. + np.random.normal(size=100)

绘制散点图
在这里插入图片描述
封装算法·

def J(x_b,y,theta):
    return np.sum((y - x_b.dot(theta))**2)/len(theta)

def dJ(x_b,y,theta):
    res = np.empty(len(theta))
    res[0] = np.sum(x_b.dot(theta) - y)
    for i in range(1,len(theta)):
        res[i] = (x_b.dot(theta) - y).dot(x_b[:,i])
        
    return 2/len(x_b)*res

def gradient_descent(x_b,y,eta,esplison,inital_theta,n_iter=1e4):
    
    theta = inital_theta
    crue_iter = 0
    while crue_iter < n_iter:
        gradient = dJ(x_b,y,theta)
        last_theta = theta
        theta = theta - eta*gradient
        if (abs(J(x_b,y,theta)-J(x_b,y,last_theta)) < esplison):
            break
        crue_iter += 1    
    return theta

调用函数

x_b = np.hstack([np.ones((len(x),1)),x.reshape(-1,1)])

eta = 0.1
esplison = 1e-8
inital_theta = np.zeros(x_b.shape[1])
gradient_descent(x_b,y,eta,esplison,inital_theta)

结果为:
array([4.0238372 , 3.01008419])
调用sklearn.linear_model

from sklearn.linear_model import LinearRegression

lin_reg = LinearRegression()
lin_reg.fit(x.reshape((-1,1)),y)
lin_reg.intercept_

结果为4.0236966721039

lin_reg.coef_

结果为array([3.01034894])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值