11.4 数据类型

MLlib 包含一些特有的数据类型,它们位于:

主要的几个如下所列:

操作向量

作为 MLlib 中最常用的数据类型, Vector 类有一些需要注意的地方。

  1. 向量有两种:
    1.1 稠密向量
    稠密向量把所有维度的值存放在一个浮点数数组中。
    例如,一个 100 维的向量会存储 100 个双精度浮点数。
    1.2 稀疏向量
    稀疏向量只把各维度中的非零值存储下来。
    当最多只有 10% 的元素为非零元素时,我们通常更倾向于使用稀疏向量(不仅是出于对内存使用的考虑,也是出于对速度的考虑)。
    许多特征提取技术都会生成非常稀疏的向量,所以这种方式常常是一种很关键的优化手段。

  2. 创建向量的方式在各种语言中有一些细微的差别。
    2.1 在 Python 中,你在 MLlib 中任意地方传递的 NumPy 数组都表示一个稠密向量,你也可以使用 mllib.linalg.Vectors 类创建其他类型的向量。
    2.2 在 Java 和 Scala 中,都需要使用 mllib.linalg.Vectors 类。

创建向量:

在 Java 和 Scala 中,MLlib 的 Vector 类只是用来为数据表示服务的,而没有在用户 API 中提供加法和减法这样的向量的算术操作。
这主要是为了让 MLlib 保持在较小规模内,因为实现一套完整的线性代数库超出了本工程的范围。

如果你想在你的程序中进行向量的算术操作,可以使用一些第三方的库,比如 Scala 中的 Breeze 或者 Java 中的 MTJ,然后再把数据转为 MLlib 向量。