Python实现ReliefF |
您所在的位置:网站首页 › reliefF算法python › Python实现ReliefF |
本博客代码基于如下文章算法思想实现: Y.P. Cai, M. Yang, Y. Gao, H.J. Yin, ReliefF-based multi-label feature selection, International Journal of Database Theory and Application. 8 (4) (2015) 307–318.该算法是基于非转化的多标记ReliefF特征选择算法,与传统多标记ReliefF算法的区别在于没有从标记转化的角度去实现特征权值计算,避免了转化损失。 具体思想在于使用标记相似性将样本进行分类,可以得出样本的各个类别下样本索引,再根据相似性选择最具相似性的k个样本用来计算距离,根据距离差值判断特征分类能力强弱。 特征权值迭代公式如下: 如有错误,请及时告知本人,谢谢! """ Author: wzk Date: 2020-11-14 theme: 基于ReliefF的多标记特征选择算法 From: Y.P. Cai, M. Yang, Y. Gao, H.J. Yin, ReliefF-based multi-label feature selection, International Journal of Database Theory and Application. 8 (4) (2015) 307–318. """ import numpy as np from collections import defaultdict class MLReliefF: def __init__(self, train_data, train_target, info): """ self.sn = sample nums self.fn = feature nums self.ln = label nums self.k = the nums of k nearest samples :param train_data: :param train_target: :param info: 用于控制变量信息 """ self.train_data = train_data self.train_target = train_target self.k = info.get('k') # 可以设置自己需要的数字,一般来说或3或5 self.sn = train_data.shape[0] self.fn = train_data.shape[1] self.ln = train_target.shape[1] pass def get_k_nearest_sample(self, random_sample_index): """ 对每个随机样本,找出它的k近邻。由于有同类、异类之分,考虑用字典结构记录k近邻索引 除了找出最近邻,还需要找出随机样本占类别比例 :param random_sample_index: :return: """ nearest_samples_dict = dict() rsi = random_sample_index # 找出随机样本被标记为1的标记索引,相似性计算需要根据这些标记进行 same_label_rsi = [i for i in range(self.ln) if self |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |