机器学习入门 5-4 向量化

2019-11-13 14:05:28 浏览数 (1)

本系列是《玩转机器学习教程》一个整理的视频笔记。前一小节实现了简单线性回归,但是性能比较低。本小节主要介绍使用向量化的方式提升性能。

简单线性回归

先来回归一下简单线性回归优化目标以及通过最小二乘的方式求得的参数a,b的解析解。

对于参数b的解析解来说,比较简单,关键在于参数a的式子,在上一个小节中,我们是通过循环的方式来求解分子和分母,前面也说过,使用for循环的这种方式,性能相对是比较低的,如果有办法将for循环的计算变成向量之间的计算的话,得益于numpy模块性能就会大大的提升,这就是向量化运算含义。

因此先看看下面的式子,看看除了使用for循环,有没有别的替代方案可以使用。其实上面的w和v可以看成是一个向量,而将两个向量进行点乘之后正好是上面对应元素相乘后相加的结果,因此我们可以通过numpy中的点乘操作进行求解。

上面我们将对应元素相乘然后相加的操作看成是向量之间的点乘,这也是为什么在最小二乘求解a的解析解的时候要把式子写成相乘累加的形式,这样就可以将其转换成向量之间的运算,进行向量化运算提升性能。

使用向量化运算实现线性回归算法

前面使用sklearn的思想封装了一个名为"SimpleLinearRegression1"的类,在类中使用for循环的方式来求解参数a的值。

实现向量化的代码只需将for循环部分改成向量点乘即可:

为了比较两者的性能,将两种方式导入jupyter中,通过魔法命令来验证性能。

0 人点赞