线性回归(数学解析法+梯度下降法)

由于总是扎在深度学习的坑里,机器学习的其他算法总是学了就忘,模棱两可,前几天刚又刷了下数理统计,所以本着打造一个扎实及基础的思想,决定好好推一下各种常见的机器学习算法,留作学习笔记。说不定面试就手推公式了呢。。。其实再推一遍也没啥用。。。。放下书就又忘了。。。

线性回归

表面理解

  1. 所谓线性:体现在y于x仅仅存在 1次方 函数关系
  2. 所谓回归:体现在我们所学习和预测的数据会回归到某一区间,比如正态分布,回归到平均值

在这里插入图片描述

  1. 具象化出来,也就是图中的线,要尽可能的穿过所有的点,穿不过的也要尽量使loss最小,(loss由loss-function计算得出简单可以理解为图上点到线的距离求和最小)
  2. 多元线性回归也不过是多添加了几个维度,也就是特征数,y=x1w1+x2w2…+b (其中b并不考虑各种影响下的本身的偏移量)

在这里插入图片描述

深入理解线性回归:从数学上搞出解析解

  1. 什么是中心极限定理(Central Limit Theorem)
    中心极限定理指的是给定一个任意分布的总体。我每次从这些总体中随机抽取 n 个抽样,一共抽 m 次。 然 后把这 m 组抽样分别求出平均值。 这些平均值的分布接近正态分布。

  2. 我们这里假设每一个误差(也就是:(|<y真实> - y<预测>| 记做 ε) 是随机的)那么根据中心极限定理,ε服从正态分布。
    那么现在看看:我们知道了ε,知道了真实的y,就可以求预测的y了,知道了输入的x,最后我们就可以求出w了。

  3. 下式代表:误差+预测=真实
    在这里插入图片描述

  4. 正态分布的概率密度
    在这里插入图片描述

  5. 然后我们用ε替换掉x-μ
    得到:
    在这里插入图片描述

  6. 再用8里的公式:
    在这里插入图片描述

  7. 多个概率密度函数连乘近似约等于概率的连乘(因为只知道概率密度不知道概率,只能近似了)这样就有了极大似然函数。
    大佬给出的极大似然函数的超详细解释,读完之后全身都通透了!
    在这里插入图片描述

  8. 然后这里就是期末考试刷题的万年套路了,取㏒,把乘变加。
    在这里插入图片描述
    求l(θ)最大,也就是求J(θ)最小,因为这是个凸函数,也就是J(θ)求导=0时的θ的值。

在这里插入图片描述
在这里插入图片描述

代码实现

import numpy as np
import matplotlib.pyplot as plt

__author__ = 'yasaka'

# 这里相当于是随机X维度X1,rand是随机均匀分布
X = 2 * np.random.rand(100, 1)
# 人为的设置真实的Y一列,np.random.randn(100, 1)是设置error,randn是标准正太分布
y = 4 + 3 * X + np.random.randn(100, 1)
# 整合X0和X1
X_b = np.c_[np.ones((100, 1)), X]
print(X_b)

# 常规等式求解theta
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
print(theta_best)

# 创建测试集里面的X1
X_new = np.array([[0], [2]]) 
X_new_b = np.c_[(np.ones((2, 1))), X_new]
print(X_new_b)
y_predict = X_new_b.dot(theta_best)
print(y_predict)

plt.plot(X_new, y_predict, 'r-')
plt.plot(X, y, 'b.')
plt.axis([0, 2, 0, 15])
plt.show()

补充:

Q:为什么求总似然的时候,要用正太分布的概率密度函数?
A:中心极限定理,如果假设样本之间是独立事件,误差变量随机产生,那么就服从正太分布!

Q:总似然不是概率相乘吗?为什么用了概率密度函数的f(xi)进行了相乘?
A:因为概率不好求,所以当我们可以找到概率密度相乘最大的时候,就相当于找到了概率相乘最大的时候!

Q:概率为什么不好求?
A:因为求得是面积,需要积分,麻烦,大家不用去管数学上如何根据概率密度函数去求概率!

Q:那总似然最大和最优解的关系?
A:当我们找到可以使得总似然最大的条件,也就是可以找到我们的DataSet数据集最吻合某个正太分布!
即找到了最优解!

通过最大似然估计得思想,利用了正太分布的概率密度函数,推导出来了损失函数

Q:何为损失函数?
A:一个函数最小,就对应了模型是最优解!预测历史数据可以最准!

