pandas[python]实现fisher score,衡量特征用于分类的重要性,可用于特征选择

import pandas as pd
import numpy as np


data = pd.read_csv('data/data1to21.csv', header=None)

data[52] = data[52].astype(int).data

# # 计算fisher得分
items = list(range(52))

num_classes = len(set(data[52]))

fisher_score = []

grouped = data.groupby([52], as_index=False)

n = [len(data[data[52] == k+1]) for k in range(num_classes)]

for i in items:  # 遍历所有特征列
    temp = grouped[i].agg({str(i)+'_mean': 'mean',
                           str(i)+'_std': 'std'})     # 已求出特征i在各类别k中的均值u_ik、方差p_ik

    numerator = 0
    denominator = 0

    u_i = data[i].mean()

    for k in range(num_classes):
        n_k = n[k]
        u_ik = temp.iloc[k, :][str(i)+'_mean']
        p_ik = temp.iloc[k, :][str(i)+'_std']

        numerator += n_k*(u_ik-u_i)**2
        denominator += n_k*p_ik**2

    fisher_score.append(numerator/denominator)

pd.DataFrame(fisher_score).to_csv('fisher_score.csv', index=False, header=None)

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值