Корреляция Пирсона после нормализации

Я хочу нормализовать свои данные и вычислить корреляцию Пирсона. Если я попробую это без нормализации, это сработает. При нормализации я получаю это сообщение об ошибке: AttributeError: объект 'numpy.ndarray' не имеет атрибута 'corr' Что я могу сделать, чтобы решить эту проблему?

import numpy as np
import pandas as pd


filename_train = 'C:\Users\xxx.xxx\workspace\Dataset\!train_data.csv'
names = ['a', 'b', 'c', 'd', 'e', ...]
df_train = pd.read_csv(filename_train, names=names)

from sklearn.preprocessing import Normalizer
normalizeddf_train = Normalizer().fit_transform(df_train)

#pearson correlation
pd.set_option('display.width', 100)
pd.set_option('precision', 2)
print(normalizeddf_train.corr(method='pearson'))

person matthew    schedule 26.10.2016    source источник
comment
Возможно, нужно создать кадр данных из массива numy - normalizeddf_train = pd.Dataframe(normalizeddf_train)   -  person jezrael    schedule 26.10.2016


Ответы (1)


Вам нужен конструктор DataFrame, потому что вывод fit_transform равен numpy array и работает с DataFrame.corr:

df_train = pd.DataFrame({'A':[1,2,3],
                   'B':[4,5,6],
                   'C':[7,8,9],
                   'D':[1,3,5],
                   'E':[5,3,6],
                   'F':[7,4,3]})

print (df_train)
   A  B  C  D  E  F
0  1  4  7  1  5  7
1  2  5  8  3  3  4
2  3  6  9  5  6  3

from sklearn.preprocessing import Normalizer
normalizeddf_train = Normalizer().fit_transform(df_train)
print (normalizeddf_train)
[[ 0.08421519  0.33686077  0.58950634  0.08421519  0.42107596  0.58950634]
 [ 0.1774713   0.44367825  0.70988521  0.26620695  0.26620695  0.3549426 ]
 [ 0.21428571  0.42857143  0.64285714  0.35714286  0.42857143  0.21428571]]

print(pd.DataFrame(normalizeddf_train).corr(method='pearson'))
          0         1         2         3         4         5
0  1.000000  0.917454  0.646946  0.998477 -0.203152 -0.994805
1  0.917454  1.000000  0.896913  0.894111 -0.575930 -0.872187
2  0.646946  0.896913  1.000000  0.603899 -0.878063 -0.565959
3  0.998477  0.894111  0.603899  1.000000 -0.148832 -0.998906
4 -0.203152 -0.575930 -0.878063 -0.148832  1.000000  0.102420
5 -0.994805 -0.872187 -0.565959 -0.998906  0.102420  1.000000
person jezrael    schedule 26.10.2016
comment
Спасибо за хороший ответ. Другой вопрос: как возможно иметь только три верхних балла для функции «F»? Так что вы можете увидеть 3 верхних корреляции «F» на первом просмотре. например top correlation to F: feature 3: -0.998906 , feature 0: -0.994805, feature 1:-0.872187 - person matthew; 26.10.2016
comment
Я думаю, что needprint(pd.DataFrame(normalizeddf_train).corr(method='pearson').nsmallest(3,5)) или print(pd.DataFrame(normalizeddf_train).corr(method='pearson').nlargest(3,5)), где 3 — количество значений, а 5 — имя столбца. Проверьте также nsmallest и nlargest. - person jezrael; 26.10.2016
comment
Следующий вопрос заключается в том, как мне выбрать столбцы A и D для моей дальнейшей прогностической модели. Я спрашиваю, потому что у меня есть только индикации, но нет имен столбцов. - person matthew; 01.11.2016
comment
Хммм, вы можете добавить столбцы параметров в конструктор Dataframe, например print(pd.DataFrame(normalizeddf_train, columns = df_train.columns).corr(method='pearson')), а затем получить исходные столбцы на выходе. - person jezrael; 01.11.2016
comment
Разве функция исправления pandas не линейно нормализует данные автоматически? То есть не нужно делать это заранее? - person mrbTT; 26.09.2018
comment
@mrbTT - понятия не имею, кажется, нет. - person jezrael; 27.09.2018
comment
Я так думаю из-за комментария Ника Кокса к этому вопросу: для расчета коэффициента корреляции">stats.stackexchange.com/questions/125259/ - person mrbTT; 27.09.2018
comment
@mrbTT - я не специалист по статистике, поэтому не могу с этим помочь. - person jezrael; 27.09.2018
comment
Ну, я тоже, я просто публиковал здесь, чтобы кто-то мог найти его и ответить... Тем более, что поиск в Google того, что делает функция corr pandas, не дал результатов. - person mrbTT; 27.09.2018