特征选择算法之ReliefF算法python实现

本文介绍了ReliefF算法的基本原理和在Python中的实现,该算法用于多分类问题的特征选择。通过计算样本与其同类和不同类近邻的距离,评估特征的重要性。
摘要由CSDN通过智能技术生成
版权声明:本文为博主原创文章,转载时请附上原文链接:https://blog.csdn.net/qq_40871363/article/details/86594578

一、ReliefF算法简介

ReliefF算法是Relief算法的拓展,其适用于处理多分类问题。

(一)原理

假设数据集D中的样本分属于N个类别,对于样本xi,若它属于第n类,则ReliefF算法首先在同类即第n类的样本中寻找xi的k个最近邻样本作为猜中近邻;然后在第n类之外的每个类中均找到xi的k个最近邻样本作为猜错近邻,其相关统计量对应于属性j的分量则为:

(二)伪算法

待补充

二、ReliefF算法python实现

(一)代码

代码片

// An highlighted block
# _*_ coding:utf8 _*_

"""
# 说明:特征选择方法一:过滤式特征选择(ReliefF算法)
# 思想:先用特征选择过程对初始特征进行"过滤",然后再用过滤后的特征训练模型
# 时间:2019-1-16
# 问题:
"""

import pandas as pd
import numpy as np
import numpy.linalg as la
import random


# 异常类
class ReliefError:
    pass


class Relief:
    def __init__(self, data_df, sample_rate, t, k):
        """
        #
        :param data_df: 数据框(字段为特征,行为样本)
        :param sample_rate: 抽样比例
        :param t: 统计量分量阈值
        :param k: k近邻的个数
        """
        self.__data = data_df
        self.__feature = data_df.columns
        self.__sample_num = int(round(len(data_df) * sample_rate))
        self.__t = t
        self.__k = k

    # 数据处理(将离散型数据处理成连续型数据,比如字符到数值)
    def get_data(self):
        new_data = pd.DataFrame()
        for one in self.__feature[:-1]:
            col = self.__data[one]
            if (str(list(col)[0]).split(".")[0]).isdigit() or str(list(col)[0]).isdigit() or (str(list(col)[0]).split('-')[-1]).split(".")[-1].isdigit():
                new_data[one] = self.__data[one]
                # print '%s 是数值型' % one
            else:
                # print '%s 是离散型' % one
                keys = list(set(list(col)))
                values = list(xrange(len(keys)))
                new = dict(zip(keys, values))
                new_data[one] = self.__data[one
评论 51
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值