【问题标题】:Pearson Correlation after Normalization标准化后的 Pearson 相关性
【发布时间】:2017-03-08 19:05:35
【问题描述】:

我想规范化我的数据并计算 pearson 相关性。如果我在没有标准化的情况下尝试这个,它会起作用。通过规范化,我收到此错误消息: AttributeError: 'numpy.ndarray' object has no attribute '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'))

【问题讨论】:

  • 可能需要从 numy 数组创建数据框 - normalizeddf_train = pd.Dataframe(normalizeddf_train)

标签: python pandas numpy scikit-learn pearson


【解决方案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

【讨论】:

  • 感谢您的好回答。另一个问题是:怎么可能只有特征“F”的前三分?这样您就可以在第一个视图中看到“F”的前 3 个相关性。例如top correlation to F: feature 3: -0.998906 , feature 0: -0.994805, feature 1:-0.872187
  • 我认为需要print(pd.DataFrame(normalizeddf_train).corr(method='pearson').nsmallest(3,5))print(pd.DataFrame(normalizeddf_train).corr(method='pearson').nlargest(3,5)) 其中3 是值的数量,5 是列名。还要检查nsmallestnlargest
  • 下一个问题是,如何为我的进一步预测模型选择列 A 和 D。我问是因为我只有 indizes 但没有列名。
  • 嗯,你可以像print(pd.DataFrame(normalizeddf_train, columns = df_train.columns).corr(method='pearson'))一样将参数列添加到Dataframe构造函数中,然后在输出中获取原始列。
  • pandas 的 corr 函数不会自动对数据进行线性归一化吗?所以不需要事先做?
猜你喜欢
  • 2014-08-16
  • 1970-01-01
  • 2020-02-06
  • 1970-01-01
  • 2019-02-15
  • 1970-01-01
  • 2016-05-09
  • 2013-03-30
  • 1970-01-01
相关资源
最近更新 更多