【数据竞赛】百赛百试,十试九灵的特征筛选策略-Pearson Correlation
Kaggle竞赛知识点--Pearson Correlation!
Pearson相关性在采用线性模型建模时是必不可少的一种建模策略,它不仅可以用来判断特征与目标变量之间的关系,与此同时还可以对冗余特征进行筛选,其对于特征之间相关性的筛选在我尝试的所有竞赛中基本都带来了很不错的提升。即使没有提升,效果在删去了很多特征之后效果并没有下降。Pearson相关系数的计算是非常简单而且实用的。
在一些统计学的博客中,大家认为:
完美:如果值接近± 1,那么这就是一个完美的相关性:当一个变量增加时,另一个变量也趋向于增加(如果是正的)或减少(如果是负的)。 高度相关:如果系数值介于± 0.50和± 1,那么就说这是一个很强的相关性。 中度相关:如果值介于± 0.30和± 0.49,则称为中等相关性。 低度相关:当值低于± 0.29时,则表示相关性很小。 无相关性:当值为零时。
到目前为止,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)[0, 1]
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
fea | score | |
---|---|---|
0 | f1 | 0.612372 |
1 | f2 | 1.000000 |
2 | f3 | 0.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)[0, 1]
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的使用基本就成了必然,而且大多数情况下,都是有不错提升的。
The 5 Feature Selection Algorithms every Data Scientist should know https://www.youtube.com/watch?v=lVOzlHx_15s
往期精彩回顾
本站qq群851320808,加入微信群请扫码:
评论