直线扫描算法(个人总结,仅供参考)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了直线扫描算法(个人总结,仅供参考)相关的知识,希望对你有一定的参考价值。

参考技术A

直线扫描算法主要包含三种算法,DDA算法、中点画线算法、Bresenham直线算法。

这三种算法都要事先要确定两个端点(起点和终点),从起点开始每次走一步,每走一步画一个点,直至到达终点。

这个前提也比较好理解,因为如果朝斜率大的方向走,可能没走几步就走完了,那画出来的直线就是离散的。

以下我们只讨论朝x方向移动的情况。(y方向的情况是一样的)

DDA算法实际上是根据 斜截式直线方程 来画的。

但这么做实际上是比较消耗性能的,因为斜截式方程, 它涉及到了乘法运算 。因此我们需要通过 增量思想 对它进行优化。

这样转换后,我们就可以根据当前的位置来找到下一步的位置,且每次计算只需要进行一次 浮点的加法运算 ,一次四舍五入取整即可。

中点画线算法实际上是根据 一般式直线方程 来画的。它是通过判断中点在直线的下方还是上方,来决定下一步的坐标位置。

但这样也是非常消耗性能的,把中点带入F(x, y)中,会涉及到2个乘法,4个加法。我们依然可以通过增量的方式来对它进行优化。

这样我们就优化到每次只需要一次 整数加法 即可,且还不需要四舍五入。因此它要更优于DDA算法。

Breseham算法是通过比较d(交点与交点下方最近的点的距离)来进行选择的。d每次按照k的大小增加。

但这么做依旧和DDA算法一样,会涉及到浮点数k的加法。我们可以通过 换元的方式 对它进行下优化。

这样就能使得每次进行一次或两次的 整数加法运算 ,不需要四舍五入。效率高于DDA,低于中点画线算法。

但Bresenham算法不依赖直线方程,使得它能有更宽泛的适用范围。

个人机器学习总结之线性回归

 1. 线性回归

1.1 算法原理

(1)情景:给定一定数量的数据点,通过拟合得到其回归直线,使得所有点到这个直线的距离之和(损失函数)最小。

 技术图片

 

即:已知各个点的坐标,反求直线表达式的最优系数解。

假定直线参数为θ,则直线表达式为: 

技术图片

得到的直线(平面)表达式应使得损失函数最小,其中损失函数表达式: 

技术图片

(2)求解方式:

第一种:直接求解

欲使损失函数最小,对损失函数进行求导等于0(实际问题中极小值即为最小值)

 技术图片

 

第二种:梯度下降法

 技术图片

 

从损失函数上的任一点出发,每次沿梯度的方向更新θ的值,所得到的新的θ将会使损失函数的函数值更小。(属随机梯度下降原理)

求解的关键在于得到其导数的方向,保证每次更新都将沿损失函数值下降的方向,同时要选取适当的学习步长α,避免过快更新超过其最小值的同时尽量选择较大步长来减少迭代更新的次数。

 技术图片

上面的所述的思想,是基于每次都代入一个x进行迭代更新,称为随机梯度下降,但由于其方向为单个的导数的方向,所得到的极值点可能为局部最小值(如下图所示),而非整体最小值,想尽可能 得到整体最小值 ,应采用批量梯度下降法,即每次更新均代入所有的X进行更新,其更新的方向为合导数的方向(可以理解为合力与分力的关系,站在更高维度去思考该问题,合力方向与单个方向的不同将使得各个维度的变化量不同)。 

技术图片

1.2 算法流程

(1)解析解

直接计算可得

 技术图片

(2)梯度下降法

 技术图片

 

 其中,当采用随机梯度下降时,步骤2为:

 技术图片

当采用批量梯度下降时,步骤2为:

 技术图片

1.3 注意事项

(1)解析解的求解要求 可逆,当它不可逆时:

可逆矩阵要求方阵的行列式为0,要求矩阵满秩,应去除共线性的特征和多余特征

1)考虑是否存在多余特征,去掉多余特征

2)降维去除共线性的特征(呈比例关系的特征)

3)加入惩罚项保证可逆

 

(2)为防止回归得到的模型过拟合,应在损失函数中加入正则项

正则项有分L1正则(Lasso回归)与L2正则(岭回归)

 技术图片

技术图片

 

加入正则项后,所得导数方向为原函数与正则项的切点方向,由于L1正则项的导数方向较少,故加入L1正则项后得到的解其0值较多(忽略了较多维度的影响)

 

技术图片

以上是关于直线扫描算法(个人总结,仅供参考)的主要内容,如果未能解决你的问题,请参考以下文章

面试个人自我评价总结

销售人员工作个人不足总结800字

第一次冲刺-个人总结04

算法——排序算法个人总结

机器学习常见算法个人总结(面试用)

机器学习常见算法个人总结(面试用)转载