一种可以根据相关性进行特征筛选的函数

#去掉相关性太高的特征
def identify_collinear(corr_matrix,correlation_threshold,X):
    #相关性矩阵
    upper = corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k = 1).astype(np.bool))
    #相关性大小和阈值进行对比
    to_drop = [column for column in upper.columns if any(upper[column].abs() > correlation_threshold)]
    #生成空的dataframe
    record_collinear = pd.DataFrame(columns = ['corr_feature1', 'corr_feature2', 'corr_value'])
    #遍历阈值判断出的每一列名
    for column in to_drop:
        #再次进行阈值判断得到列名和相关系数
        corr_features = list(upper.index[upper[column].abs() > correlation_threshold])
        corr_values = list(upper[column][upper[column].abs() > correlation_threshold])
        drop_features = [column for _ in range(len(corr_features))]    
        #存入dataframe
        temp_df = pd.DataFrame.from_dict({'corr_feature1': drop_features,
                                         'corr_feature2': corr_features,
                                         'corr_value': corr_values})
        #合并到大表格
        record_collinear = record_collinear.append(temp_df, ignore_index = True)
    drops=[]## 下面是删除规则
    #没有dataframe生成说明不需要删除特征
    if record_collinear.shape[0]==0:
        return 'nothing!','nothing!'
    #得到需要删除特征的列名
    for i,j in zip(record_collinear.corr_feature1.values.tolist(),record_collinear.corr_feature2.values.tolist()):
        if X[i].nunique()>X[j].nunique():
            drops.append(j)
        else:
            drops.append(i)
    drops=list(set(drops))
    return record_collinear,drops

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值