试图理解 Spark 的归一化算法。我的小测试集包含 5 个向量:
{0.95, 0.018, 0.0, 24.0, 24.0, 14.4, 70000.0},
{1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 70000.0},
{-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 70000.0},
{-0.95, 0.018, 0.0, 24.0, 24.0, 14.4, 70000.0},
{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 70000.0},
我希望这new Normalizer().transform(vectors)
会创建JavaRDD
每个向量特征被归一化为(v-mean)/stdev
特征-0、`特征-1等
的所有值的位置。结果集是:
[-1.4285714276967932E-5,-1.4285714276967932E-5,-1.4285714276967932E-5,-1.4285714276967932E-5,-1.4285714276967932E-5,-1.4285714276967932E-5,0.9999999993877552]
[1.357142668768307E-5,2.571428214508371E-7,0.0,3.428570952677828E-4,3.428570952677828E-4,2.057142571606697E-4,0.9999998611976999]
[-1.357142668768307E-5,2.571428214508371E-7,0.0,3.428570952677828E-4,3.428570952677828E-4,2.057142571606697E-4,0.9999998611976999]
[1.4285714276967932E-5,1.4285714276967932E-5,1.4285714276967932E-5,1.4285714276967932E-5,1.4285714276967932E-5,1.4285714276967932E-5,0.9999999993877552]
[0.0,0.0,0.0,0.0,0.0,0.0,1.0]
请注意,所有原始值 7000.0 都会产生不同的“标准化”值。此外,例如,1.357142668768307E-5
当值为:.95
、1
、-1
、-.95
、时如何计算0
?更重要的是,如果我删除一个功能,结果会有所不同。找不到有关该问题的任何文档。
事实上,我的问题是,如何正确规范化 RDD 中的所有向量?