數據分析——特征工程之特征關聯
一、特征的相關矩陣
特征的相關矩陣
目標的相關矩陣
畫出最相關的特征之間的關系
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之間。
兩個變量之間的皮爾遜相關系數定義為兩個變量之間的協(xié)方差和標準差的商。
2、Kendall correlation coefficient(肯德爾相關性系數)
它所計算的對象是分類變量。
3、Spearman correlation coefficient(斯皮爾曼相關性系數)
它是衡量兩個變量的依賴性的非參數指標。它利用單調方程評價兩個統(tǒng)計變量的相關性,如果數據中沒有重復值,并且兩個變量完全單調相關時,斯皮爾曼相關系數則為+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()
盡管我們已經知道了這些特征之間的一些關系,但是通過這個圖可以給與一個更充分的理由。

《數據科學與人工智能》公眾號推薦朋友們學習和使用Python語言,需要加入Python語言群的,請掃碼加我個人微信,備注【姓名-Python群】,我誠邀你入群,大家學習和分享。
? ? 關于Python語言,有任何問題或者想法,請留言或者加群討論。
