簡體   English   中英

如何轉換一組值,使每個值更接近平均值,但在 PySpark 中具有類似形狀的分布(即減少 stdev)

[英]How to convert an array of values so that each value is closer the mean, but with a similarly shaped distribution (i.e. reduce the stdev) in PySpark

我希望我已經用正確的術語描述了我需要做的工作。 本質上,我需要“壓縮”一系列值,以便所有值都更接近平均值,但它們的值應該相對於它們與平均值的距離減少(或增加)......

數據框如下所示:

>>> df[['population', 'postalCode']].show(10)
+----------+----------+
|population|postalCode|
+----------+----------+
|      1464|     96028|
|       465|     96015|
|       366|     96016|
|      5490|     96101|
|       183|     96068|
|       569|     96009|
|       366|     96054|
|        90|     96119|
|       557|     96006|
|       233|     96116|
+----------+----------+
only showing top 10 rows

>>> df.describe().show()
+-------+------------------+------------------+
|summary|        population|        postalCode|
+-------+------------------+------------------+
|  count|              1082|              1082|
|   mean|23348.511090573014| 93458.60813308688|
| stddev|21825.045923603615|1883.6307236060127|
+-------+------------------+------------------+

總體均值符合我的目的,但我需要它周圍的方差更小......

希望這是有道理的,非常感謝在 pyspark 或 node.js 中執行此工作的任何幫助。

總體思路是:

  1. 將平均值轉換為零。
  2. 重新調整到新的標准偏差
  3. 轉換為所需的平均值(在本例中為原始平均值)

在偽代碼中,如果您的值存儲在變量x

x.scaled = new.mean + (x - mean(x)) * new.SD/sd(x)

或者,對於特定情況,例如 SD=1000 並且平均值沒有變化:

x.scaled = mean(x) + (x - mean(x)) * 1000/sd(x)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM