gpt4 book ai didi

scala - 如何使用scala规范化或标准化spark中具有多个列/变量的数据?

转载 作者:行者123 更新时间:2023-12-03 15:38:42 30 4
gpt4 key购买 nike

我是 apache spark 和 scala 的新手。我有这样的数据集,我从 csv 文件中获取并使用 scala 将其转换为 RDD。

+-----------+-----------+----------+
| recent | Freq | Monitor |
+-----------+-----------+----------+
| 1 | 1234 | 199090|
| 4 | 2553| 198613|
| 6 | 3232 | 199090|
| 1 | 8823 | 498831|
| 7 | 2902 | 890000|
| 8 | 7991 | 081097|
| 9 | 7391 | 432370|
| 12 | 6138 | 864981|
| 7 | 6812 | 749821|
+-----------+-----------+----------+

我想计算 z-score 值或标准化数据。所以我正在计算每列的 z 分数,然后尝试将它们组合起来,以便获得标准比例。

这是我计算第一列 z 分数的代码
val scores1 = sorted.map(_.split(",")(0)).cache
val count = scores.count
val mean = scores.sum / count
val devs = scores.map(score => (score - mean) * (score - mean))
val stddev = Math.sqrt(devs.sum / count)
val zscore = sorted.map(x => math.round((x.toDouble - mean)/stddev))

我如何计算每一列?或者有没有其他方法来规范化或标准化数据?

我的要求是分配等级(或比例)。

谢谢

最佳答案

如果要对列进行标准化,可以使用 StandardScaler来自 Spark MLlib 的类。数据格式应为RDD[Vectors[Double] ,其中向量是 MLlib Linalg 的一部分包裹。您可以选择使用均值或标准差或两者来标准化您的数据。

import org.apache.spark.mllib.feature.StandardScaler
import org.apache.spark.mllib.linalg.Vectors

val data = sc.parallelize(Array(
Array(1.0,2.0,3.0),
Array(4.0,5.0,6.0),
Array(7.0,8.0,9.0),
Array(10.0,11.0,12.0)))

// Converting RDD[Array] to RDD[Vectors]
val features = data.map(a => Vectors.dense(a))
// Creating a Scaler model that standardizes with both mean and SD
val scaler = new StandardScaler(withMean = true, withStd = true).fit(features)
// Scale features using the scaler model
val scaledFeatures = scaler.transform(features)

scaledFeatures RDD 包含所有列的 Z 分数。

希望这个答案有帮助。查看文档以获取更多信息。

关于scala - 如何使用scala规范化或标准化spark中具有多个列/变量的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36736411/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com