先声明一下,Python是有第三方ReliefF包的,安装方式直接在pycharm终端输入:
pip install ReliefF -i https://pypi.tuna.tsinghua.edu.cn/simple
导入方式:
from ReliefF import ReliefF
但是,这个包有一些问题。
首先,只针对单标签且数据类型是离散类型的数据集
第二,没有对标签下的每个类别进行计算;
第三,它的选取样本的策略是循环全部样本,没有进行随机选取。
所以,在这个第三方包的基础上,我对它进行了一点改进。
1、适用于多标签数据集
2、适用于连续型数据集
3、类中增加了随机样本的选取数量的参数
下面是改进的代码:
# -*- coding: utf-8 -*-
from __future__ import print_function
import numpy as np
import random
from sklearn.neighbors import KDTree
class MultiReliefF(object):
def __init__(self, n_neighbors=10, n_features_to_keep=10, n_selected=10):
"""
初始化实例化对象
:param n_neighbors: 最近邻个数
:param n_features_to_keep: 选取特征相关统计量最大的数量
"""
self.feature_scores = None
self.top_features = None
self.tree = None
self.n_neighbors = n_neighbors
self.n_features_to_keep = n_features_to_keep
self.n_selected = n_selected
def fit(self, X