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