2.线性回归

简化的房价模型

假设1:影响房价的关键因素时卧室个数,卫生间和居住面积,记为 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3

假设2:成交价时关键因素的加权和:
y = w 1 x 1 + w 2 x 2 + w 3 x 3 + b y = w_1x_1+w_2x_2+w_3x_3+b y=w1x1+w2x2+w3x3+b
​ 权重和偏差的实际值在后面决定

范数

L p 范数: ∣ ∣ x ∣ ∣ p = ( ∑ i = 1 n ∣ x i ∣ p ) 1 p L_p范数:||x||_p =(\sum^n _{i=1}|x_i|^p)^{\frac 1p}\\ Lp范数:∣∣xp=(i=1nxip)p1

常用的有 L 1 L_1 L1范数和 L 2 L_2 L2范数

L1 范数是指向量中各个元素绝对值之和,也叫“稀疏规则算子”(Lasso regularization)。范数作为正则项,会让模型参数θ稀疏化, 既让模型参数向量里为0的元素尽量多。在支持向量机(support vector machine)学习过程中,实际是一种对于成本函数(cost function)求解最优,得出稀疏解。

L2 范数作为正则项式让模型参数尽量小,但不会为0,尽量让每个特征对预测值都有一些小的贡献,得出稠密解。
在梯度下降算法的迭代过程中,实际上是在成本函数的等高线上跳跃,并最终收敛在误差最小的点上(此处为未加正则项之前的成本误差)。而正则项的本质就是惩罚。 模型在训练的过程中,如果没有遵守正则项所表达的规则,那么成本会变大,即受到了惩罚,从而往正则项所表达的规则处收敛。 成本函数在这两项规则的综合作用下,正则化后的模型参数应该收敛在误差等值线与正则项等值线相切的点上。

一般的线性模型

n维输入 x = [ x 1 , x 2 , ⋯   , x n ] T x=[x_1,x_2,\cdots,x_n]^T x=[x1,x2,,xn]T

线性模型有一个n维权重和一个标量偏差: w = [ w 1 , w 2 , ⋯   , w n ] T w = [w_1,w_2,\cdots,w_n]^T w=[w1,w2,,wn]T

输出是输入的加权和 y = w 1 x 1 + w 2 x 2 + ⋯ + w n x n + n y=w_1x_1+w_2x_2+\cdots+w_nx_n +n y=w1x1+w2x2++wnxn+n


y = < w , x > + b y=<w,x> +b y=<w,x>+b
可以看作是单层的神经网络

在这里插入图片描述

衡量预估质量(损失函数)

比较真实值和预估值,损失函数。

例如 y y y是真实值, y ^ \hat y y^是估计值,则可以使用平方损失函数 l ( y , y ^ ) = 1 2 ( y − y ^ ) 2 l(y,\hat y)=\frac 12 (y-\hat y)^2 l(y,y^)=21(yy^)2

参数学习

将训练数据带入,损失函数展开为
l ( X , y , w , b ) = 1 2 n ∑ i = 1 n ( y i − < x i , w > − b ) 2 = 1 2 n ∣ ∣ y − X w − b ∣ ∣ 2 l(X,y,w,b)=\frac{1}{2n}\sum^n_{i=1}(y_i-<x_i,w>-b)^2 =\frac {1}{2n}||y-Xw-b||^2 l(X,y,w,b)=2n1i=1n(yi<xi,w>b)2=2n1∣∣yXwb2
最小化损失来学习参数:
w ∗ , b ∗ = a r g   m i n w , b l ( X , y , w , b ) w*,b* = arg\ min_{w,b} l(X,y,w,b) w,b=arg minw,bl(X,y,w,b)

优化方法

梯度下降

  • 挑选一个初始值 w 0 w_0 w0

  • 重复迭代参数 t = 1 , 2 , 3 , ⋯ t=1,2,3,\cdots t=1,2,3,

    w t = w t − 1 − α ∂ l ∂ w t − 1 w_t = w_{t-1}-\alpha \frac{\partial l}{\partial w_{t-1}} wt=wt1αwt1l

沿梯度方向将增加损失函数值,学习率:步长的超参数,不能太小和太大,太小会导致计算太多次,太大会迈过了,在不停的振荡。

在这里插入图片描述

小批量随机梯度下降

​ 在整个训练集上算梯度太贵,一个深度神经网络模型可能需要数分钟到数小时

​ 我们可以随机采样b个样本 i 1 , i 2 , ⋯   , i b i_1,i_2,\cdots,i_b i1,i2,,ib来近似损失
1 b ∑ i ∈ I b l ( x i , y i , w ) \frac{1}{b}\sum_{i\in I_b} l(x_i,y_i,w) b1iIbl(xi,yi,w)
​ b是批量的大小,另一个重要的超参数

