【发布时间】:2018-05-22 08:28:22
【问题描述】:
我正在寻找 Python 的 sklearn.preprocessing.QuantileTransformer 类的 Scala 实现。似乎没有一个类可以在 scala 中实现全部功能。
Python 实现有 3 个主要部分:
1) 使用 numpy.percentile() 计算给定数据和百分位数数组的分位数。如果分位数位于两个输入数据点之间,则使用线性插值。我在 Scala 中能找到的最接近的是微风,它具有 percentile() 函数(观察:DataFrame.stats.approxQuantile() 不执行线性插值,因此不能在这里使用)。
2) 使用 numpy.interp() 将值的输入范围转换为给定范围。例如,如果输入数据范围是 1-100,则可以将其转换为任何给定范围,例如 0-1。当输入数据存在于 2 个分位数之间时,这再次使用线性插值。我在 Scala 中能找到的最接近的类是breeze.interpolation 类。
3) 使用 numpy.ppf() 计算逆 CDF。我相信,为此我可以使用 NormalDistribution 类作为下面的一个答案或 StandardScaler 类。
有什么更好的方法可以让编码更简短更简单?
【问题讨论】:
标签: python scala scikit-learn normal-distribution quantile