梯度下降法(二)
梯度下降法(二)
在上个笔记中我们举的是一维的例子(假设过原点,只有一个斜率,即参数w,所以损失函数只是一个曲线),那么这里我们先来看一个二维的例子(两个参数,损失函数就是一个二维曲面),来通过这整个流程,加深一下理解。
一、二维例子(预测房价)
例子背景
假设你在做房价预测任务的时候,有以下数据集,其中x代表房屋的面积,y代表房屋的价格:
房屋面积x(平方米)
价格y(千美元)
50
150
60
180
70
210
80
240
我们的任务就是希望找到一个线性模型y=wx+b来预测房价。
初始化参数
首先,我们随机初始化参数,假设w=0,b=0,当然也可以设置别的参数。
定义损失函数
这里我们使用均方误差MSE,作为损失函数,它衡量的是预测值和实际值之间差异的平方的均值,其实在上个笔记的那个一维的例子中,我们也是使用的这个均方误差。(可以按实际需求选择合适的损失函数) \[
J(w,b)=\frac1n\sum_{i=1}^n(y_i-(wx_i+b))^2
\] 这里其实可以看出,这个例子的损失函数是关于w,b两个参数变化的一个二维曲面,而不是之 ...
梯度下降法(一)
梯度下降法(一)
一、梯度下降的基本思想
咱们先从一个故事开始,话说有三个兄弟被困在了浓雾弥漫的山上,渴得要死,他们的目标是看谁能尽快到山谷中找到水源,由于大雾能见度极,难以确定下山的路径,只能一点点探路决定前进的方向。
老大非常谨慎,全方位观察,综合比较后才选择最陡的方向;
老二随性胆大,随机探一处就朝较低处走去;
老三比较普通,没有大哥小心翼翼,也没有二哥大大咧咧,而是探测几下就走最陡峭的方向。
你觉得谁最有可能先到山脚找到水源呢?
三兄弟下山找水的过程都用到了梯度下降的思想,每走一段路测量出当前最陡的方向,然后向前重复这个过程,就能成功抵达山谷。在这个故事中,大山代表了什么,又该如何确定梯度呢?
二、梯度下降的主要原理
1、确定一个小目标—––预测函数
(ps:也叫目标函数)
机器学习的一个常见任务,就是通过学习算法,然后自动发现数据背后的规律,进而不断改进模型,然后做出预测。
学习算法
发现规律
改进模型
做出预测
为便于理解,我们举一个简单的例子:
在二维直角坐标系中,有一群样本点,横纵坐标分别代表一组有因果关系的变量,比如房子的价格和面积,人的身高和 ...
广播网络实验
广播网络实验
实验内容:
1、实现节点广播的broadcast_packet函数
2、验证广播网络能够正常运行:从一个端节点ping另一个端节点
3、验证广播网络的效率:在three_nodes_bw.py进行iperf测量。 两种场景: H1: iperf client; H2, H3: servers H1: iperf server; H2, H3: clients
4、验证环形拓扑下节点广播会产生数据包环路。
本人的实验环境:
在Windows10物理机上装VirtualBox虚拟机,Ubuntu系统是22.04.3 LTS,python版本是2.7.18。
实验过程:
1、实现节点广播的broadcast_packet函数:
123456789101112void broadcast_packet(iface_info_t *iface, const char *packet, int len){ // TODO: broadcast packet fprintf(stdout, "TODO: broadcast packet.\n"); // ...
Python课程笔记(二)
课程笔记:
第六章:数据结构(一)
Python提供了功能强大的内置数据结构。
字符串
列表
元组
字典
集合
Python中,前三个:字符串、列表和元组都属于序列。
序列有一些通用的操作。包括:
索引(indexing)
切片(slicing)
连接(adding)
重复(multiplying)
检查某个元素是否属于序列的成员(成员资格)
计算序列长度
找出最大元素和最小元素等。
一、序列相关操作:
标准类型运算符:
值比较
对象身份比较
布尔运算
序列类型运算符:
获取
重复
连接
判断
内置函数:
序列类型转换内置函数
序列类型其他常用内置函数
标准类型运算符:
对象值比较:(<、<=、>、>=、==、!=)
对象身份比较(is 、is not)
布尔运算(not、and、or)
关于对象的值比较与身份比较说明:对象身份比较的相等指的是值和地址均相同。
对于小整数池([-5, 256])的数值以及字符串来说,值和身份比较结果相同;
对于非小整数池的数值及列表、元组、字典和集合(所谓“集合型数据类型”),值比较和身份比较结果不 ...
Python课程笔记(一)
课程笔记:
第一章:绪论
Pvthon是一种解释型的、面向对象的、带有动态语义的高级程序设计语言。
字符编码统一为unicode编码。
第二章:编程基础
1、解释(Interpret)是在程序运行时才对源代码进行逐条语句的翻译并运行。解释型语言编写的程序每执行一次,就要翻译一次,翻译结果不会像编译型语言一样保存在可执行文件中,因此效率较低。Python是一种解释型语言,但为了提高运行效率,Python程序在执行一次之后会自动生成扩展名为.pyc的字节码文件;字节码不同于机器语言,但很容易转换为机器语言。
2、函数input只能返回字符串;若需要输入的是数字,则必须使用Python的数值转换函数:int、float、eval a,b=eval(input(““)),eval 函数用于执行用户输入的字符串,将其解释为有效的Python表达式。如果用户输入的内容是有效的Python表达式,它将被计算。例如,如果用户输入 “3, 5”,eval 将返回一个包含两个整数的元组 (3, 5)。
eval函数功能强大且有点复杂
3、输出函数:print(value, …, sep=’ ‘, en ...