Pyspark sql функции не совпадают с mllib Статистика - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь построить Матрицу корреляции Однако, когда я проверяю результаты, они не совпадают.

>>> from pyspark.sql.functions import corr
>>> df.agg(corr("A", "B")).show()
+----------------------------------+                                            
|corr(A, B)|
+----------------------------------+
|                0.9942345980360309|
+----------------------------------+

с этим

>>> from pyspark.mllib.stat import Statistics
>>> f2=df[["A", "B"]].rdd.map(lambda row: row[0:])
>>> Statistics.corr(f2, method="pearson")
array([[ 1., nan],                                                              
       [nan,  1.]])

«копейщик» выглядит хорошо

>>> Statistics.corr(f2, method="spearman")
array([[1.        , 0.99339392],                                                
       [0.99339392, 1.        ]])

Я вижу, что sql functions дает корреляцию, которая кажется разумной, однако mllib дает NaN, которая кажется неправильной.Что я тут не так делаю?Документы говорят, что оба дают корреляцию Пирсона.

Нан появляется, когда Std Dev равен 0 .Однако здесь значения сигмы не равны 0:

>>> df[["A"]].describe().show()
...
|   mean| 0.3052428786040861|
| stddev|0.06058014576499576|


>>> df[["B"]].describe().show()
...
|   mean| 0.2867470019556179|
| stddev|0.05866565613026769|
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...