特征选择--相关性和p-value

参考博客

导入必要的库

 import numpy as np
 import pandas as pd
 import seaborn as sns
 import matplotlib.pyplot as plt

导入数据

 data = pd.read_csv('./*.csv')

 

基于相关性进行特征选择

 # 获取相关系数矩阵
 corr = data.corr()
 corr.head()
 # 绘制相关系数热力图
 sns.heatmap(corr)
 def select_corr(data, threshold):
     """
     两种特征之间的相关系数很高,则表明特征冗余,可去除其中一种特征
     data:       特征数据
     threshold:  相关系数阈值,高于该阈值的去除其中一种特征
     
     return      删减后的特征
     """
     columns = np.full((corr.shape[0],), True, dtype=bool)
     for i in range(corr.shape[0]):
         for j in range(i+1, corr.shape[0]):
             if corr.iloc[i,j] >= threshold:
                 if columns[j]:
                     columns[j] = False
     selected_columns = data.columns[columns]
     return data[selected_columns]

基于P-value的特征选择

 import statsmodels.api as sm
 def backwardElimination(x, Y, sl, columns):
     """
     逐渐删去p值最大的列
     x:        特征数据
     Y:        标签
     sl:       阈值
     columns: 列名称数组
     """
     numVars = len(x[0]) # number of features
     for i in range(0, numVars):
         regressor_OLS = sm.OLS(Y, x).fit()
         maxVar = max(regressor_OLS.pvalues).astype(float)  # 获取最大P值
         if maxVar > sl:
             for j in range(0, numVars - i):
                 if (regressor_OLS.pvalues[j].astype(float) == maxVar):
                     x = np.delete(x, j, 1)  # 删除第j列
                     columns = np.delete(columns, j)
                     
     print(regressor_OLS.summary())  # 打印报告
     return x, columns
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值