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

监督学习凑字

监督学习

linear regression model 线性回归模型

线性回归模型是一种通过线性方程描述自变量与因变量之间关系的统计分析方法,用于预测或解释变量间的定量依赖关系。
分类: 一元线性回归模型、多元线性回归模型。
训练集:假设呢,我这边就是一个一元的回归模型。(x,y) x表示的是输入的一个特征,y表示预测的一个结果。
y − = f ( x ) \overset{-}{y} = f(x) y=f(x)
y − 表示的是预测出来的一个结果值 \overset{-}y \text{表示的是预测出来的一个结果值} y表示的是预测出来的一个结果值

f w , b ( x ) = w x + b f_{w, b}(x) = wx + b fw,b(x)=wx+b
w表示的是权重,b表示一个偏置。偏置允许神经元学到更灵活的映射关系
避免过拟合的问题。增强模型的一个鲁棒性。

线性回归模型的代价函数

m个测试集
J w , b = 1 2 m ∑ i = 1 m ( y − ( i ) − y ( i ) ) 2 J_{w,b} = \frac{1}{2m} \sum_{i=1}^{m} (\overset{-}y^{(i)} - y^{(i)})^2 Jw,b=2m1i=1m(y(i)y(i))2
y − 表示的是预测出来的一个结果值 y 表示的是实际的值 \overset{-}y \text{表示的是预测出来的一个结果值}y \text{表示的是实际的值} y表示的是预测出来的一个结果值y表示的是实际的值
思考: 为什么是 1 2 m 呢? \text{为什么是}\frac{1}{2m}\text{呢?} 为什么是2m1呢?
为了在求导的时候方便计算。
为什么要有(代价函数)这个的存在?
后期可以通过梯度下降的方法,更新权重w 和偏置b,进而求得最优解。这个章节会有代码。

梯度下降

梯度下降是一种用于优化算法的迭代方法,广泛应用于机器学习和深度学习中,用于最小化(或最大化)一个目标函数(通常是损失函数或成本函数)。通过逐步调整模型参数,梯度下降能够找到函数的最优解,通常用于寻找神经网络或其他模型中的最优参数。
核心思想:
通过计算目标函数(如损失函数)的梯度,沿着梯度的反方向调整参数,从而逐步减小目标函数的值,直到收敛到一个最小值(或最大值)。

具体来说:

梯度(Gradient):是目标函数相对于参数(如权重、偏置等)的偏导数,表示函数在某一点上变化的最快方向。

下降(Descent):沿着梯度的反方向调整参数,从而使目标函数的值变小。

学习率概念

学习率(Learning Rate,简称 α)是梯度下降算法中的一个重要超参数,它决定了每次更新参数时步长的大小。简单来说,学习率控制着在每次参数更新时,模型如何快速或缓慢地调整其参数。
初始学习率通常设置在
0.01
0.01,
0.001
0.001,
0.0001
0.0001 等
尽量选取不要太大也不要太小的,太大的会导致来回波动,太小最终会得到一个结果,但是呢,收敛太慢了。
一般从0.001 开始。
如何自动选取呢?
Adam 或 RMSprop 优化器。 具体可以自行查看,这边不赘述,后面可能会写。

梯度下降的步骤(附代码)

目的: min ⁡ J w , b = 1 2 m ∑ i = 1 m ( y − ( i ) − y ( i ) ) 2 情况下求的w和b? \min{J_{w,b}} = \frac{1}{2m} \sum_{i=1}^{m} (\overset{-}y^{(i)} - y^{(i)})^2\text{情况下求的w和b?} minJw,b=2m1i=1m(y(i)y(i))2情况下求的wb?
步骤呢?从逻辑上我们应该这么做
step1: 设置初始w、b 为0
step2:改变参数w,b,用以尝试最小化代价的目的。(repeat 的一个阶段,直到 达到我们的目的或者这次更新的w值等于上一次更新的w值的时候,stop)
如何改变w和b呢?
w = w − α d d w J ( w , b ) = 1 m ∑ i = 1 m ( y − − y ) x  注: α是学习率 w= w - α\frac{d}{dw}J_{(w,b)} = \frac{1}{m}\sum_{i=1}^{m}(\overset{-}y - y) x\text{ 注: α是学习率} w=wαdwdJ(w,b)=m1i=1m(yy)x : α是学习率
w = w − α d d b J ( w , b ) = 1 m ∑ i = 1 m ( y − − y )  注: α是学习率 w= w - α\frac{d}{db}J_{(w,b)}= \frac{1}{m}\sum_{i=1}^{m}(\overset{-}y - y)\text{ 注: α是学习率} w=wαdbdJ(w,b)=m1i=1m(yy) : α是学习率