Q:线性回归的损失函数是什么?
A:最小二乘法,MSE,mean squared error,平方均值损失函数,均方误差

Q:线性回归的损失函数有哪些假设?
A:样本独立,随机变量,正太分布

通过对损失函数求导,来找到最小值,求出theta的最优解!

深入理解线性回归:梯度下降法

Q:梯度下降法是干嘛的?
A:梯度下降法是一种以最快的速度找到最优解的方法!

在这里插入图片描述
求解步骤:

  1. 初始化theta,w0…wn
  2. 接着求梯度gradient
  3. theta_t+1 = theta_t - grad * learning_rate
    learning_rate是个超参数,太大容易来回振荡,太小步子太短,需要走很长时间,不管太大还是太小,
    都会迭代次数很多,耗时很长
  4. 等待grad < threshold,迭代停止,收敛,threshold是个超参数

公式推导:

  1. 核心公式就是这个:
    在这里插入图片描述
  2. 下面我们来对损失求导:注意这里的θ和y都是向量,x是输入矩阵。
    在这里插入图片描述
    在这里插入图片描述

代码实现

import numpy as np
     
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)
X_b = np.c_[np.ones((100, 1)), X]
# print(X_b)

learning_rate = 0.1
n_iterations = 10000    # 迭代次数
m = 100  # 100个样本

# 1,初始化theta,w0...wn
theta = np.random.randn(2, 1)
count = 0

# 4,不会设置阈值,之间设置超参数,迭代次数,迭代次数到了,我们就认为收敛了
for iteration in range(n_iterations):
    count += 1
    # 2,接着求梯度gradient
    gradients = 1/m * X_b.T.dot(X_b.dot(theta)-y)   # 这里用了X_b,也就是整体的输入矩阵,这里和公式推导的不一样,这样导致算出来的是个梯度矩阵,矩阵中的是特征的梯度。      
    # 3,应用公式调整theta值,theta_t + 1 = theta_t - grad * learning_rate
    theta = theta - learning_rate * gradients

print(theta)
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
一元线性回归梯度下降法是一种用于求解线性回归模型参数的优化算。在梯度下降算中,我们首先定义一个损失函数J(θ),其中θ表示模型的参数。然后通过迭代的方式,不断调整θ的取值,使得损失函数J(θ)的值最小化。 在一元线性回归中,我们假设目标变量y与特征变量x之间存在线性关系。我们的目标是找到一条直线,使得通过这条直线对特征变量x进行预测得到的结果与真实值y之间的误差最小。 梯度下降法的思路是通过计算损失函数J(θ)对参数θ的偏导数,即∂J(θ)/∂θ,来确定参数的更新方向。我们可以通过迭代地更新参数,使得损失函数逐渐减小。 具体步骤如下: 1. 初始化参数θ的值。 2. 计算损失函数J(θ)对参数θ的偏导数∂J(θ)/∂θ。 3. 根据计算得到的偏导数值和学习率的大小,确定参数θ的更新方向和步长。 4. 更新参数θ的值,即θ = θ - 学习率 * ∂J(θ)/∂θ。 5. 重复步骤2-4,直到满足停止条件(如达到最大迭代次数或损失函数值的变化小于设定阈值)。 通过不断迭代更新参数θ的值,梯度下降法可以找到使得损失函数J(θ)最小化的最优参数值。 引用中提到了为什么要使用减来更新参数,这是因为当偏导数值为负数时,说明当前参数位于损失函数的左侧,需要增大参数值才能靠近极值点。反之,当偏导数值为正数时,需要减小参数值。通过这种方式,梯度下降法可以逐步接近损失函数的最小值。 引用中提到了线性回归中的损失函数J(θ),它是通过将特征变量x的值带入线性回归模型进行预测,然后计算预测结果与真实值之间差值的平方和得到的。梯度下降法的目标就是求解使得损失函数最小化的参数值。 引用中提到了梯度下降算中的导数项,它表示对损失函数J(θ)对参数θ的偏导数的简化形式。通过计算导数项,可以确定参数的更新方向和步长。 综上所述,一元线性回归梯度下降法是一种通过迭代更新参数的优化算,用于求解线性回归模型参数使得损失函数最小化的方。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [一元线性回归梯度下降法(通俗易懂,初学专属)](https://blog.csdn.net/m0_63867120/article/details/127073912)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [梯度下降算--一元线性回归](https://blog.csdn.net/weixin_44246836/article/details/125128880)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值