手动实现线性回归

手动实现算法的步骤.

  1. 找到预测函数. y = wx + b /θX
  2. 找到目标函数(损失函数). 最小二乘法.
    1 2 m ∑ i = 1 m ( y i − y ^ ) \frac{1}{2m}\sum_{i=1}^m(y^i - \hat{y}) 2m1i=1m(yiy^)
  3. 使用梯度下降找到损失函数取的最小值的时候对应的系数.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

x = np.linspace(0,10,20) + np.random.randn(20)
y = np.linspace(0,10,20) + np.random.randn(20)
plt.plot(x,y)

from sklearn.linear_model import LinearRegression
linear = LinearRegression()
linear.fit(x.reshape(-1,1),y)

# 定义预测函数
def linear_model(w, b):
    return w * x + b

# 定义损失函数
def loss(y_true, y_pred):
    return np.sum((y_true - y_pred) ** 2) / (2 * 20)

# 使用梯度下降求损失取的最小值的时候,w,b是多少
# 先初始化w,b
# w一般为一个比较小的数.np.random.randn() * 0.01
w = np.random.randn() * 0.01
# b 一般初始化为0.
b = 0

# 定义学习率
learning_rate = 0.01
max_iter = 10000
i = 0
y_true = y
while True:
    y_pred = linear_model(w, b)
    # 更新w,b
    # (20, ), (20, )
    dw = -np.dot((y_true - y_pred), x) / 20
    db = -np.sum(y_true - y_pred) / 20
    w = w - learning_rate * dw
    b = b - learning_rate * db
    
    # 打印输出中间的训练过程
    # 每100次打印.
    if i % 100 == 0:
        y_pred = linear_model(w, b)
        cost = loss(y_true, y_pred)
        print(f'W: {w}, B: {b}, 损失: {cost}')
    
    # 退出条件.
    i += 1
    if i > max_iter:
        break

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值