StandardScaler возвращает значения NaN

Я пытаюсь построить модель линейной регрессии, используя Pyspark и MLib для прогнозирования цены закрытия акций. Схема показана ниже.

root
 |-- Date: timestamp (nullable = true)
 |-- Open: double (nullable = true)
 |-- High: double (nullable = true)
 |-- Low: double (nullable = true)
 |-- Close: double (nullable = true)
 |-- Adj Close: double (nullable = true)
 |-- Volume: double (nullable = true)

Я создал DenseVector атрибутов Open, High, Low, Adj Close и Volume для ввода и передал его в StandardScaler.

+--------+----------------------------------------------+
|target  |features                                      |
+--------+----------------------------------------------+
|2.77212 |[2.83162,3.53661,2.52112,2.77212,164329.0]    |
|0.753325|[2.79376,2.79881,0.714725,0.753325,674188.0]  |
|0.701897|[0.706136,0.87981,0.629191,0.701897,532170.0] |
|0.708448|[0.713989,0.729854,0.636546,0.708448,405283.0]|
|1.06786 |[0.708087,1.13141,0.663235,1.06786,1463100.0] |
+--------+----------------------------------------------+
from pyspark.ml.linalg import DenseVector
from pyspark.ml.feature import StandardScaler

ss = StandardScaler(inputCol='features', outputCol='features_scaled')
scaler = ss.fit(df)
print(scaler.mean)
print(scaler.std)

И среднее значение, и стандартное значение печатаются как nan.

[nan,nan,nan,nan,nan]
[nan,nan,nan,nan,nan]

На SO был аналогичный вопрос (StandardScaler возвращает NaN), где было предложено изменить тип данных, поэтому теперь я использую double вместо float. Кроме того, в наборе данных нет нулевых значений.

Может кто-нибудь объяснить, что здесь происходит не так и каков будет правильный подход?


person AbhinavG    schedule 21.11.2020    source источник
comment
Не удается воспроизвести вашу проблему со Spark 3.0.1 — я получаю нормальные значения как для scaler.mean, так и для scaler.std.   -  person desertnaut    schedule 21.11.2020