当前位置: 首页 > news >正文

【深度学习与实战】2.1、线性回归模型与梯度下降法先导

 

import numpy as np

# 数据准备
X = np.array([1, 2, 3])
y = np.array([3, 5, 7])

# 参数初始化
w0, w1 = 0, 0
alpha = 0.1
n = len(X)

# 迭代10次
for epoch in range(10):
    # 计算预测值
    y_pred = w1 * X + w0
    
    # 计算梯度
    grad_w0 = (1/n) * np.sum(y_pred - y)
    grad_w1 = (1/n) * np.sum((y_pred - y) * X)
    
    # 更新参数
    w0 = w0 - alpha * grad_w0
    w1 = w1 - alpha * grad_w1
    
    # 计算损失函数
    loss = (1/(2*n)) * np.sum((y_pred - y)**2)
    print(f'Epoch {epoch+1}: w0={w0:.3f}, w1={w1:.3f}, Loss={loss:.3f}')

 

六、代码实现(Python示例) 

import numpy as np

# 数据准备
X = np.array([1, 2, 3])
y = np.array([3, 5, 7])

# 参数初始化
w0, w1 = 0, 0
alpha = 0.1
n = len(X)

# 迭代10次
for epoch in range(10):
    # 计算预测值
    y_pred = w1 * X + w0
    
    # 计算梯度
    grad_w0 = (1/n) * np.sum(y_pred - y)
    grad_w1 = (1/n) * np.sum((y_pred - y) * X)
    
    # 更新参数
    w0 = w0 - alpha * grad_w0
    w1 = w1 - alpha * grad_w1
    
    # 计算损失函数
    loss = (1/(2*n)) * np.sum((y_pred - y)**2)
    print(f'Epoch {epoch+1}: w0={w0:.3f}, w1={w1:.3f}, Loss={loss:.3f}')

七、总结

  • 线性回归‌:通过线性模型拟合数据,核心是最小化预测误差。
  • 梯度下降‌:通过计算损失函数的梯度,逐步调整参数逼近最优解。
  • 核心公式‌:参数更新规则 wj:=wj−α∂J∂wjwj​:=wj​−α∂wj​∂J​。
  • 实际应用‌:需注意学习率选择、特征缩放和收敛判断。

"""
2.1线性回归模型‌与‌梯度下降\
"""

import numpy as np
import matplotlib.pyplot as plt

# 设置随机种子(保证可重复性)
np.random.seed(42)

# 生成特征 X(单变量)和标签 y
m = 100  # 样本数量
X = 2 * np.random.rand(m, 1)  # 生成 [0, 2) 之间的均匀分布数据
y = 4 + 3 * X + np.random.randn(m, 1)  # 真实关系: y = 4 + 3X + 高斯噪声

# 可视化数据
plt.scatter(X, y, alpha=0.7)
plt.xlabel("X")
plt.ylabel("y")
plt.title("Simulated Linear Data")
plt.show()


def linear_model(X, theta):
    """线性回归的预测函数"""
    # 公式: h_θ(X) = θ₀ + θ₁X₁ + ... + θₙXₙ
    # X 形状: (m, n+1)(包含偏置项 1)
    # theta 形状: (n+1, 1)
    return X.dot(theta)

def compute_cost(X, y, theta):
    """计算均方误差(MSE)损失函数"""
    m = len(y)
    predictions = linear_model(X, theta)
    error = predictions - y
    cost = (1 / (2 * m)) * np.sum(error ** 2)  # 公式: J(θ) = 1/(2m) * Σ(hθ(Xⁱ) - yⁱ)²
    return cost
def gradient_descent(X, y, theta, alpha, num_iters):
    """批量梯度下降算法"""
    m = len(y)
    cost_history = []  # 记录每次迭代的损失值

    for _ in range(num_iters):
        predictions = linear_model(X, theta)
        error = predictions - y
        gradients = (1 / m) * X.T.dot(error)  # 公式: ∇J(θ) = 1/m * Xᵀ(Xθ - y)
        theta -= alpha * gradients  # 参数更新: θ := θ - α∇J(θ)
        cost = compute_cost(X, y, theta)
        cost_history.append(cost)

    return theta, cost_history

# 在特征矩阵 X 中添加偏置项(x₀ = 1)
X_b = np.c_[np.ones((m, 1)), X]  # 形状: (m, 2)

# 初始化参数 θ(θ₀, θ₁)
theta_initial = np.random.randn(2, 1)

# 设置超参数
alpha = 0.1       # 学习率
num_iters = 1000  # 迭代次数

# 运行梯度下降
theta_optimized, cost_history = gradient_descent(X_b, y, theta_initial, alpha, num_iters)

# 打印最优参数
print(f"最优参数: θ₀ = {theta_optimized:.3f}, θ₁ = {theta_optimized:.3f}")

# 绘制损失函数下降曲线
plt.plot(range(num_iters), cost_history)
plt.xlabel("Iteration")
plt.ylabel("Cost (MSE)")
plt.title("Cost Function Convergence")
plt.show()

# 绘制拟合直线和数据点
plt.scatter(X, y, alpha=0.7, label="Data")
plt.plot(X, X_b.dot(theta_optimized), color='red', linewidth=2, label="Linear Regression Fit")
plt.xlabel("X")
plt.ylabel("y")
plt.legend()
plt.title("Linear Regression with Gradient Descent")
plt.show()

 

相关文章:

  • 数据结构:利用递推式计算next表
  • PostgreSQL详解
  • SiLU与GeLU激活函数:现代大模型的选择
  • WindowsPowerShell、CMD Linux Bash对比分析
  • 工作中遇到的spark SQL小问题:包含某个或某些字符的条件
  • uniapp + Axios + 小程序封装网络请求
  • 力扣HOT100之子串:76. 最小覆盖子串
  • mock.js模拟数据
  • 在linux部署网站
  • Rust vs. Go: 在仅使用标准库时的性能测试
  • 数据库基础知识点(系列七)
  • element-plus 的简单应用
  • Python----计算机视觉处理(Opencv:图像边缘检测:非极大值抑制,双阈值筛选)
  • Vue基本使用
  • qt+opengl 加载三维obj文件
  • 23.linux下电脑健康检查
  • 【NLP 47、实践 ⑫ 通过mask和loss计算实现SFT】
  • TensorRT怎么实现加速的
  • 001初识多视图几何
  • 虚拟机(一):Java 篇
  • 中国公民免签赴马来西亚的停留天数如何计算?使馆明确
  • 退休11年后,71岁四川厅官杨家卷被查
  • 抗战回望18︱《广西学生军》:“广西的政治基础是青年”
  • 央广网评政府食堂打开大门:小城文旅爆火的底层密码就是真诚
  • 江西望仙谷回应“游客凌晨等不到接驳车”:已限流,接驳车运行时间延长
  • 抢抓消费旺季:五一假期,多地党政主官调研外贸优品展销活动