文章目录
一、算法流程图
二、代码步骤
1.第一步:定义类和init方法
2.第二步:数据处理
3.第三步:通过计算距离,找出猜错近邻和猜对近邻
4.第四步:计算特征权重
5.第五步:根据权重过滤式选取特征
6.第六步:选取最终特征
7.第七步:定义主函数
三、为什么要写relief算法?以及解决什么问题?
算法流程
relief算法流程图.png
第一步:定义类和init方法
方便函数调用参数,只需要一次向类中导入参数即可,不用重复导入参数
class Filter:
def __init__(self, data_df, sample_rate, t, k):
"""
#
:param data_df: 数据框(字段为特征,行为样本)
:param sample_rate: 抽样比例
:param t: 统计量分量阈值
:param k: 选取的特征的个数
"""
self.__data = data_df
self.__feature = data_df.columns
self.__sample_num = int(round(len(data_df) * sample_rate))#round函数:四舍五入
self.__t = t
self.__k = k
第二步:数据处理
将读取到的数据特征值中离散型处理成连续型,比如色泽:青绿,属于离散型,密度:0.679,属于连续型。
def get_data(self):
new_data = pd.DataFrame()#建立一个空二维表
for one in self.__feature[:-1]:#遍历循环每个特征
col = self.__data[one]#读取全部样本中其中一个特征
# 判断读取到的特征是否全为数值类,如果字符串中全为数字 ,则不作改变写进新的二维表new_data里面,否则处理成数值类型写进二维表
if (str(list(col)[0]).split(".")[0]).isdigit() or str(list(col)[0]).isdigit()\
or (str(list(col)[0]).split('-')[-1]).split(".")[-1].isdigit():#isdigit函数:如果是字符串包含数字返回ture,否则返回false
new_data[one] = self.__data[one]
else:
keys = list(set(list(