【机器学习】向量化计算 ---机器学习路上必经路欢迎来到
魔术之家!!该文章收录专栏
✨— 机器学习 —✨专栏内容
✨— 【机器学习】浅谈正规方程法&梯度下降 —✨
✨— 【机器学习】梯度下降之数据标准化 —✨
✨— 【机器学习】logistic分类回归算法—✨
✨— 第十届“泰迪杯“感谢学习总结—✨
- 一、求解矩阵
- 二、例一
- 三、例二
- 四、写在最后
在求解矩阵中,往往有很多很好的,经过高度优化的线性代数库,如octave,matlib,python numpy, c++,java.
我们使用这些线性代数库,可以短短几行实现 所要的效果。
阅读本文内容(需要一点点线性代数的知识)
二、例一例如 求公式:
h
(
x
)
=
∑
i
=
1
n
θ
i
∗
x
i
h(x) = sum_{i=1}^ntheta_i*x_i
h(x)=∑i=1nθi∗xi
我们可以通过循环每一个值来求 每一个
i
i
i所对应的结果,但此时循环的时间复杂度为
O
(
n
)
O(n)
O(n) , 我们可以把
θ
i
(
i
=
1
,
2
,
3...
n
)
theta_i(i=1,2,3...n)
θi(i=1,2,3...n) 看为
n
n
n维的列向量,
x
i
x_i
xi作为
n
n
n维的列向量,则原公式即为求两个向量的内积
θ
T
∗
x
i
theta^T*x_i
θT∗xi 来求得方程,这样在numpy中仅仅需要一行代码。如下图(演示代码为octave(matlib开源版))
c++实现
- 再看一个复杂一点的例子:
(对梯度下降还不了解建议先食用文章:机器学习】浅谈正规方程法&梯度下降)
在梯度下降(Gradient descent)同步更新参数
θ
i
(
i
=
1
,
2
,
3...
m
)
中
theta_i(i=1,2,3...m)中
θi(i=1,2,3...m)中
我们可以通过循环
i
i
i得到每个参数更新,但我们是否能用例子一的方法 简化呢,
如图:
我们将所求式子变为 向量之间的运行,
θ
=
θ
−
α
∗
δ
theta = theta - alpha * δ
θ=θ−α∗δ
(其中:
δ
δ
δ =
∑
x
=
1
n
(
h
θ
(
x
)
−
y
i
)
2
n
∗
x
i
sum_{x=1}^n frac{(h_theta(x) - y_i)^2}{ n }*x_i
∑x=1nn(hθ(x)−yi)2∗xi,
h
θ
(
x
)
−
y
i
h_theta(x) - y_i
hθ(x)−yi 是一个实数,
x
i
x_i
xi是特征维度的列向量)
此时参数 θ i theta_i θi也能同步更新,符合要求
四、写在最后在面对,数据为百万级别,千万级别,或者特征为百万级别,特征级别,向量化计算对提高运算效率非常高效,比for循环要好用得多,这在机器学习中是非常常见的,一定要掌握



