老师说下* w的机制,为什么这就投影了。背后的语法是什么,于dot的矩阵乘法有何区别。谢谢

来源:7-4 求数据的前n个主成分

慕尼黑6095861

2021-12-03

写回答

1回答

liuyubobobo

2021-12-07

我猜你问的是这段代码

//img.mukewang.com/szimg/61ae96320958230d03870096.jpg


==========


首先在 numpy 中dot 表示的 向量或者向量之间的点乘矩阵或者向量之间的点乘或者矩阵和矩阵之间的点乘。注意这三种乘法严格意义上在数学上是不同的作用的对象都不同但由于他们之间可以使用矩阵乘法做桥梁统一起来把向量看做某个维度是 1 的二维矩阵所以我们都管它叫 dot。在这段程序中X[i] 和 w 都是向量所以dot 表示的是向量和向量的点乘。


但是 *w 是完全不同的。在 numpy 中* 表示的是一个数字和一个矩阵或者向量的乘法注意乘法运算中的一个对象是标量一个数字。


如果举例子

[1, 2].dot([3, 4]) = 1 * 3 + 2 * 4 = 11 => 这是向量和向量的点乘

2 * [3, 4] = [6, 8] => 这是一个数字和向量的乘法


==========


这段代码的所有逻辑的含义都在这页 ppt 中

//img.mukewang.com/szimg/61ae979f094ec14122481362.jpg


首先两个向量做点乘其结果是一个数字。这个数字的几何意义就是这页 ppt 右侧第一个式子表示的||X[i]|| * ||w|| * cos(theta)。而 ||X[i]|| * cos(theta) 就是把 X[i] 投影到 w 上的长度这是 cos 的定义。而 ||w|| = 1所以得到X[i].dot(w) = ||X[i]_project)||即把 X[i] 投影到 w 上的长度。

如果对这页 ppt 右侧第一个式子这个结论不了解可以找一下网上的证明比如这里https://zhuanlan.zhihu.com/p/359975221 btw这是线性代数的内容如果从没有接触过的话可能需要稍微补一下线性代数


我们假设 X[i].dot(w) 的结果是 c。注意c 是一个数字。那么下面c * w 就是在 w 方向上缩放 c 倍。也就是我们真正得到了这个投影的向量是多少。

X[i].dot(w) 是 X[i] 在 w 上投影的长度w 本身是方向向量二者相乘就是这个向量是谁。

也就是这页 ppt 中蓝色的向量。


最后用 X[i] - 蓝色的向量得到的结果就是这页 ppt 中虚线的向量是谁。这是向量的减法定义的。这个虚线的向量和 w 是垂直的。也就是 X 向量抛掉了 w 方向的分量之后剩下了谁。


继续加油


0
0

Python3入门机器学习 经典算法与应用  

Python3+sklearn,兼顾原理、算法底层实现和框架使用。

5893 学习 · 2454 问题

查看课程