【机器学习】用Jupyter Notebook实现并探索单变量线性回归的代价函数以及遇到的一些问题

引言

在机器学习中,代价函数(Cost Function)是一个用于衡量模型预测值与实际值之间差异的函数。在监督学习中,代价函数是评估模型性能的关键工具,它可以帮助我们了解模型在训练数据上的表现,并通过优化过程来改善模型

文章目录

  • 引言
  • 二、实现用Jupyter Notebook并探索单变量线性回归的代价函数
    • 2.1 工具
    • 2.2 问题陈述
    • 2.3 计算成本
    • 2.4 代价函数直观
    • 2.5 代价函数可视化 - 3D
    • 2.6 更大的数据集
    • 2.7 凸成本表面
    • 2.8 总结
  • 三、遇到的问题
    • 3.1 没有`ipympl`第三方库
      • 3.1.1 问题
      • 3.1.2 解决方法
    • 3.2 运行matplotlib代码没有显示图片
      • 3.2.1 问题
      • 3.2.2 解决方法

二、实现用Jupyter Notebook并探索单变量线性回归的代价函数

2.1 工具

在这个实验室中使用:

  • NumPy,一个流行的科学计算库
  • Matplotlib,一个流行的数据绘图库
  • 本地目录中的 lab_utils_uni.py 文件中的本地绘图例程
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')

2.2 问题陈述

希望有一个模型,可以根据房屋的大小预测房价。
使用的两个数据点:一个1000平方英尺的房子以30万美元的价格售出,一个2000平方英尺的房子以50万美元的价格售出。

尺寸 (1000 sqft)价格 (10万美元)
1.0300
2.0500
  • x_train = np.array([1.0, 2.0]) # (尺寸,以1000平方英尺为单位)
  • y_train = np.array([300.0, 500.0]) # (价格,以1000美元为单位)

2.3 计算成本

在这里,成本是衡量模型在预测房屋目标价格方面表现如何的度量,对于房屋数据,“价格”一词被使用
单变量成本方程是:
>𝐽(𝑤,𝑏)=1/(2*𝑚)∑𝑖=0𝑚−1(𝑓𝑤,𝑏(𝑥(𝑖))−𝑦(𝑖))2(1)

其中 𝑓𝑤,𝑏(𝑥(𝑖))=𝑤𝑥(𝑖)+𝑏(2)

  • 𝑓𝑤,𝑏(𝑥(𝑖))是使用参数 𝑤,𝑏 对示例 𝑖 的预测
  • (𝑓𝑤,𝑏(𝑥(𝑖))−𝑦(𝑖))2是目标值和预测值之间的平方差
  • 这些差异被加总,然后除以 2m 来产生成本 𝐽(𝑤,𝑏)

注意,求和范围通常是从1到m,而代码将从0到m-1
下面的代码通过遍历每个示例来计算成本。在每个循环中: f w b f_wb fwb,一个预测被计算
目标值和预测值之间的差异被计算并平方,这被加到总成本中

def compute_cost(x, y, w, b): """计算线性回归的代价函数。参数:x (ndarray (m,)): 数据,m个示例y (ndarray (m,)): 目标值w,b (标量)    : 模型参数返回:total_cost (float): 使用w,b作为线性回归参数来拟合x和y中的数据点的成本to fit the data points in x and y"""# 训练示例的数量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

2.4 代价函数直观

目标是找到一个模型 𝑓𝑤,𝑏(𝑥)=𝑤𝑥+𝑏,其中参数 𝑤,𝑏 可以准确预测房屋的价值。代价是衡量模型在训练数据上的准确性的度量。
在这里插入图片描述
上述的成本方程显示,如果 𝑤 和 𝑏 可以选择,使得预测 𝑓𝑤,𝑏(𝑥)与目标数据 y y y 匹配,那么 ( f w , b ( x ( i ) ) − y ( i ) ) 2 (f_{w,b}(x^{(i)}) - y^{(i)})^2 (fw,b(x(i))y(i))2 项将变为零,成本最小化
在之前的实验室中,你确定 b = 100 b = 100 b=100 提供了最优解,所以让我们将 b b b 设置为 100,并专注于 w w w
下面,使用滑块控制来选择最小化成本的 $ w $ 值。更新图形可能需要几秒钟,如下图所示:

plt_intuition(x_train, y_train)

在这里插入图片描述

该图包含几个值得注意的点

  • 成本在 $ w = 200 $ 时最小化,这与之前的结果相匹配
  • 由于成本方程中目标值和预测值之间的差异被平方,当 $ w $ 太大或太小时,成本会迅速增加
  • 使用通过最小化成本选择的 $ w $ 和 $ b $ 值,可以得到一条完美符合数据的直线

2.5 代价函数可视化 - 3D

可以通过在 3D 中绘制或在使用等高线图来查看成本如何随着 w w w b b b 的变化而变化

2.6 更大的数据集

