二、线性回归模型

news2024/11/24 19:04:10

目录

一、线性回归

1.模型示例

2.代码实验(C1_W1_Lab03_Model_Representation)

(1).工具使用

(2).问题描述-房价预测

(3).输入数据

(4).绘制数据集坐标点

(5).建模构造函数

二、代价函数(Cost function)

1.解释一下概念

2.衡量一条直线与训练数据的拟合程度

3.代价函数实验(C1_W1_Lab04_Cost_function_Soln)

(1)引入工具包

(2)输入训练数据

(3)定义计算代价的代价函数

(4)绘制代价函数图

(5)总结


在本实验中,你将了解线性回归模型如何在代码中定义,并通过图表观察模型对给定w和b值的数据拟合程度。此外,你还可以尝试不同的w和b值,以检验是否能提升数据拟合效果。

一、线性回归

1.模型示例

首先要有一些数据来训练我们的线性回归函数。

数据集:根据下面的数据集,经过一定的学习算法得到线性回归函数

2.代码实验(C1_W1_Lab03_Model_Representation)

(1).工具使用

numpy:用于科学计算的库

matplotlib:绘制图像的库

//引入工具
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('./deeplearning.mplstyle')

(2).问题描述-房价预测

这个实验将使用一个只有两个数据点的简单数据集——1000平方英尺的房子以30万美元的价格出售,2000平方英尺的房子以50万美元的价格出售。这两点将构成我们的数据集或训练集。在这个实验里,尺寸的单位是1000平方英尺,价格的单位是1000美元。

(3).输入数据

# x_train is the input variable (size in 1000 square feet)
# y_train is the target (price in 1000s of dollars)
x_train = np.array([1.0, 2.0])
y_train = np.array([300.0, 500.0])
print(f"x_train = {x_train}")
print(f"y_train = {y_train}")

用 m 表示训练样本的数量。Numpy数组有一个 .shape 参数。x_train.shape返回一个python元组,每个元组对应一个维度。x_train.shape[0]是数组的长度和示例的数量,如下代码:

# m is the number of training examples
print(f"x_train.shape: {x_train.shape}")
m = x_train.shape[0]
print(f"Number of training examples is: {m}")

(4).绘制数据集坐标点

# Plot the data points
plt.scatter(x_train, y_train, marker='x', c='r')
# Set the title
plt.title("Housing Prices")
# Set the y-axis label
plt.ylabel('Price (in 1000s of dollars)')
# Set the x-axis label
plt.xlabel('Size (1000 sqft)')
plt.show()

(5).建模构造函数

由问题描述可知该数据集应该是线性模型,f(x)=wx+b

不断的调整w、b,将x代入上式中,判断f(x)是否匹配数据集的y:

//批量计算在当前w、b下f(x)的值
def compute_model_output(x, w, b):
    """
    Computes the prediction of a linear model
    Args:
      x (ndarray (m,)): Data, m examples
      w,b (scalar)    : model parameters  
    Returns
      y (ndarray (m,)): target values
    """
    m = x.shape[0]
    f_wb = np.zeros(m)
    for i in range(m):
        f_wb[i] = w * x[i] + b
        
    return f_wb

可以通过画图的方式直观比较:

tmp_f_wb = compute_model_output(x_train, w, b,)
# Plot our model prediction
plt.plot(x_train, tmp_f_wb, c='b',label='Our Prediction')
# Plot the data points
plt.scatter(x_train, y_train, marker='x', c='r',label='Actual Values')
# Set the title
plt.title("Housing Prices")
# Set the y-axis label
plt.ylabel('Price (in 1000s of dollars)')
# Set the x-axis label
plt.xlabel('Size (1000 sqft)')
plt.legend()
plt.show()

下图是当w=200,b=100时的图像

两个数据点均在f(x)=200x+100这条直线上,可以以此来对 新的x 做出预测:

