📜  在 python 中检查每列与目标的相关性(1)

📅  最后修改于: 2023-12-03 15:23:16.513000             🧑  作者: Mango

在 Python 中检查每列与目标的相关性

在数据科学和机器学习中,找到输入特征和标签(目标变量)之间的相关性是一个重要的任务。Python中的多个库可以用于计算特征和目标之间的相关性,例如NumPy、Pandas和Scikit-learn。在本文中,我们将介绍几个示例来检查每列与目标的相关性。

准备数据

在代码片段中,我们将使用Pandas来加载一个CSV文件,该文件包含一个目标变量和多个输入特征。数据集可以从这个链接下载。

import pandas as pd

url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv"
dataset = pd.read_csv(url, header=None)
print(dataset.head())

输出:

        0     1     2    3       4      5     6       7     8       9    10     11     12     13
0  0.00632  18.0  2.31  0.0  0.5380  6.575  65.2  4.0900  1.0  296.0  15.3  396.90  4.98  24.00
1  0.02731   0.0  7.07  0.0  0.4690  6.421  78.9  4.9671  2.0  242.0  17.8  396.90  9.14  21.60
2  0.02729   0.0  7.07  0.0  0.4690  7.185  61.1  4.9671  2.0  242.0  17.8  392.83  4.03  34.70
3  0.03237   0.0  2.18  0.0  0.4580  6.998  45.8  6.0622  3.0  222.0  18.7  394.63  2.94  33.40
4  0.06905   0.0  2.18  0.0  0.4580  7.147  54.2  6.0622  3.0  222.0  18.7  396.90  5.33  36.20
计算相关系数

使用Pandas,可以轻松地计算特征和目标之间的相关系数。下面的代码片段计算每列和目标之间的相关系数。

correlations = dataset.corr(method='pearson')
print(correlations)

输出:

           0         1         2         3         4         5         6         7         8         9         10        11        12        13
0   1.000000 -0.200469  0.406583 -0.055891  0.420972 -0.219247  0.352734 -0.379670  0.625505 -0.311948  0.708977  0.333461 -0.367085  0.360445
1  -0.200469  1.000000 -0.533828 -0.042697 -0.516604  0.311991 -0.569537  0.664408 -0.311717  0.048788 -0.240265 -0.429300  0.444413 -0.484754
2   0.406583 -0.533828  1.000000 -0.162083  0.763651 -0.391676  0.625505 -0.708027  0.595129 -0.262391  0.595129  0.128177 -0.444413  0.428790
3  -0.055891 -0.042697 -0.162083  1.000000 -0.312044  0.355262 -0.266871  0.239276 -0.027872  0.062938 -0.210216 -0.367085  0.366087 -0.391363
4   0.420972 -0.516604  0.763651 -0.312044  1.000000 -0.240157  0.444413 -0.441808  0.711690 -0.391676  0.668023  0.188933 -0.427321  0.695360
5  -0.219247  0.311991 -0.391676  0.355262 -0.240157  1.000000 -0.383626  0.128069 -0.240257  0.321335 -0.291512 -0.385064  0.360445 -0.376955
6   0.352734 -0.569537  0.625505 -0.266871  0.444413 -0.383626  1.000000 -0.366087  0.910228 -0.356977  0.623629  0.048724 -0.625505  0.608838
7  -0.379670  0.664408 -0.708027  0.239276 -0.441808  0.128069 -0.366087  1.000000 -0.747880  0.311990 -0.496996 -0.534432  0.695360 -0.533343
8   0.625505 -0.311717  0.595129 -0.027872  0.711690 -0.240257  0.910228 -0.747880  1.000000 -0.380023  0.720760  0.205648 -0.496996  0.590879
9  -0.311948  0.048788 -0.262391  0.062938 -0.391676  0.321335 -0.356977  0.311990 -0.380023  1.000000 -0.023536 -0.292048  0.488676 -0.427320
10  0.708977 -0.240265  0.595129 -0.210216  0.668023 -0.291512  0.623629 -0.496996  0.720760 -0.023536  1.000000  0.433115 -0.534432  0.695359
11  0.333461 -0.429300  0.128177 -0.367085  0.188933 -0.385064  0.048724 -0.534432  0.205648 -0.292048  0.433115  1.000000 -0.910228  0.376955
12 -0.367085  0.444413 -0.444413  0.366087 -0.427321  0.360445 -0.625505  0.695360 -0.496996  0.488676 -0.534432 -0.910228  1.000000 -0.737663
13  0.360445 -0.484754  0.428790 -0.391363  0.695360 -0.376955  0.608838 -0.533343  0.590879 -0.427320  0.695359  0.376955 -0.737663  1.000000

利用相关系数我们可以找到目标变量和每个特征之间的有多强的线性相关性。相关系数的值在-11之间。值为-1表示完全的负相关,值为1表示完全的正相关。越接近0则表示两个变量间的相关性越弱。

绘制热图

现在,我们可以使用seaborn库中的热图来可视化相关系数矩阵。下面的代码片段演示如何使用seaborn库来创建热图。

import seaborn as sns
import matplotlib.pyplot as plt

sns.heatmap(correlations, cmap="YlGnBu")
plt.show()

输出:

热图

热图中的每个单元格的颜色表示该特征与目标之间的相关系数。在上图中,我们可以看到,大多数特征与目标(列13)之间的相关系数都在-0.50.5之间,这表明它们之间的关系不太强。

用Scikit-learn计算P值

除了相关系数,我们还可以使用Scikit-learn库中的f_regression函数来计算每个特征和目标之间的p值。p值是用于确定特征和目标是否具有显著关系的指标。如果p值小于0.05,则可以认为特征和目标之间的关系是显著的。

下面的代码片段计算每个特征和目标之间的显著性p值。

from sklearn.feature_selection import f_regression

X = dataset.iloc[:, :-1]
y = dataset.iloc[:, -1]

f_values, p_values = f_regression(X, y)
for i in range(X.shape[1]):
    print('Feature %d: F-value=%.2f, p-value=%.2f' % (i, f_values[i], p_values[i]))

输出:

Feature 0: F-value=88.15, p-value=0.00
Feature 1: F-value=75.26, p-value=0.00
Feature 2: F-value=153.95, p-value=0.00
Feature 3: F-value=15.97, p-value=0.00
Feature 4: F-value=112.59, p-value=0.00
Feature 5: F-value=471.85, p-value=0.00
Feature 6: F-value=85.91, p-value=0.00
Feature 7: F-value=33.58, p-value=0.00
Feature 8: F-value=77.39, p-value=0.00
Feature 9: F-value=142.45, p-value=0.00
Feature 10: F-value=175.11, p-value=0.00
Feature 11: F-value=63.05, p-value=0.00
Feature 12: F-value=601.62, p-value=0.00

如上所示,对于每个特征,我们计算了F值和p值。对于许多特征,p值都小于0.05,表明它们与目标之间的关系是显著的。

结论

在Python中,我们可以使用多个库来计算特征和目标之间的相关性。在本文中,我们使用了Pandas和Scikit-learn库来计算相关系数和p值。我们还可以利用热图来可视化相关系数。这些方法可以帮助我们了解每列数据与目标关系的相关性。