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

跟着AI学AI(1): 线性回归模型

跟着AI学AI-1: 线性回归模型

    • 提问:请使用numpy实现一个线性回归模型代码
    • 提问:请使用unittest生成测试用例
    • 提问:请描述下线性回归模型的梯度下降
    • 提问:请描述下线性回归模型的数学推导
    • 提问:线性回归模型的损失函数是什么?
    • 提问:请给出线性回归模型的损失函数的偏导数:
    • 提问:请给出线性回归模型损失函数偏导数使用链式求导的推导过程

提问:请使用numpy实现一个线性回归模型代码

回答:

import numpy as np

class LinearRegression:
    def __init__(self, lr=0.01, n_iters=1000):
        # 初始化函数,设置学习率和迭代次数
        self.lr = lr
        self.n_iters = n_iters
        self.weights = None
        self.bias = None

    def fit(self, X, y):
        # 训练函数,输入X和y,更新权重和偏置
        n_samples, n_features = X.shape

        self.weights = np.zeros(n_features)
        self.bias = 0

        for _ in range(self.n_iters):
            y_predicted = np.dot(X, self.weights) + self.bias

            # 计算梯度
            dw = (1 / n_samples) * np.dot(X.T, (y_predicted - y))
            db = (1 / n_samples) * np.sum(y_predicted - y)

            # 更新权重和偏置
            self.weights -= self.lr * dw
            self.bias -= self.lr * db

            self.weights -= self.lr * dw
            self.bias -= self.lr * db

    def predict(self, X):
        # 预测函数,输入X,输出预测值
        y_predicted = np.dot(X, self.weights) + self.bias
        return y_predicted

提问:请使用unittest生成测试用例

import unittest

class TestLinearRegression(unittest.TestCase):
    def test_fit(self):
        X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
        y = np.array([6, 15, 24])
        lr = LinearRegression()
        lr.fit(X, y)
        self.assertEqual(lr.weights.tolist(), [3, 3, 3])
        self.assertEqual(lr.bias, 0)

    def test_predict(self):
        X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
        y = np.array([6, 15, 24])
        lr = LinearRegression()
        lr.fit(X, y)
        y_pred = lr.predict(X)
        self.assertEqual(y_pred.tolist(), [6, 15, 24])

if __name__ == '__main__':
    unittest.main()

提问:请描述下线性回归模型的梯度下降

回答:
梯度下降是一种优化算法,用于最小化损失函数。在线性回归模型中,我们使用梯度下降来找到最小化平方误差的最佳拟合直线。具体来说,我们计算损失函数对每个参数的偏导数,然后将其乘以学习率并从当前参数值中减去。这个过程重复进行,直到损失函数收敛或达到预定的迭代次数。这样,我们就可以找到最小化平方误差的最佳拟合直线。

提问:请描述下线性回归模型的数学推导

回答:
在线性回归中,我们的目标是找到一条直线,使得所有数据点到该直线的距离之和最小。这个距离可以用平方误差来表示。因此,我们的目标是最小化平方误差。假设我们的模型为y = wx + b,其中w是斜率,b是截距。我们可以使用梯度下降来找到最小化平方误差的最佳拟合直线。具体来说,我们计算损失函数对w和b的偏导数,然后将其乘以学习率并从当前w和b的值中减去。这个过程重复进行,直到损失函数收敛或达到预定的迭代次数。最终,我们就可以找到最小化平方误差的最佳拟合直线。

提问:线性回归模型的损失函数是什么?

回答:
平方误差损失函数

提问:请写出线性回归模型的损失函数

J(w,b) = 1/2m * sum((y_pred - y)^2)

提问:请给出线性回归模型的损失函数的偏导数:

回答:

∂J(w,b)/∂w = 1/m * sum((y_pred - y) * x)
∂J(w,b)/∂b = 1/m * sum(y_pred - y)

提问:请给出线性回归模型损失函数偏导数使用链式求导的推导过程

回答:
我们可以使用链式求导法来推导线性回归模型损失函数的偏导数计算过程。首先,我们计算损失函数对预测值y_pred的偏导数:

∂J/∂y_pred = 1/m * sum(y_pred - y)

然后,我们计算y_pred对w和b的偏导数:

∂y_pred/∂w = x
∂y_pred/∂b = 1

接下来,我们可以使用链式求导法来计算损失函数对w和b的偏导数:

∂J/∂w = ∂J/∂y_pred * ∂y_pred/∂w = 1/m * sum((y_pred - y) * x)
∂J/∂b = ∂J/∂y_pred * ∂y_pred/∂b = 1/m * sum(y_pred - y)

这样,我们就得到了线性回归模型损失函数的偏导数计算公式。我们可以使用这些公式来实现梯度下降算法,找到最小化平方误差的最佳拟合直线。

–end–


http://www.kler.cn/a/5469.html

相关文章:

  • 【从零开始入门unity游戏开发之——unity篇05】unity6基础入门——运行游戏按钮、Game游戏窗口和Project项目窗口介绍
  • 【工具进阶】使用 Nmap 进行有效的服务和漏洞扫描
  • 【pytorch-lightning】架构一览
  • flutter组件————Row和Column
  • Dell服务器升级ubuntu 22.04失败解决
  • 数据挖掘——支持向量机分类器
  • 如何使用Spring+OpenAI生成图像
  • 多传感器融合定位GNSS、IMU、Lidar、Camera
  • 06 Laplacian算法
  • HTML5 SSE
  • 数据结构和算法(3):递归
  • 程序员万万不能去的3种公司,越做越倒退,过来人的经验
  • VerilogHDL基本语法和程序
  • PCB模块化设计24——DCDC电源模块PCB布局布线设计规范
  • python Format()函数的用法___实例详解(一)(全,例多)___各种格式化替换,format对齐打印
  • WTI原油交易价格(1986年1⽉2⽇-2022年9⽉6⽇)
  • (数字图像处理MATLAB+Python)第三章图像基本运算-第一节:图像几何变换
  • 卷麻了,00后测试用例写的比我还好,简直无地自容.....
  • ChatGPT +工业机器人/自动驾驶控制器的一些尝试
  • 【bugdebug】为什么表名没有输入错误,数据库连接也连上了,但一查询还是显示对象名“XXX”无效?
  • Input子系统剖析
  • Huggingface微调BART的代码示例:WMT16数据集训练新的标记进行翻译
  • C++ Primer第五版_第九章习题答案(1~10)
  • 机器学习:学习KMeans算法,了解模型创建、使用模型及模型评价
  • R 语言基础
  • Android 通用抓包方式