​ 批量大小也不能太小,每次计算量太小,不适合并行来最大利用计算资源;不能太大,内存消耗增加浪费计算,例如如果所有样本都是相同的。

​ 小批量梯度下降是深度学习默认的求解算法。

pytorch实现线性回归

import numpy as np
import torch
from torch.utils import data
from d2l import torch as d2l
from torch import nn


def load_array(data_arrays, batch_size, is_train=True):
    """构建一个PyTorch数据迭代器,随机挑选b个元素,is_train表明是随机的"""
    dataset = data.TensorDataset(*data_arrays)
    return data.DataLoader(dataset=dataset, batch_size=batch_size, shuffle=is_train)


true_w = torch.tensor([2, -3.4])
true_b = 4.2
features, labels = d2l.synthetic_data(true_w, true_b, 1000)  # 根据输入的两个参数w,b生成1000个随机数据

batch_size = 10
data_iter = load_array((features, labels), batch_size, is_train=False)

# print(next(iter(data_iter)))

net = nn.Sequential(nn.Linear(2, 1))  # sequential是将层分为list of layers,可以通过下标来访问不同的层
# Linear指使用神经网络的线性层模型,输入有两个参数,输出有一个参数

net[0].weight.data.normal_(mean=0, std=0.01)  # 将第一层的layer中的参数w设置为(0,0.01)的正态分布
net[0].bias.data.fill_(0)  # 将偏差b设置为0

'''均方误差MSEloss'''
loss = nn.MSELoss()
'''SGD随机梯度下降'''
trainer = torch.optim.SGD(net.parameters(), lr=0.03)  # 传入神经网络的所有参数,学习率为0.03

num_epochs = 3
for epoch in range(num_epochs):
    for X, y in data_iter:
        l = loss(net(X), y)
        trainer.zero_grad()#梯度清零
        l.backward()#计算梯度
        trainer.step()#更新模型
    l = loss(net(features), labels)
    print(f'epoch: {epoch+1}, loss: {l:f}')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/793102.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode:1071. 字符串的最大公因子 + 模拟 + 最大公约数】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

javaweb中的请求与响应--基于postman工具的应用(附带postman的详细安装步骤)

一、前言 后端的第一天感觉难度就上来了&#xff0c;可能是基础太过薄弱了吧。目前看视频已经有点跟不上了&#xff0c;果然15天想要拿下还是太勉强了点。30天还差不多。不知道读者们有没有好好的去学这方面的知识&#xff0c;没有什么是学不会的&#xff0c;关键是坚持。 Po…

# Redis 入门到精通(一)数据类型(3)

Redis 入门到精通&#xff08;一&#xff09;数据类型&#xff08;3&#xff09; 一、redis 数据类型–set 类型介绍与基本操作 1、set 类型 新的存储需求: 存储大量的数据&#xff0c;在查询方面提供更高的效率。需要的存储结构: 能够保存大量的数据&#xff0c;高效的内部…

飞睿智能6公里WiFi图传接收模块,低延迟、抗干扰、高速稳定传输数据,无人机、农田远距离WiFi模块

在科技日新月异的今天&#xff0c;无线通信技术正以前所未有的速度发展&#xff0c;不仅改变了我们的生活方式&#xff0c;还为企业带来了前所未有的商业机遇。今天&#xff0c;我要向大家介绍一款飞睿智能的产品——6公里WiFi图传接收模块&#xff0c;它以其高性能、稳定的传输…

华为od100问持续分享-1

我是一名软件开发培训机构老师&#xff0c;我的学生已经有上百人通过了华为OD机试&#xff0c;学生们每次考完试&#xff0c;会把题目拿出来一起交流分享。 重要&#xff1a;2024年5月份开始&#xff0c;考的都是OD统一考试&#xff08;D卷&#xff09;&#xff0c;题库已经整…

国漫推荐10

玄幻、恋爱 1.《两不疑》古风、恋爱 2.《中国古诗词动漫》 3.《武神主宰》 4.《百妖谱》 5.《灵剑尊》 6.《万界仙踪》 7.《万界神主》 8.《武庚纪》 9.《无上神帝》

全网最适合入门的面向对象编程教程:14 类和对象的 Python 实现-类的静态方法和类方法,你分得清吗?

全网最适合入门的面向对象编程教程&#xff1a;14 类和对象的 Python 实现-类的静态方法和类方法&#xff0c;你分得清吗&#xff1f; 摘要&#xff1a; 本文主要介绍了Python中类和对象中的类方法和静态方法&#xff0c;以及类方法和静态方法的定义、特点、应用场景和使用方…

轻松搭建 VirtualBox + Vagrant + Linux 虚拟机

