第一天我们搭建了 C++ 的运行环境并画了一个点,根据 点 → 线 → 面 的顺序,今天我们讲讲如何画一条直线。...1.DDA 直线算法 1.1 简单实现 我们先来回顾一下中学的几何知识,如何在二维平面内表示一条直线?最常见的就是斜截式了: 其中斜率是 ,直线在 轴上的截距是 。...,就是绘制斜率大于 1 的直线时,绘制出的直线会断掉。...最一开始,我们先考虑所有直线里的一个子集,即斜率范围在 之间的直线: 。 上一小节里我们说过,对于屏幕绘制直线这个场景,理论上是连续的,但实际是离散的。...day2_Bresenham_line 如上图所示,实际上绘制的点的位置是 ,理论上点位置是 。 当点从 移动到 时,理论上新点的位置应该是 ,其中 k 是直线的斜率。
误差是预测输出和期望的真实值之间的差异。但在神经网络中通常不计算输出中的误差,而是使用特定的损失函数来计算损失,并随后在优化算法中使用该函数来将损失降低到最小值。...关于梯度的更多信息 由于直线的斜率可以使用通用斜率公式计算: 取直线上相距一定距离的两点,计算斜率。当图形是一条直线时,这种计算梯度的方法给出了精确的计算。...但是当我们有不均匀的曲线时,使用这种方式计算梯度一个好主意。因为这些图中的每个点的损失都在不断变化,尤其是当曲线不规则时,如果我们可以使我们计算斜率的邻域或距离无限小呢?...因此最佳学习率对于任何神经网络的学习都是至关重要的。 因此,每次参数更新时,我们使用学习速率来控制梯度的大小。让我重申一下上面看到的更新参数的公式。...我希望这篇文章已经消除了数学中的晦涩难懂的概念,并使用了一种简单的方式将整个反向传播的过程描述清楚了。如果你有什么建议,欢迎留言。 作者:Maximinusjoshus
常用的有一个分位数叫,百分位数,它是指如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数。...要利用QQ图鉴别样本数据是否近似于正态分布,只需看QQ图上的点是否近似地在一条直线附近,图形是直线说明是正态分布,而且该直线的斜率为标准差,截距为均值,用QQ图还可获得样本偏度和峰度的粗略信息。...---- 三、构建正态 QQ 图步骤[3] 首先,数据值经过排序; 累积分布值按照公式 (i– 0.5)/n 进行计算,其中字母 i 表示总数为 n 的值中的第 i 个值(累积分布值给出了某个特定值以下的值所占的数据比例...,对与指定分位数相对应的数据值进行配对并绘制在 QQ 图中(见下图的底图所示)。...---- 四、如何构建普通 QQ 图 普通 QQ 图用于评估两个数据集的分布的相似程度。这些图的创建和所述的正态 QQ 图的过程类似,不同之处在于第二个数据集不一定要服从正态分布,使用任何数据集均可。
我们知道,直线的公式是y=kx+b,k代表斜率,b代表偏移值(y轴上的截距)。也就是说,k可以控制直线的旋转角度,b可以控制直线的移动。...强调一下,梯度下降法的实质是不断的修改k、b这两个参数值,使最终的误差达到最小。 求误差时使用 累加(直线点-样本点)^2,这样比直接求差距 累加(直线点-样本点) 的效果要好。...这个过程完全就是前面讲过的梯度下降的线性回归。 一般直线拟合的精确度要比曲线差很多,那么使用神经网络我们将如何使用曲线拟合?...BP算法是一种计算偏导数的有效方法,它的基本原理是:利用前向传播最后输出的结果来计算误差的偏导数,再用这个偏导数和前面的隐藏层进行加权求和,如此一层一层的向后传下去,直到输入层(不计算输入层),最后利用每个节点求出的偏导数来更新权重...- BP神经网络中的某些算法,例如如何选择初始值、如何确定隐藏层的节点个数、使用何种激活函数等问题,并没有确凿的理论依据,只有一些根据实践经验总结出的有效方法或经验公式。
步骤 我们将从一些随机值开始测试并计算第二个真理示例的错误值。让我们分别考虑这三个常数的情况:0.5, 0.6 and 0.7。为了更好地理解,已将计算结果列于下表。...步骤: 如果我们在给定的图形上随机放置一条线,可能有三种情况。 image.png 1和2都没有给出好的结果,而3成功地分离了这两类bug。...但是,我们如何决定将直线放置在哪里,即如何确定直线的斜率呢?这一问题的答案同样是神经网络学习的核心,接下来我们将讨论这个问题。 简单分类器的训练 为什么我们要训练我们的分类器?...image.png 我们甚至可以画出一条直线,作为一个线性分类器,将红色区域和绿色区域无缝地划分开来。这条分界线有许多不同的形式,但最主要的一点是,这种形式的简单线性分类器确实是可能的。...在概述了重要的激活函数之后,我们可以选择最适合当前问题的激活函数。然而,在本文中,为了简单起见,我将继续使用Sigmoid激活函数。
假设将每个维度分成十格,那么就要检查 10^11689512(10 的 11689512 次方)组可能的配置,对每一组配置都要计算损失函数,并找出损失最小的配置。...这个值既可以是正值也可以是负值,斜率为正,直线向上走;斜率为负,直线向下走。绝对值越大,直线越陡。如果像导数定义中一样,让 y 越来越接近 x,那么这条线就会成为 x 处的切线。 ?...下一部分将会介绍,如何将这样简单的算法泛化到多维函数的优化。 多维优化 在单变量函数中,可以将导数视为切线的斜率。但遇到多个变量,则不能如此。先来看个具体的例子。定义函数: ?...当然,AdaGrad 是一种可能的解决方案。每一年都会有越来越多先进的优化算法,来解决梯度下降相关的问题。但即便是最先进的方法,使用并调整学习率,都是很有好处的。...可以看出,对于任何可微函数,无论变量数量如何,梯度总是指向最陡的方向。从概念上来讲非常简单,但当应用在有数百万变量的函数上时,存在着很大的计算困难。
假设将每个维度分成十格,那么就要检查 10^11689512(10 的 11689512 次方)组可能的配置,对每一组配置都要计算损失函数,并找出损失最小的配置。...仔细看一下求导的点: 对任何 x 和 y,通过 f(x) 和 f(y) 的这条线定义为: 一般而言,如果用 at+b 定义一条直线,那称 a 为这条线的斜率。...这个值既可以是正值也可以是负值,斜率为正,直线向上走;斜率为负,直线向下走。绝对值越大,直线越陡。如果像导数定义中一样,让 y 越来越接近 x,那么这条线就会成为 x 处的切线。...当然,AdaGrad 是一种可能的解决方案。每一年都会有越来越多先进的优化算法,来解决梯度下降相关的问题。但即便是最先进的方法,使用并调整学习率,都是很有好处的。...可以看出,对于任何可微函数,无论变量数量如何,梯度总是指向最陡的方向。从概念上来讲非常简单,但当应用在有数百万变量的函数上时,存在着很大的计算困难。
取x=3, 导数就是(3,11)这一点的切线斜率。 ? 直接求出导函数,带入x。 ? 假设学习率为0.1,那么我们的学习率x导数值就是我们下一步要挪动的步长 由更新公式: ? 可以得到 ?...观察我们的更新公式会发现没有之前我们的左右取点看一看的过程,而是直接做更新。 原因直接讲出来,因为当我们取x=3这一点的导数值(斜率为正值) ? 那么: ? 这一项就是一个负数。...上图表示的是x偏导,曲面上的点沿着平行于x轴方向的切线。 ? 沿着x轴方向的切线斜率。 y轴方向切线 ? ? 沿着y轴方向的切线斜率。 更新 ? 从数学来讲,两者的求法一致。...如何求这四个公式中的偏loss 偏wh 偏loss 偏bh 偏loss 偏wo 偏loss 偏bo ? 这四个值到底怎么求? ? 我们把我们的损失函数loss的方程改变一下。在前面加上二分之一。...我们可以求出最后一层的偏loss/偏b 等于的他0: ? 如果是倒数第二层或倒数第三层也就是非最后一层的偏loss/偏b,你就可以用(的他h)这个公式去计算它的值。
概述 在许多现实世界的应用中,获得的数据是“脏”的,直接用所有数据点,采用最小二乘法这类方法进行拟合,结果会被外点严重带偏,得到一个完全错误的模型,RANSAC全称是 RANdom SAmple Consensus...传感器数据处理:激光雷达点云中可能包含来自移动物体(如行人、汽车)的噪点。 曲线拟合:从一堆数据点中拟合一条直线,但很多点偏离了主线。 2....模型估计:使用第一步抽出的这 n 个点,计算出一个初始模型 M_i(例如,用两个点算出直线的斜率和截距)。...模型估计: 在RANSAC的每一次循环中,随机抽出5对点,使用五点法计算出一个本质矩阵 E_i 的候选解(可能有多组,需要逐一验证)。...如果没有RANSAC: 我们直接使用所有匹配点(包含30%的错误点)用八点法或五点法求解,计算出的 E 矩阵可能会是错误的,导致后续恢复出的 R 和 t 也毫无意义。
看到一堆点后试图绘制某种趋势的曲线的人。每个人都有这种想法。当只有几个点并且我绘制的曲线只是一条直线时,这很容易。但是每次我加更多的点,或者当我要找的曲线与直线不同时,它就会变得越来越难。...在这种情况下,曲线拟合过程可以解决我所有的问题。输入一堆点并找到“完全”匹配趋势的曲线是令人兴奋的。但这如何工作?为什么拟合直线与拟合奇怪形状的曲线并不相同。...这个斜率表示函数在某一点的导数。求函数的最小值和最大值的一种方法是寻找斜率为零的地方。在这种情况下,一个24.5的x将给我们一个最小值,而一个10的x将给我们一个最大值。 ?...记住,所有这些方程都是针对所有数据点同时求解的,所以使用矩阵是非常方便的。在这一点上,我将向您展示两种方法,我们可以解决这个方程,并找到参数更好地调整初始方程f。 梯度下降 你可能听过这个名字。...如果我们使用此表达式用f(an + 1)代替f(an),我们将得出: ? 可以重新组织为: ? 并使用以下公式计算步长: ? 下表适用于两种方法。在这两种情况下,都必须指定参数的初始猜测以及停止条件。
在上一节,我们通过逐步分析的方式讲清楚了神经网络是如何将终端计算获得的误差逐层反向传播给每一个神经元的,同时我们根据节点链路上的权重比值,将误差依次分配给对应的节点,并通过笔算的方式计算了下面例子中每个神经元节点所应该承担的误差...我们不厌其烦的说了一大堆如何计算的过程,但始终没有触及如何通过误差来修正每个神经元对应链路上的权重。...神经网络的信号传递过程,可以看做是一个非常复杂的多变量,非线性函数,每一个变量对应一个“方向”,我们要看改变该变量的值后,函数最终的结果是增大了还是减小了,只要对该变量求“偏导数”,这个“偏导数”就是该变量对应方向上的切线...上图中的蓝色曲线就是函数y,假设当前x的值对应于红色点处,现在我们要看x的值是增大还是减少才能让y的值变小,于是我们就在红点出做一条曲线的切线,也就是带箭头的那条绿色直线,这时我们发现切线的斜率是负值,...我们看简单一点的多变量情况,假设函数含有2个变量,那么在坐标轴上绘制出来就是一个三维空间上一个曲面: ?
代价函数 直观上,我们判断一个拟合函数的好坏,就是看我们的实际值离拟合直线是近还是远,理想的情况下,数据点都在拟合直线上,但现实中往往并没有这样一条拟合直线,如下图所示: ?...那如何评价数据点离拟合直线的远近呢?最常使用的就是方差距离,这个应该不陌生,在k-近邻算法中就是使用了该公式来表示数据点之间的距离。...右面曲线的含义是,选取任何颜色并沿着“圆”走,会获得相同的成本函数值。例如,上面绿线上的三个绿色点对于J(θ0,θ1)具有相同的值。...如果这个也不记得,那我们可以简单理解为对函数曲线的某一个点画切线,这个斜率就是函数在该点的导数。 ? 这个斜率可能为正数,也可能为负数,这样无论从哪个点出发,经过迭代,都可以到达最低点。...其中m为训练数据集的大小,xi, yi为训练数据集的值。 其实有一个更通用的偏导数推导公式: ? 为了方便矩阵运算,数据集添加了一列,x0=1,代入到上述公式,就可以看出它们其实是等价的。
4.3 性能分析 对于下一个练习,我提供了一个Profiler类,它包含代码,使用一系列问题规模运行方法,测量运行时间和绘制结果。...或者在数学上,像: runtime = a + b * n + c * n ** 2 有了完美的数据,我们可能能够分辨直线和抛物线之间的区别,但如果测量结果很嘈杂,可能很难辨别。...但是当你调用plotResults它时,会计算数据的最小二乘拟合并打印估计的斜率。...其中重要的一点:如果你在图形看到这样的直线,这并不意味着该算法是线性的。如果对于任何指数k,运行时间与n ** k成正比,我们预计看到斜率为k的直线。如果斜率接近1,则表明算法是线性的。...如果接近2,它可能是平方的。 4.5 练习 4 在本书的仓库中,你将找到此练习所需的源文件: Profiler.java包含上述Profiler类的实现。你会使用这个类,但你不必知道它如何工作。
如果你为每个学生绘制一个点,而不是每个州一个点,那么在上图中的每个点周围都会有一圈云状的点。整体画面会更模糊。学生的数学和批判性阅读得分之间的相关性,将低于基于州均值计算的数值。...标准单位下的回归直线 绿色的“均值图”线被称为回归直线,我们将很快解释原因。 但首先,让我们模拟一些r值不同的橄榄形散点图,看看直线是如何变化的。 在每种情况中,绘制红色 45 度线作比较。...函数fit使用表名和x和y的标签,并返回一个拟合值数组,散点图中每个点一个。...下图显示了该直线(浅蓝色)。 对应于四个点的误差以红色显示。 这四个点没什么特别的。 他们只是为了展示的清晰而被选中。 函数lw_errors以斜率和截距(按照该顺序)作为参数,并绘制该图形。...事实证明,无论散点图的形状如何,最小二乘直线的斜率和截距都与我们开发的公式相同。 我们在《小女人》的例子中看到了它,但是让我们以散点图显然不是橄榄形的例子来证实它。
也许这个函数J(θ0,θ1)有点抽象,可能你仍然不知道它的内涵,在接下来的几个视频里, 我们要更进一步解释代价函数J 的工作原理 ,并尝试更直观地解释它在计算什么,以及我 们使用它的目的。...实现方法是:你应该计算公式右边的部分,通过那一部分计算出 θ0 和 θ1 的值,然后同 时更新 θ0 和 θ1。 让我进一步阐述这个过程: ? 在梯度下降算法中,这是正确实现同时更新的方法。...在接下来的视频中,我们要进入这个微分项的细节之中。我已经写了出来但没有真正定 义,如果你已经修过微积分课程,如果你熟悉偏导数和导数,这其实就是这个微分项: ?...对于这个问题,求导的目的,基本上可以说取这个红点的切线,就是这样一条红色的直 线,刚好与函数相切于这一点,让我们看看这条红色直线的斜率,就是这条刚好与函数曲线 相切的这条直线,这条直线的斜率正好是这个三角形的高度除以这个水平长度...让我们来看看如果 α 太小或 α 太大会出现什么情况: 如果 α 太小了,即我的学习速率太小,结果就是只能这样像小宝宝一样一点点地挪动, 去努力接近最低点,这样就需要很多步才能到达最低点,所以如果 α
所以很少涉及象限的问题。以下的一些算法,不会强调象限问题。 这里,主要介绍如何使用勾股定理计算坐标距离,斜率计算线段交点等。 2. 根据两个坐标点,计算距离 平面中,两点之间,直线最短。...那么最后计算的结果仍然是正确的。 但,我们可以添加一个判断,来减少这种情况下的多余的平方,开方计算。...而直线的斜率公式为:k=(y2-y1)/(x2-x1)。其中K值就是斜率结果了。...只需要知道这个直线上的任意两点就可以。 点斜式斜率公式:K=(y2-y1)/(x2-x1)也可以写为:K=(y1-y2)/(x1-x2) 这两个公式的结果是等值的。...而除此以外,我们还可以通过斜截式公式,来计算交点 3.3 斜截式计算交点 我们上面的推导过程使用的都是点斜式的公式进行的。其实我们还可以通过直线的斜截式方程:y=kx+b来进行推导直线的交点。
现在我们确定转向的范围是从-1(最大左转)到+1(最大右转),0转向的意思就是直行。上面图形中直线的斜率就可以用标为红色的两个点计算出来(其实直线上任意两点均可使用)。...在两个连续点之间的误差变化量就叫做导数。导数是一条直线的斜率。 看上去,计算起来有些复杂。用数据举例能帮助我们说明这个问题。...相反地,我们只是在控制器的公式中直接使用导数。...我所使用的版本几乎是直接使用了维基网页——PID控制器中的内容(在很多其他的地方也可以找到相同的内容),我只做了一点小小的改动,包括下表中所示计算过程中的循环时间。...我将循环设置为一个固定的次数(如10,000),测量机器人完成全部循环次数的总时间(从开始到结束的时间,或机器人显示出结果的时间),每个循环的周期是测量时间除以循环次数。
本篇文章先从最基础的点和直线开始介绍,主要涉及以下内容: 坐标系和点 直线及计算直线的斜率 检测直线是否相交及计算交点 在网页上绘制直线和箭头 文末电子书福利 本篇文章阅读时间预计8分钟。...02 直线及计算直线的斜率 直线的定义 我们都知道两点确定一条直线,在数学中我们一般用类似y=2x这样的函数方程表示直线,而方程的全解则是满足该方程的点。 如何根据一个函数方程画一条直线呢?...1、两点之间的斜率 接下来让我们来看坐标系中的P点(x1,y1)和Q点(x2,y2),用m来表示斜率,其对应的计算斜率公式如下: ?...解答思路: 1、首先我们需要通过两点之间的斜率公式,计算出直线斜率: 斜率=m=(400-200)/(150-50)=200/100=2 2、然后将其中一点和斜率m带入点斜式方程: (y-y1)=m(x-x1...绘制箭头 如果我们需要绘制一个箭头,如下图所示,我们需要知道其对应关键点的集合,如下图所示,然后不断的使用lineTo方法进行各个关键点的连接: ?
于是,我们知道这个图偏离了正常值(正常值用直线表示)。 但这种非黑即白的信息一般是不够的。因此,我们应该检查偏态和峰度,以了解分布的分散性。...首先,我们将计算偏态;我们将使用一个简单的高尔顿偏态(Galton’s skewness)公式。...更简单地说,如果我看到一堆分散的观察结果,我必须以尽可能小的偏差,画一条直线穿过它们,也就是说,如果我必须遗漏一些观察结果,我必须在这条回归线的两侧平等地遗漏。 ?...但是在这样做的同时,我(或选择的回归程序)不管来源何处,下意识地估计了每次观察对我回归线的斜率的影响程度。 我现在所做的就是重新计算这些影响。...接下来,我们如何找到最重要或最有影响的观察结果? 一种优雅的方式是: 将hat值切分为四分位数。 应用95%标准过滤最异常值。 将该过滤标准应用于观察结果。 R语言允许你一步完成这些操作!