w = 200                         
b = 100    
x_i = 1.2
cost_1200sqft = w * x_i + b    
print(f"${cost_1200sqft:.0f} thousand dollars”)
//输出结果:$340 thousand dollars

二、代价函数(Cost function)

1.解释一下概念

    在机器学习特别是监督学习中,代价函数(Cost Function)是一个关键的概念。它衡量了模型预测结果与实际标签之间的差异或误差。目标是通过优化代价函数来找到最佳的模型参数。

    常见的代价函数有:(这里只是先举出例子了解一下,具体应用后面再说)

        (1). 均方误差(Mean Squared Error, MSE):适用于回归问题,计算每个样本预测值和真实值之差的平方的平均。

        (2). 交叉熵损失(Cross-Entropy Loss, CEL):用于分类问题,特别是多类别的softmax分类。它衡量了模型预测的概率分布与实际标签概率分布之间的差异。

        (3). Huber 损失(Huber Loss):介于均方误差和绝对值误差之间,对于异常值更加鲁棒。

    在优化过程中,我们会不断地调整模型参数来减小代价函数的值。通过最小化代价函数,我们期望找到一个能够在新数据上表现良好的模型。

2.衡量一条直线与训练数据的拟合程度

使用均方误差成本函数

(1)先对简化版本的代价函数(b=0)进行分析:

对于不同的w(斜率)有不同的J(w),选择最小的J(w)时的w即为最优的线性回归模型参数,图示如下

因此,构造线性回归模型的问题就变成了寻找让误差最小的w和b参数

(2)当扩展到一般的回归模型,cost function的图像变成了一个曲面( 三维坐标:w、b、J(w,b) )

我们同样可以通过数学方法在曲面上找到使代价值J(w,b)最小的参数w和b

往往3D的曲面图会用2D的等高线图来等价表示,用于研究规律:

对于不同w、b时,f(x)和J(w,b)的图像对应情况:

3.代价函数实验(C1_W1_Lab04_Cost_function_Soln)

(1)引入工具包

import numpy as np
%matplotlib widget
import matplotlib.pyplot as plt
from lab_utils_uni import plt_intuition, plt_stationary, plt_update_onclick, soup_bowl
plt.style.use('./deeplearning.mplstyle')

发现出现缺少依赖包的情况:

pip install ipympl

重启内核继续执行引入工具包的操作

(2)输入训练数据

x_train = np.array([1.0, 2.0])           #(size in 1000 square feet)
y_train = np.array([300.0, 500.0])           #(price in 1000s of dollars)

(3)定义计算代价的代价函数

def compute_cost(x, y, w, b): 
    """
    Computes the cost function for linear regression.
    
    Args:
      x (ndarray (m,)): Data, m examples 
      y (ndarray (m,)): target values
      w,b (scalar)    : model parameters  
    
    Returns
        total_cost (float): The cost of using w,b as the parameters for linear regression
               to fit the data points in x and y
    """
    # number of training examples
    m = x.shape[0] 
    
    cost_sum = 0 
    for i in range(m): 
        f_wb = w * x[i] + b   
        cost = (f_wb - y[i]) ** 2  
        cost_sum = cost_sum + cost  
    total_cost = (1 / (2 * m)) * cost_sum  


    return total_cost

(4)绘制代价函数图

①由数据可知,拟合最好的回归模型b=100,这里先看一下固定b=100时,w变化时,J(w)的变化情况

//绘制w-J(w)变化图,函数具体原码看代码包:当前课程资源:week1/work/lab_utils_uni.py
plt_intuition(x_train,y_train)

如果绘图时遇到这个问题:Failed to load model class 'VBoxModel' from module '@jupyter-widgets/controls’

需要安装 widgets 依赖:

pip install ipywidgets

如果还是不好使可能是版本问题,将依赖组件升级一下

pip install -U jupyterlab ipywidgets jupyterlab_widgets

w=130时的误差:6125

w=200时,误差为0

//绘图-三维图
plt.close('all') 
fig, ax, dyn_items = plt_stationary(x_train, y_train)
updater = plt_update_onclick(fig, ax, x_train, y_train, dyn_items)

②对于更大规模的数据集,我们不能通过看来发现合适的w和b

所以我们使用3D的图来显示w、b、J(w,b)之间的关系:

//数据集
x_train = np.array([1.0, 1.7, 2.0, 2.5, 3.0, 3.2])
y_train = np.array([250, 300, 480,  430,   630, 730,])

//绘图
plt.close('all') 
fig, ax, dyn_items = plt_stationary(x_train, y_train)
updater = plt_update_onclick(fig, ax, x_train, y_train, dyn_items)

(5)总结

成本函数对损失进行平方,这一事实确保了“误差曲面”是凸的,就像一个汤碗。它总是有一个可以通过在所有维度上遵循梯度达到的最小值。

下一章将开始学习梯度下降法,可以解决寻找使J(w,b)最小的w和b。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3225mm晶振SG3225CAN专用于蓝牙模块应用

在无线通信技术迅猛发展的今天,蓝牙技术因其低功耗、高传输速率和广泛的应用范围,成为物联网和智能设备的重要组成部分。晶振在蓝牙模块中无处不在,大部分的智能手机,打开设置工具里面就会有一个是蓝牙功能,蓝牙技术引…

机器视觉halcon学习——检测斜面两边之间距离的数据稳定性

一个样品的斜面,因为有景深,所以无法同时聚焦到两条边。想办法聚焦到其中一条不太有特征的边,另一条边通过白色的特征来检测。 dev_open_window(0, 0, 800, 800, black, WindowHandle) dev_set_color(red) * Image Acquisition 01: Code gen…

影响生产RAG流水线5大瓶颈

检索增强生成(Retrieval Augmented Generation,RAG)已成为基于大型语言模型的生成式人工智能应用的关键组成部分。其主要目标是通过将通用语言模型与外部信息检索系统集成,增强通用语言模型的能力。这种混合方法旨在解决传统语言模…

宝塔面板如何创建ZeroTier-Moon节点

本文转自博主的个人博客:https://blog.zhumengmeng.work,欢迎大家前往查看。 原文链接:点我访问 序言:折腾过内网穿透的玩家,ngrok、frp 都应该不陌生了,自己搭也好,用别人提供的免费服务也好,配…

“合力同行 快乐飞凌”——飞凌嵌入式5月团建记

这个5月,飞凌嵌入式全体成员来到了北京十渡东湖港风景区,开展“合力同行 快乐飞凌”主题团建活动 。 1、凝聚力挑战赛 本次团建活动不仅是大家放松心情、享受自然的好机会,更是增进彼此了解、加强团队合作的绝佳平台。 团建活动伊始&#x…

vue UI组件整理

Vue2Vue3Element - The worlds most popular Vue UI frameworkOverview 组件总览 | Element Plushttps://v2.iviewui.com/docs/guide/installhttps://www.iviewui.com/view-ui-plus/guide/introduce按钮 Button - Ant Design按钮 Button - Ant DesignVuetify — A Material Des…

GPT-4o:人工智能技术的新巅峰

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

17.Redis之主从复制

1.主从复制是怎么回事? 分布式系统, 涉及到一个非常关键的问题: 单点问题 单点问题:如果某个服务器程序, 只有一个节点(只搞一个物理服务器, 来部署这个服务器程序) 1.可用性问题,如果这个机器挂了,意味着服务就中断了~ 2.性能/支持的并发量也是比较有限…

Java集合-List(Collection子接口)及其子类(ArrayList、Vector、LinkedList)

List接口是 Collection接口的子接口。 1、List集合类中数据有序, 即添加顺序和取出顺序有序,而且可以重复。 2、List集合类中每个元素都有其对应的顺序索引,即支持索引。例,list.get(2);取第三个元素。 3、实现类有很多…

【linux-imx6ull-设备树点灯】

目录 1. 设备树简介1.1 编译-引用1.2 设备树文件结构1.3 设备树节点介绍1.3.1 特殊节点chosen 1.4 节点内容追加 2. 设备树常用OF操作函数2.1 节点寻找类2.2 属性提取类2.3 其它常用类 4. 设备树下LED实验4.1 实验简介4.2 添加LED设备节点4.3 获取设备节点并提取属性4.3.1 获取…

ChatTTS,语气韵律媲美真人的开源TTS模型,文字转语音界的新魁首,对标微软Azure-tts

前两天 2noise 团队开源了ChatTTS项目,并且释出了相关的音色模型权重,效果确实非常惊艳,让人一听难忘,即使摆在微软的商业级项目Azure-tts面前,也是毫不逊色的。 ChatTTS是专门为对话场景设计的文本转语音模型&#x…

iphone内存满了开不了机怎么办?白苹果解决办法分享!

虽然苹果手机在使用时比较顺畅,但是手机用久了,照片、视频等资料累积过多,也难免会导致内存不足,出现无法开机卡在开机界面白苹果的情况。 内存不足导致iPhone白苹果的问题很常见,可以说是苹果最常见的故障之一。接下来…

探索多模态MR图像的脑肿瘤分割任务结构| 文献速递-深度学习肿瘤自动分割

Title 题目 Exploring Task Structure for Brain Tumor Segmentation From Multi Modality MR Images 探索多模态MR图像的脑肿瘤分割任务结构 01 文献速递介绍 脑肿瘤分割旨在从多模态磁共振(MR)序列中自动分割肿瘤区域,这些序列由先进的…

【Java面试】七、SpringMvc的执行流程、SpringBoot自动装配原理

文章目录 1、SpringMVC的执行流程1.1 视图阶段1.2 前后端分离阶段 2、SpringBoot自动配置原理3、框架常用的注解3.1 Spring的注解3.2 SpringMvc的注解3.3 SpringBoot的注解 4、面试 1、SpringMVC的执行流程 1.1 视图阶段 旧项目中,未前后端分离时,用到…

JVM 指针压缩

运用java内存对齐填充,对java内存进行8字节划分,java对象指针映射到每个划分区域上,使得4个字节(32位)表示2^32个地址,从而使4个字节指针映射32G内存空间。 1.为什么进行指针压缩: jvm从32位变…

【YUV格式数据】【ffplay】播放或者查看YUV格式图片或文件数据

背景 最近在调试hisi解码功能,需要把h264格式解码成yuv数据,调试的时候需要最后查看下出来的yuv格式数据是否正常,需要用到一些工具软件进行查看。然后就做个总结。 解决方案 方案1:使用ffplay命令播放YUV文件 使用ffplay命令…

vue2 bug 小白求助!!!(未解决,大概是浏览器缓存的问题或者是路由的问题)

我的vue2项目出现了一个超级恶心的bug 具体流程: 页面a点击a标签->到页面b->页面b用户退出刷新页面->点击浏览器的返回按钮返回上一页 返回页面后页面没有刷新导致用户名还显示这 项目中没有用keep-alive缓存 也在设置了key 尝试了window.removeEventLi…

【Linux】线程ID

大致草稿—————————— 思维导图 学习目标 一、线程ID的理解 1.1 引出对tid的理解 我们先来创建一个线程复习一下线程的函数: pthread_t tid; // 创建一个线程 pthread_create(&tid, nullptr, threadrun, (void*)"thread-1"); // 打印出…

惯性动作捕捉与数字人实时交互/运营套装,对高校元宇宙实训室有何作用?

惯性动作捕捉与数字人实时交互/运营套装,可以打破时空限制,通过动捕设备写实数字人软件系统动捕设备系统定制化数字人短视频渲染平台,重塑课程教学方式,开展元宇宙沉浸式体验教学活动和参观交流活动。 写实数字人软件系统内置丰富…

【excel】设置可变下拉菜单(一级联动下拉菜单)

文章目录 【需求】制作动态下拉菜单,显示无重复的“班级”列表【思路】设置辅助列,使用UNIQUE()函数去重,并用FILTER()去掉结果中的“0”【步骤】step1 辅助列step2 设置下拉菜单 【总结】 【需求】制作动态下拉菜单,显示无重复的…