特征选择算法----Relief算法
特征选择算法分为:
(1)封装式算法:遗传算法,适用于处理大规模的数据,具有全局搜索能力强且不易陷入局部最优解。
(2)嵌入式算法:需要嵌入机器学习算法,往往降维效果比较好,使用于高纬度,数据量大的特征集
(3)过滤式特征选择算法:独立于机器学习算法,算法往往耗时短,效率高
relief算法原理
原理:
根据信号特征于分类标签的相关性,给特征向量赋予权值,并根据权值筛选出对分类效果影响较大的特征子集。
具体算法实现:随机在样本集中选择一个样本作为sample样本,在和sample相同类中选择最近的样本nearHit,在于样本sample不同类中选择最近的样本nearMiss(距离通常默认使用偶=欧式距离,当然也可以使用曼哈顿等距离),如果样本sample在特征上与nearHit的距离小于(或大于)与nearMiss的距离,表明该特征对信号的分类效果有益(或引起了负面作用)则增加(或减小)该特征的权值W
Wi=Wi-1-(samplei-nearHiti)^2
+(samplei-nearMissi)^2
缺点:(1)当样本数据量较小时,其基于统计相关性的计算过程容易收到噪声信号的影响,得到的特征权值会有误差。
(2)没有充分考虑特征之间的联系,因此选择的特征集合存在冗余
代码实现(python3.7)
import pandas as pd
import numpy as np
import numpy.linalg as la
import random
# 异常类
class FilterError:
pass
class Filter:
def __init__(self, data_df, sample_rate, t, k):
"""
#
:param data_df: 数据框(字段为特征,行为样本)
:param sample_rate: 抽样比例
:p