Spark:使用训练集统计信息规范化/标准化测试集

时间:2016-03-04 13:02:16

标签: apache-spark machine-learning pyspark

这是机器学习中非常常见的过程。 我有一个数据集,我把它分成训练集和测试集。 由于我对训练集应用了一些规范化和标准化, 我想使用训练集的相同信息(mean / std / min / max 每个特征的值),以应用规范化和标准化 到了测试集。你知道这样做的最佳方法吗?

我知道MinMaxScaler,StandardScaler等的功能。

1 个答案:

答案 0 :(得分:0)

您可以通过训练和测试集上的几行代码实现此目的。

培训 方面,有两种方法:

<强> MultivariateStatisticalSummary

http://spark.apache.org/docs/latest/mllib-statistics.html

val summary: MultivariateStatisticalSummary = Statistics.colStats(observations)
println(summary.mean) // a dense vector containing the mean value for each column
println(summary.variance) // column-wise variance
println(summary.numNonzeros) // number of nonzeros in each 

使用SQL

from pyspark.sql.functions import mean, min, max
In [6]: df.select([mean('uniform'), min('uniform'), max('uniform')]).show()
+------------------+-------------------+------------------+
|      AVG(uniform)|       MIN(uniform)|      MAX(uniform)|
+------------------+-------------------+------------------+
|0.5215336029384192|0.19657711634539565|0.9970412477032209|
+------------------+-------------------+------------------+

测试 数据上 - 您可以使用上面从培训数据中获得的统计信息手动&#34;规范化数据。您可以决定您希望规范化的意义:例如

学生T

     val normalized = testData.map{ m =>
            (m - trainMean) / trainingSampleStddev
      }

功能缩放

     val normalized = testData.map{ m =>
            (m - trainMean) / (trainMax - trainMin)
      }

还有其他人:看看https://en.wikipedia.org/wiki/Normalization_(statistics)