数据分析——特征工程之特征关联

参考 House Price中的most voted文章 https://www.kaggle.com/pmarcelino/comprehensive-data-exploration-with-python

以House Price数据集为例,在对特征相关性进行探究时,主要通过以下三个方面:

一、特征的相关矩阵

  • 特征的相关矩阵
  • 目标的相关矩阵
  • 画出最相关的特征之间的关系
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.read_csv('./data/train.csv')
corr_mat = df.corr()
f, ax = plt.subplots(figsize=(12, 9))
sns.heatmap(corr_mat, vmax=.8, square=True, ax=ax)
plt.show()

通过这个热力图,可以很直观的对各个特征之间的关系一目了然。另外,从图中可以看出TotalBsmtSF和1stFlrSF变量之间的相关性很明显,这就说明了如果同时使用这两个特征就会导致信息的冗余性,所以要尽量避免使用冗余的特征。

其中看一下df.corr()函数的源码:

    def corr(self, method='pearson', min_periods=1):
        """
        Compute pairwise correlation of columns, excluding NA/null values

        Parameters
        ----------
        method : {'pearson', 'kendall', 'spearman'}
            * pearson : standard correlation coefficient
            * kendall : Kendall Tau correlation coefficient
            * spearman : Spearman rank correlation
        min_periods : int, optional
            Minimum number of observations required per pair of columns
            to have a valid result. Currently only available for pearson
            and spearman correlation

        Returns
        -------
        y : DataFrame
        """

默认method参数是pearson,下面介绍下这三种相关系数:

1、Pearson correlation coefficient(皮尔逊相关系数)

皮尔逊相关系数用于度量两个变量X和Y之间的相关性(线性相关),它的值介于-1和1之间

两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差和标准差的商。

扫描二维码关注公众号,回复: 2717887 查看本文章

2、Kendall correlation coefficient(肯德尔相关性系数)

它所计算的对象是分类变量。

具体可以参考 https://blog.csdn.net/wsywl/article/details/5889419http://blog.sina.com.cn/s/blog_69e75efd0102wmd2.html

3、Spearman correlation coefficient(斯皮尔曼相关性系数)

它是衡量两个变量的依赖性的非参数指标。它利用单调方程评价两个统计变量的相关性,如果数据中没有重复值,并且两个变量完全单调相关时,斯皮尔曼相关系数则为+1或者-1。

二、目标的相关矩阵

找到与目标值相关性最大的几个特征,而这几个特征之间的相关性要低。

k = 10
cols = corr_mat.nlargest(k, 'SalePrice')['SalePrice'].index
cm = np.corrcoef(df[cols].values.T)
sns.heatmap(cm, annot=True, square=True, yticklabels=cols.values, xticklabels=cols.values)
plt.show()

通过以上代码得到与目标值相关性最大的前10个值,做出热力图。

从图中可以很明显地看出OverallQual、GrLivArea等特征与SalePrice目标值之间有很大的关联。

三、最相关的特征之间的关系图

cols = ['SalePrice', 'OverallQual', 'GrLivArea', 'GarageCars', 'TotalBsmtSF', 'FullBath', 'YearBuilt']
sns.pairplot(df[cols], height = 2.5)
plt.show()

尽管我们已经知道了这些特征之间的一些关系,但是通过这个图可以给与一个更充分的理由。

猜你喜欢

转载自blog.csdn.net/FrankieHello/article/details/81604806
今日推荐