一、准备工作 首先&#xff0c;我们来了解一下搭建 VirtualBox Vagrant Linux 虚拟机所需的软件准备工作。 VirtualBox 的下载地址&#xff1a;您可以通过访问https://www.virtualbox.org/wiki/Downloads获取适用于您系统的版本。 Vagrant 的下载地址&#xff1a;前往http…

5款常用的漏洞扫描工具,网安人员不能错过!

漏洞扫描是指基于漏洞数据库&#xff0c;通过扫描等手段对指定的远程或者本地计算机系统的安全脆弱性进行检测&#xff0c;发现可利用漏洞的一种安全检测的行为。 在漏洞扫描过程中&#xff0c;我们经常会借助一些漏扫工具&#xff0c;市面上漏扫工具众多&#xff0c;其中有一…

数学建模·Topsis优劣解距离法

Topsis优劣解 一种新的评价方法&#xff0c;特点就是利用原有数据&#xff0c;客观性强。相较于模糊评价和层次评价 更加客观&#xff0c;充分利用原有数据&#xff0c;精确反映方案差距基本原理 离最优解最近&#xff0c;离最劣解越远具体步骤 正向化 代码与原理与熵权法…

Docker 使用基础(3)—容器

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;秒針を噛む—ずっと真夜中でいいのに。 0:34━━━━━━️&#x1f49f;──────── 4:20 &#x1f504; ◀️ ⏸ …

LLM基础模型系列:Fine-Tuning总览

由于对大型语言模型&#xff0c;人工智能从业者经常被问到这样的问题&#xff1a;如何训练自己的数据&#xff1f;回答这个问题远非易事。生成式人工智能的最新进展是由具有许多参数的大规模模型驱动的&#xff0c;而训练这样的模型LLM需要昂贵的硬件&#xff08;即许多具有大量…

万字长文!流行 AI 视频生成大模型介绍 浅体验

目录 国外 AI 视频生成大模型Sora——值得期待的引领者官方描述拥有强大的能力一经发布&#xff0c;立即爆火不同业内人士的评价周鸿祎的评价陈楸帆的评价 值得期待的引领者 Dream Machine——宣传虽好&#xff0c;但仍需努力新兴的 AI 视频生成大模型媒体强烈的追捧实测体验&a…

看番工具 -- oneAnime v1.2.5绿色版

软件简介 OneAnime是一款专为动漫爱好者设计的应用程序&#xff0c;它提供了一个庞大的动漫资源库&#xff0c;用户可以在这里找到各种类型的动漫&#xff0c;包括热门的、经典的、新番的等等。OneAnime的界面设计简洁明了&#xff0c;操作方便&#xff0c;用户可以轻松地搜索…

企业微信与大量外部成员的即时消息沟通和文档协作解决方案

背景 公司使用企业微信&#xff0c;现在有部门需要招聘大量外包成员&#xff0c;但是不希望外包成员进入公司企微的组织架构&#xff0c;要实现公司与外包成员的即时消息沟通和管理&#xff0c;以及文档共享协作。 痛点 虽然企微可以将外包成员的微信加为外部联系人&#xf…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第十八章 Linux编写第一个自己的命令

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

MySQL字符串相关数据处理函数

目录 1. 转大小写 2. 截取字符串 sunstr 3. 获取字符长度 4. 字符串拼接 concat 5. 去掉空白 trim 1. 转大小写 转大写&#xff1a;upper() 转小写&#xff1a;lower() 虽然MySQL不严格区分大小写&#xff0c;但是我们还是需要掌握这种大小写的操作以方便学习其他…

MySQL 数据库基础概念

一、什么是数据库&#xff1f; 数据库&#xff08;Database&#xff09;是按照数据结构来组织、存储和管理数据的仓库。 每个数据库都有一个或多个不同的 API 用于创建&#xff0c;访问&#xff0c;管理&#xff0c;搜索和复制所保存的数据。 我们也可以将数据存储在文件中&…

基于jeecgboot-vue3的Flowable流程-集成仿钉钉流程(五)仿钉钉流程的json数据保存与显示

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、需要做一个界面保存与显示仿钉钉的流程&#xff0c;先建一个表&#xff0c;用online建 2、通过上面生成代码&#xff0c;放入到相应的前后端工程里 3、修改前端仿钉钉流程的设计功能&a…

IntelliJ IDEA自定义菜单(Menus)、任务栏(toolbars)详细教程

一、自定义菜单 1、打开Settings&#xff0c;找到Menus and Toolbars 2、点击右边的Main Menu&#xff0c;点击号&#xff0c;选择Add Action 3、弹出Add Action弹窗&#xff0c;搜索或者选择你要添加的指令 二、自定义工具栏 1、右键IDEA上方的工具栏空白位置&#xff0c;选…