【pandas DataFrame】数据集表格中求特征相关性,并分别输出两特征的重要性

背景

训练集表格:training_data_label.csv(例如下表,省略数据)

ABCDE
0
1
2
3
4
5

特征重要性表格:feature_importance.csv(例如下表,重要性为0的特征就不填入该表)

featureimportance
3C208
1A179
5E3
2B1

用训练数据去跑XGBoost模型,用XGBoost模型自带的特征重要性函数得出特征重要性并输出到表格feature_importance.csv中。
我要去掉一些不重要的特征,以及相关性特别高的两个特征中去掉重要性相对低的特征。

代码

#encoding=utf-8
import pandas
'''读取特征重要性表格,并将数据转化为dataframe格式'''
data_feature_importance = pandas.read_csv('/lujing/feature_importance.csv')  
frame_feature_importance = pandas.DataFrame(data_feature_importance)
# print(frame_feature_importance)

注意:读取表格的路径要换成自己的路径
可以print(frame_feature_importance)康康是否正确读取表格中的东西

importance_feature = []         # 存放特征重要性表格中的特征名
dict_importance_feature = {}    # 存放{特征:重要性}的键值对,例如{name:100}
for row in frame_feature_importance.index:
    if frame_feature_importance.loc[row]['importance'] > 2:
        importance_feature.append(frame_feature_importance.loc[row]['feature'])
        dict_importance_feature[frame_feature_importance.loc[row]['feature']] = frame_feature_importance.loc[row]['importance']

这里for循环按行遍历dataframe,if语句筛选出重要性大于2的特征名
笔记:
pandas中的.loc和.iloc以及.at和.iat的区别:
显示索引:.loc,第一个参数为 index切片,第二个为 columns列名
隐式索引:.iloc(integer_location), 只能传入整数
at定位到某个元素,df.at[index,columns]
.iat类似于iloc使用隐式索引访问某个元素

'''读取训练数据表格,并将其转换为dataframe格式'''
data_training = pandas.read_csv('/lujing/training_data_label.csv')
frame_training = pandas.DataFrame(data_training)
# print(frame1.shape[1])

注意:读取表格的路径要换成自己的路径

df = frame_training[importance_feature]      # 只保留重要性高的特征
# df_drop = df.drop(useless_feature, axis=1)   # 删除某些指定的列,useless_feature是无用的特征的列表
# print(df_drop)

df = pandas.DataFrame(df.corr())    # 求各个特征之间的相关性,得到的表格关于轴对称
# df_drop.to_csv('/lujing/filename1.csv')

.drop()是删除某些列,这里不需要用到
.corr()是求dataframe中列之间的相关性,得到的数据输出到filename1.csv表格中(例如下表,不是真实的数据,只作为示意)

ACE
A10.20.55
C0.210.04
E0.550.041
row = df._stat_axis.values.tolist()  # 获取dataframe的行索引
col = df.columns.values.tolist()    # 获取dataframe的列索引
for i in range(df.shape[0]):
    for j in range(i+1):
        if abs(df.iloc[i,j]) >= 0.5 and df.iloc[i,j] != 1:
            df.iloc[i, j] = bytes(df.iloc[i,j])
            print(row[i] + ' 的重要性: ' + str(dict_importance_feature[row[i]]) + '    ' + col [j] + ' 的重要性: '
                  + str(dict_importance_feature[col[j]]) + '     两者的相关性: '  + df.iloc[i,j])

输出相关性大于0.5的特征对,并分别输出其重要性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值