Я пытаюсь построить модель линейной регрессии, используя 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. Кроме того, в наборе данных нет нулевых значений.
Может кто-нибудь объяснить, что здесь происходит не так и каков будет правильный подход?
scaler.mean
, так и дляscaler.std
. - person desertnaut   schedule 21.11.2020