【天池基础知识】 - 查看特征变量的相关性(计算相关性系数+画出热力图+筛选特征变量+Box-Cox变换)

1、计算相关性系数

使用函数corr()

代码展示:

train_corr = train_data.corr()
train_corr

只截取一部分:
在这里插入图片描述

2、画出热力图

1、单纯的画一个热力图:

ax = plt.subplots(figsize=(20,16))
ax = sns.heatmap(train_corr)

在这里插入图片描述
2、画一个含有对应相关性数字的热力图

ax = plt.subplots(figsize=(20,16))
ax = sns.heatmap(train_corr,square = True,annot = True )

在这里插入图片描述

3、筛选特征变量

1、nlargest: 官方文档

nlargest目的是:找k个与target最为接近的特征变量

DataFrame.nlargest(n, columns, keep=‘first’)
n:要返回的行数
columns:要排序的列标签

2、注意

cols = train_corr.nlargest(k, 'target').indexcols = train_corr.nlargest(k, 'target')['target'].index同等地位
但是很明显,官方的文档中是不存在后面加一个[]的,而且不加['target']只加一个index也是对的
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

完整代码:

#寻找K个最相关的特征信息
k = 14 # number of variables for heatmap
cols = train_corr.nlargest(k, 'target')['target'].index

hm = plt.subplots(figsize=(10, 10))#调整画布大小
hm = sns.heatmap(train_data[cols].corr(),annot=True,square=True)

plt.show()

在这里插入图片描述
3、快速的删除一些不重要的特征

# Threshold for removing correlated variables
threshold = 0.5

# Absolute value correlation matrix
corr_matrix = data_train1.corr().abs()
drop_col=corr_matrix[corr_matrix["target"]<threshold].index
#快速的删除一些不重要的特征
data_all.drop(drop_col, axis=1, inplace=True)

4、Box-Cox变换

  • Box-Cox变换是统计建模的一种数据转换方法
  • 它可以使得线性回归模型在满足线性,正态性,独立性以及方差齐性的同时吗,也不会丢失信息。

在做box-cox变换之前,需要对数据做归一化预处理。

注意:归一化数据处理的时候:
小数据 →测试集训练集一起归一化
大数据→分开对测试集和训练集

为什么呢?一般来讲,数据比较多的时候,其实是更符合正态分布或者分布十分均匀,但是小数据的话,有可能存在分布不均匀的现象

为了避免这种现象导致后续模型训练的效果太差,我们一般会把测试和训练数据都进行归一化处理,而且是同步归一化。

后续将会围绕着代码进行展开:

1、合并数据集和训练集

pd.concat([train_data['V0'],train_data['V1']])

2、归一化
公式:(col - col.min()) / (col.max() - col.min())

3、归一化重要代码

train_data_process[cols_numeric].apply(scale_minmax,axis = 0)

4、完整代码:

cols_numeric=list(data_all.columns)

def scale_minmax(col):
    return (col-col.min())/(col.max()-col.min())

data_all[cols_numeric] = data_all[cols_numeric]
								.apply(scale_minmax,axis=0)

data_all[cols_numeric].describe()

绘制Box-Cox前后的直方图,Q-Q图,散点图的对比

cols_numeric_left = cols_numeric[0:13]
cols_numeric_right = cols_numeric[13:]


# 融合测试集和训练集
train_data_process = pd.concat([train_data_process, train_data['target']], axis=1)

fcols = 6
frows = len(cols_numeric_left)
plt.figure(figsize=(4*fcols,4*frows))
i=0

for var in cols_numeric_left:
    dat = train_data_process[[var, 'target']].dropna()
        
    i+=1
    plt.subplot(frows,fcols,i)
    # 直方图
    sns.distplot(dat[var] , fit=stats.norm);
    plt.title(var+' Original')
    plt.xlabel('')
        
    i+=1
    plt.subplot(frows,fcols,i)
    # Q-Q图
    _=stats.probplot(dat[var], plot=plt)
    plt.title('skew='+'{:.4f}'.format(stats.skew(dat[var])))
    plt.xlabel('')
    plt.ylabel('')
        
    i+=1
    plt.subplot(frows,fcols,i)
    # 散点图
    plt.plot(dat[var], dat['target'],'.',alpha=0.5)
    plt.title('corr='+'{:.2f}'.format(np.corrcoef(dat[var], dat['target'])[0][1]))
 
    i+=1
    plt.subplot(frows,fcols,i)
    # 开始Box-Cox转换
    trans_var, lambda_var = stats.boxcox(dat[var].dropna()+1)
    trans_var = scale_minmax(trans_var)    
    # 绘制直方图  
    sns.distplot(trans_var , fit=stats.norm);
    plt.title(var+' Tramsformed')
    plt.xlabel('')
        
    i+=1
    plt.subplot(frows,fcols,i)
    # 绘制Q-Q图
    _=stats.probplot(trans_var, plot=plt)
    plt.title('skew='+'{:.4f}'.format(stats.skew(trans_var)))
    plt.xlabel('')
    plt.ylabel('')
        
    i+=1
    plt.subplot(frows,fcols,i)
    # 绘制散点图
    plt.plot(trans_var, dat['target'],'.',alpha=0.5)
    plt.title('corr='+'{:.2f}'.format(np.corrcoef(trans_var,dat['target'])[0][1]))

box-cox官方文档:戳一戳:官方文档

dropna 戳一戳:官方文档
删除缺失值

在这里插入图片描述

  • 2
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bessie_Lee_gogogo

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值