查看包含更多数据点的场景是有益的。这个数据集包括不在同一直线上的数据点。这对成本方程意味着什么?我们能找到 $ w $ 和 $ b $,使成本为 0?

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,])

在等高线图中,点击一个点来选择 w w w b b b 以达到最低成本。使用等高线来指导你的选择。注意,更新图形可能需要几秒钟。

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 = 209 w = 209 w=209 b = 2.4 b = 2.4 b=2.4 提供低成本。请注意,由于我们的训练示例不在同一直线上,最低成本不为零

2.7 凸成本表面

成本函数将损失平方的事实确保了“误差表面”像汤碗一样是凸的。它总是通过在所有维度上跟随梯度来达到最小值。在之前的图中,由于 $ w $ 和 $ b $ 的维度不同,这不容易识别。在展示的下一个图中, w w w b b b 是对称的:

soup_bowl()

在这里插入图片描述

2.8 总结

  • 成本方程提供了衡量你的预测与训练数据匹配程度的度量
  • 最小化成本可以提供 w w w b b b 的最优值

三、遇到的问题

3.1 没有ipympl第三方库

3.1.1 问题

报错:

ModuleNotFoundError: No module named ‘ipympl’

3.1.2 解决方法

添加一个单元格,安装对应算法包,因为我是conda启动,所以用conda的安装命令,安装完即可
在这里插入图片描述

3.2 运行matplotlib代码没有显示图片

3.2.1 问题

报错:

[Open Browser Console for more detailed log - Double click to close this message]
Failed to load model class ‘MPLCanvasModel’ from module ‘jupyter-matplotlib’
Error: Script error for “jupyter-matplotlib”
http://requirejs.org/docs/errors.html#scripterror
at makeError (http://localhost:8888/static/components/requirejs/require.js?v=d37b48bb2137faa0ab98157e240c084dd5b1b5e74911723aa1d1f04c928c2a03dedf922d049e4815f7e5a369faa2e6b6a1000aae958b7953b5cc60411154f593:168:17)
at HTMLScriptElement.onScriptError (http://localhost:8888/static/components/requirejs/require.js?v=d37b48bb2137faa0ab98157e240c084dd5b1b5e74911723aa1d1f04c928c2a03dedf922d049e4815f7e5a369faa2e6b6a1000aae958b7953b5cc60411154f593:1735:36)

3.2.2 解决方法

清空浏览器缓存,关闭Jupyter Notebook,并重新打开即可

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

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

相关文章

OLLaMA搭建本地大模型

LLMChain是一个简单的链,接受一个提示模板,使用用户输入格式化它并从LLM返回响应。 其中,prompt_template是一个非常关键的组件,可以让你创建一个非常简单的链,它将接收用户输入,使用它格式化提示&#xff…

Mybatis(三) 查询不同数据封装的方式

实体类&#xff1a; 数据库&#xff1a; 1、查询一个实体类对象 /** * 根据用户id查询用户信息* param id * return */User getUserById(Param("id") int id);<select id"getUserById" resultType"User">select * from t_user where id …

【数据结构初阶】单链表经典算法题十二道——得道飞升(上篇)

目录 1、移除元素 2、反转链表 3、链表的中间节点 4、合并两个有序链表 Relaxing Time&#xff01;&#xff01;&#xff01; ———————————————— 天气之子幻 ———————————————— 1、移除元素 思路&#xff1a; 创建一个新链表&#xff0…

<PLC><HMI><汇川>在汇川HMI画面中,如何为UI设置全局样式?

前言 汇川的HMI软件是使用了Qt来编写的,因此在汇川的HMI程序编写过程,是支持使用qt的样式来自定义部件样式的,即qss格式。 概述 汇川的软件本身提供三个系统的style样式,我们可以直接使用,但是,如果系统提供的样式不符合你的需求,那么你可以对其进行修改,或者自己新建…

IC秋招RTL代码合集

一 全加器和半加器 全加器 module full_adder1(input Ai, Bi, Ci,output So, Co);assign So Ai ^ Bi ^ Ci ;assign Co (Ai & Bi) | (Ci & (Ai | Bi)); endmodule module full_adder1(input Ai, Bi, Cioutput So, Co);assign {Co, So} Ai Bi Ci ; endm…

常见CSS属性(二)——浮动

一、浮动简述 浏览器在解析html文档时&#xff0c;正常的顺序是从上往下、从左往右解析。这个正常的解析过程&#xff0c;叫做正常文档流(标准文档流)&#xff0c;而浮动就是使得元素脱离文档流&#xff0c;“浮”在浏览器上。 浮动会使元素脱离文档流&#xff0c;不占位置&…

切换数据失败0x1671分析

1、问题背景 切换双卡数据开关&#xff0c;无法切换成功&#xff0c;且单机必现该问题 2、问题分析 搜索Log发现相关拨号无法建立成功&#xff0c;返回0x1671&#xff0c;无法建立PDN连接。 相关拨号上层未下发相关AT命令&#xff0c;属于上层报错&#xff0c;并非网络问题&…

leetcode日记(53)有效数字

一看题目就感觉好复杂&#xff01;试着写了一下&#xff0c;因为题目描述不清晰所以中途按照错误示例反复修改了很多次&#xff1a; class Solution { public:bool isNumber(string s) {if(s.size()0) return 0;if(s[0]||s[0]-){string sss.substr(1);if(s[1]!&&s[1]!…

【微软蓝屏】微软Windows蓝屏问题汇总与应对解决策略

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

全方位数据管理:一站式爬虫服务解决方案

摘要 面对互联网信息爆炸的时代&#xff0c;如何高效地收集、整理并分析海量数据&#xff0c;成为企业与开发者面临的一大挑战。本文将深入探讨一站式爬虫服务解决方案&#xff0c;揭示如何通过全方位数据管理策略&#xff0c;助力企业轻松驾驭大数据海洋&#xff0c;实现数据…

【教程】微信扫描二维码进入小程序指定页面并携带参数

功能描述 打开微信扫一扫&#xff0c;扫描产品上的二维码&#xff0c;弹出小程序&#xff0c;跳到“邀请用户”页面。解析二维码中的参数&#xff0c;自动填充到页面中的“邀请码”输入框。 操作步骤 首先&#xff0c;要到微信公众平台对扫普通链接二维码打开小程序功能进行配…

在WPF中使用WebView2详解

Microsoft Edge WebView2 Microsoft Edge WebView2 控件允许在本机应用中嵌入 web 技术(HTML、CSS 以及 JavaScript)。 WebView2 控件使用 Microsoft Edge 作为绘制引擎&#xff0c;以在本机应用中显示 web 内容。 使用 WebView2 可以在本机应用的不同部分嵌入 Web 代码&…

加拿大云手机:进入加拿大市场的最佳工具

随着全球电商和社交媒体的迅猛发展&#xff0c;越来越多的卖家希望进入国际市场&#xff0c;以扩大其业务版图。加拿大作为北美市场的重要一环&#xff0c;具有巨大的商业潜力。然而&#xff0c;对于想要进入加拿大市场的卖家而言&#xff0c;面临的挑战也不少。加拿大云手机作…

数据中台 | 快速了解数据治理的关键要素-元数据

01.什么是元数据&#xff1f; 元数据(Metadata)又称中介数据、中继数据&#xff0c;是描述数据的数据(data about data)&#xff0c;主要是描述数据属性的信息&#xff0c;用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。 概念通常是专业且难懂的&#xff0c;…

神经网络拟合任何函数的数学原理

神经网络拟合任何函数的数学原理 神经网络拟合能力的数学表达 神经网络之所以理论上可以拟合任何函数&#xff0c;其核心在于其多层的结构和非线性的激活函数。通过增加层数和神经元数量&#xff0c;神经网络可以逼近复杂的函数关系。这一过程可以通过万能近似定理&#xff08…

深入分析 Android ContentProvider (四)

文章目录 深入分析 Android ContentProvider (四)ContentProvider 的最佳实践和注意事项1. 最佳实践1.1. 合理选择 ContentProvider 的使用场景1.2. 高效的 URI 匹配示例&#xff1a;使用 UriMatcher 1.3. 合理使用批量操作和事务示例&#xff1a;批量更新数据 1.4. 使用异步查…

Spark实时(五):InputSource数据源案例演示

文章目录 InputSource数据源案例演示 一、​​​​​​​File Source 1、读取text文件 2、读取csv文件 3、读取json文件 二、Socket Source 三、Rate Source InputSource数据源案例演示 在Spark2.0版本之后&#xff0c;DataFrame和Dataset可以表示静态有边界的数据&am…

Pytest-基本使用

概念 pytest 是 python 的一种单元测试框架&#xff0c;同自带的 Unittest 测试框架类似&#xff0c;相比于 Unittest 框架使用起来更简洁&#xff0c; 效率更高。 特点 1. 非常容易上手&#xff0c;入门简单&#xff0c;文档丰富&#xff0c;文档中有很多实例可以参考 2. 支…

算法-----递归~~搜索~~回溯(宏观认识)

目录 1.什么是递归 1.1二叉树的遍历 1.2快速排序 1.3归并排序 2.为什么会用到递归 3.如何理解递归 4.如何写好一个递归 5.什么是搜索 5.1深度&#xff08;dfs&#xff09;优先遍历&优先搜索 5.2宽度&#xff08;bfs&#xff09;优先遍历&优先搜索 6.回溯 1.什…

《Redis设计与实现》读书笔记-数据结构(SDS)

目录 SDS定义 SDS结构 SDS与C字符串结构差异 SDS优点 SDS扩容策略 SDS惰性空间回收 SDS定义 SDS&#xff08;简单动态字符串&#xff09;&#xff0c;用于代替C语言自身的字符串&#xff08;字符容量与字符数组强相关&#xff09;。 SDS结构 sdshdr{int free //sds 中…