StandardScaler no Spark não está funcionando conforme o esperado
Alguma idéia de por que o Spark faria isso porStandardScaler
? Conforme definição deStandardScaler
:
O StandardScaler padroniza um conjunto de recursos para ter média zero e um desvio padrão de 1. O sinalizador withStd escalará os dados para o desvio padrão da unidade, enquanto o sinalizador withMean (false por padrão) centralizará os dados antes de escalá-lo.
>>> tmpdf.show(4)
+----+----+----+------------+
|int1|int2|int3|temp_feature|
+----+----+----+------------+
| 1| 2| 3| [2.0]|
| 7| 8| 9| [8.0]|
| 4| 5| 6| [5.0]|
+----+----+----+------------+
>>> sScaler = StandardScaler(withMean=True, withStd=True).setInputCol("temp_feature")
>>> sScaler.fit(tmpdf).transform(tmpdf).show()
+----+----+----+------------+-------------------------------------------+
|int1|int2|int3|temp_feature|StandardScaler_4fe08ca180ab163e4120__output|
+----+----+----+------------+-------------------------------------------+
| 1| 2| 3| [2.0]| [-1.0]|
| 7| 8| 9| [8.0]| [1.0]|
| 4| 5| 6| [5.0]| [0.0]|
+----+----+----+------------+-------------------------------------------+
No mundo entorpecido
>>> x
array([2., 8., 5.])
>>> (x - x.mean())/x.std()
array([-1.22474487, 1.22474487, 0. ])
No mundo sklearn
>>> scaler = StandardScaler(with_mean=True, with_std=True)
>>> data
[[2.0], [8.0], [5.0]]
>>> print(scaler.fit(data).transform(data))
[[-1.22474487]
[ 1.22474487]
[ 0. ]]