【数据竞赛】百赛百试,十试九灵的特征筛选策略-Pearson Correlation

共 3778字,需浏览 8分钟

 ·

2021-05-10 20:47

作者:杰少

Kaggle竞赛知识点--Pearson Correlation!

简 介

Pearson相关性在采用线性模型建模时是必不可少的一种建模策略,它不仅可以用来判断特征与目标变量之间的关系,与此同时还可以对冗余特征进行筛选,其对于特征之间相关性的筛选在我尝试的所有竞赛中基本都带来了很不错的提升。即使没有提升,效果在删去了很多特征之后效果并没有下降。Pearson相关系数的计算是非常简单而且实用的。

在一些统计学的博客中,大家认为:

  • 完美:如果值接近± 1,那么这就是一个完美的相关性:当一个变量增加时,另一个变量也趋向于增加(如果是正的)或减少(如果是负的)。
  • 高度相关:如果系数值介于± 0.50和± 1,那么就说这是一个很强的相关性。
  • 中度相关:如果值介于± 0.30和± 0.49,则称为中等相关性。
  • 低度相关:当值低于± 0.29时,则表示相关性很小。
  • 无相关性:当值为零时。

到目前为止,Pearson Correlation的方法依然是我所有竞赛中都必须会尝试的策略之一。

Pearson Correlation

Pearson Correlation系数的计算

  • 表示两个特征,为第个样本对应X特征的值,为第个样本对应Y特征的值;
代码

1. 特征标签的筛选

  • 计算与标签的相关性进行特征的筛选
import pandas as pd 
import numpy as np   
# 构建数据集
df = pd.DataFrame()
df['f1'] = [1,0,0,0,0] * 10
df['f2'] = [1,1,0,0,0] * 10
df['f3'] = [-1,-2,-3,-4,-5] * 10
df['y']  = [1,1,0,0,0] * 10
def Pearson_cor_Selector(X, y,num_feats):
    cor_list     = []
    feature_name = X.columns.tolist()
    # calculate the correlation with y for each feature
    for i in X.columns.tolist():
        cor = np.corrcoef(X[i], y)[01]
        cor_list.append(cor)
    scores = pd.DataFrame({'fea':feature_name, 'score':cor_list})
    # replace NaN with 0
    cor_list = [0 if np.isnan(i) else i for i in cor_list]
    # feature name
    cor_feature = X.iloc[:,np.argsort(np.abs(cor_list))[-num_feats:]].columns.tolist()
    # feature selection? 0 for not select, 1 for select
    cor_support = [True if i in cor_feature else False for i in feature_name]
    return scores, cor_feature

scores, cor_feature = Pearson_cor_Selector(df[['f1','f2','f3']], y = df['y'].values,num_feats = 2)
print(str(len(cor_feature)), 'selected features')
2 selected features
cor_feature
['f3', 'f2']
scores

feascore
0f10.612372
1f21.000000
2f30.866025

2. 标签标签的筛选

  • 计算与标签之间的相关性,进行特征冗余度筛选。
df['f2_bar'] = df['f2'].values 
def Pearson_cor_Selector2(X1, X2, threshold = 0.99): 
    '''
        X1,X2:两个不同的特征值
        threshold:阈值
    '''

    is_redundancy = 0
    cor = np.corrcoef(X1, X2)[01]
    if cor >= threshold:
        is_redundancy = 1
    return is_redundancy
Pearson_cor_Selector2(df['f2'].values, df['f2_bar'].values)
1
Pearson_cor_Selector2(df['f3'].values, df['f2_bar'].values)
0
适用问题

Pearson Correlation目前一般多用于连续特征变量之间的相关性计算,针对类别特征,尤其是无序的类别特征,需要进行特定的编码转化之后效果会好些,如果是使用线性模型进行的建模,Pearson Correlation的使用基本就成了必然,而且大多数情况下,都是有不错提升的。

参考文献
  1. The 5 Feature Selection Algorithms every Data Scientist should know
  2. https://www.youtube.com/watch?v=lVOzlHx_15s

往期精彩回顾





  1. 适合初学者入门人工智能的路线及资料下载

  2. 机器学习及深度学习笔记等资料打印

  3. 机器学习在线手册

  4. 深度学习笔记专辑

  5. 《统计学习方法》的代码复现专辑

  6. AI基础下载

  7. 机器学习的数学基础专辑

  8. 温州大学《机器学习课程》视频

本站qq群851320808,加入微信群请扫码:

浏览 30
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报