场景:
我们有一个列表x 和y,x 表示输入值,y表示的是输出值。如何求取w和b?

import numpy as np
#初始化我们的一个学习率
alpha  = 0.001
x = np.array([1, 2, 3, 4, 5])
y = np.array([1, 2, 1.3, 3.75, 2.25])
#初始化参数w 和b
w = 0
b = 0
#设置我们的一个训练次数,假设是1000次
iterations = 1000
decay_rate = 0.9  # 学习率衰减
m = len(x)
for _ in range(iterations):
   y_pred = w * x + b #表示预测
   dw = (1 / m) * np.sum((y_pred - y) * x)
   db = (1 / m) * np.sum(y_pred - y)
   w = w - alpha * dw
   b = b - alpha * db
   #alpha = alpha * decay_rate if _ % 100 == 0 else alpha
   if _ % 100 == 0:
       cost = (1 / 2 * m) * (np.sum(y_pred - y) ** 2)
       print(f"interations:{_} cost:  {cost} w: {w} b : {b}")
print(f"after {iterations} loop ,get w :{w} b : {b}")

多元的一个线性回归

跟上面比起来的话,多元的定义就是x 是一个矢量,而非一个标量,其中w也是一个矢量
f w , b = w ∗ x + b f_{\mathbf{w},b} = \mathbf{w} * \mathbf{x} + b fw,b=wx+b
什么叫矢量呢?
就是x 不是一个简单的数值,而是由很多个种类组成的一组输入,比如房价跟面积大小,房间数量以及地段有关,这几个数据加起来构成x ,也就是一个矢量。
拓展: 如何在python中做快速的矢量化运算

w = np.array([0.8,1.5,2.3])
x = np.array([100,2,3])

我们如何计算w*x 一个一个算吗?
在numpy中有个dot 函数,其可以并行的执行多个,函数原型
res = np.dot(w,x) + b

相关文章:

  • linux线程运行记录C++
  • 11乱码问题的解释(2)
  • 同时使用Telnet和SSH登录思科交换机
  • MySQL索引与视图综合应用示例解析
  • 【Python趣味】:爬取音乐
  • C# Winform 入门(2)之发送邮件
  • MyBatis基础五(动态SQL,缓存)
  • NFS 重传次数速率监控
  • xml中配置AOP织入
  • vxe-table 树表格启用树节点连接线的使用
  • 前端简单入门学习1——使用工具
  • 企业级NoSql数据库Redis集群
  • SQL Server 八大排序算法详解
  • 【Linux网络与网络编程】03.UDP Socket编程
  • Qt6调试项目找不到Bluetooth Component蓝牙组件
  • 实例中调用带有命名控件的成员
  • 判断一个字符串中排除空格和换行以外字符运行不同的逻辑
  • 剑指Offer(数据结构与算法面试题精讲)C++版——day2
  • AIGC SD出图有缺陷有哪些方法可以解决?
  • nginx rewrite的相关功能
  • 网站开发技术指标/推送者seo
  • 没有经验可以做网站编辑吗/网络软文推广网站
  • 网站开发 兼职/职业教育培训机构排名前十
  • 找个免费的网站这么难吗/百度霸屏推广
  • 视频网站的链接怎么做/关键词优化公司哪家好
  • 主题教育网站建立/竞价推广招聘