1、什么是稀疏向量?什么是稠密向量?
在机器学习中,算法工程师会经常用到向量,包括对特征的存储,优化的计算等等。但是具体实现时,经常会采用两种方式存储向量。
一种是使用数组的数据结构对向量建模,这种结构通常存储普通的向量,也称为稠密向量。
一种是使用 map 的数据结构对向量建模,这种结构存储的向量大多数元素等于零,这种向量称为稀疏向量。(先归一化,再创建)
使用这两种不同的存储结构的原因是机器学习中的特征很多时候是高维空间中的元素,具有成千上万的分量,而这些分量是通过离散化得到的,所谓离散化,就是将原来取值为实数(比如某个特征为价格,取值为525.2)的特征,根据取值范围(例如范围在250~700之间)分为若干个区间(例如按照每间隔10为一个区间,即分成了250~260……340~350,350~360,360~370 ,690~700,),原来的一维特征也相应离散为若干维。
如果价格在470~480的区间中,则相应维度的特征取值为1,其他维度的特征取值为0。因此,如果使用稀疏向量存储,不仅节省空间,而且在后续的各种向量操作和优化的计算中会提高效率。
2、Spark ML 库中的稀疏向量与稠密向量
Spark mlib的本地向量有如下两种,但为了效率更高,我们一般选用稀疏向量: