一、算法

Relief算法最早由Kira提出. 基本内容:从训练集D中随机选择一个样本R, 然后从和R同类的样本中寻找k最近邻样本H,从和R不同类的样本中寻找k最近邻样本M, 最后按照公式更新特征权重.

算法:

1.置0所有特征权重

2.For i=1 to m do

2.1 随机选择一个样本

2.2 从同类中找到R的k最近邻样本H,从不同类中找到R的k最近邻样本M.

2.3 for i=1 to N do

2.4 对W进行排序

二、Matlab实现

主函数Main.m

%主函数
function main
clear;clc;
load A:\Data\data.txt%加载数据
D=data(:,2:size(data,2));%排除编号的一列
m=80; %抽样次数
k=8; %k近邻
N=20; %运行次数
for i=1:NW(i,:)=RelifF(D,m,k);
end
for i=1:N %将每次计算的权重进行绘图plot(1:size(W,2),W(i,:));%size(A,1)获取A矩阵行数,size(A,2)获取A矩阵列数hold on
end
for i=1:size(W,2) %计算N次中,每个属性的平均值result(1,i)=sum(W(:,i))/size(W,1);
end
xlabel('属性编号');
ylabel('特征权重');
title('ReliefF算法计算特征权重')
axis([1 10 0 0.3])
%-----绘制每一种属性变化趋势-----------%
name=char('块厚度','细胞大小均匀性','细胞形态均匀性','边缘粘附力','单上皮细胞尺寸','裸核','Bland染色质','正常核仁','核分裂');
name=cellstr(name);%cellstr(name)将字符串转化为元胞数组
for i=1:size(W,2)figureplot(1:size(W,1),W(:,i))xlabel('计算次数');ylabel('特征权重');title([char(name(i)) '(属性' num2str(i) ')的特征权重变化'])%title中[]来连接字符串,num2str(i)将数字i转化为
end

该程序进行N次调用Reliff函数来获取W的行矩阵,该行矩阵是所有特征的权重

接着对得到的N次结果进行绘图

然后把N次结果取平均值作为最终的特征权重结果保存在result中

最后对之前的的统一绘图,变成单一绘图

Reliff.m

%Relief函数实现
%D为输入的训练集合,输入集合去掉身份信息;k为最近邻样本个数
function W=RelifF(D,m,k)
Rows=size(D,1); %样本个数
Cols=size(D,2); %特征个数
%将数据分成两类,加快计算速度
D1=zeros(0,Cols);%第一类,0行 []
D2=zeros(0,Cols);%第二类
for i=1:Rowsif D(i,Cols)==2 %良性D1(size(D1,1)+1,:)=D(i,:);%matlab变量弱类型可以动态修改elseif D(i,Cols)==4 %不是良性D2(size(D2,1)+1,:)=D(i,:);end
end %分好类填入D1和D2中
W=zeros(1,Cols-1);%初始化特征权重,置为0
for  i=1:m %选择循环操作%从D中随机选择一个样本R[R,Dh,Dm]=GetRandSamples(D,D1,D2,k);%更新特征权重for j=1:length(W)W(1,j)=W(1,j)-sum(Dh(:,j))/(k*m)+sum(Dm(:,j))/(k*m);%按照公式这里的sum就是上面公式中从1到k的求和,因为Dh和Dm是k行%sum不仅可以对矩阵求和,还能对矩阵元素满足条件的元素求和,比如sum(D(:,size(D,2)==2)%这样只对D的最后一列是2的累计加1end
end 

该程序首先分了两类D1和D2,然后将D中的对应类复制到D1和D2中

接着依据分好的类去得到样本和特征差Dh,Dm

按照公式进行更新W

GetRandSamples.m

%获取随机R 找出邻近样本
%D:训练集 D1:类别1数据集 D2:类别2数据集
%Dh 与R同类相邻样本距离; Dm:与R不同类的相邻样本距离
function [R,Dh,Dm]=GetRandSamples(D,D1,D2,k)
%先随机产生一个随机数,确定选定的样本R
r=ceil(1+(size(D,1)-1)*rand);
R=D(r,:);%将第r行选中赋值给R
d1=zeros(1,0);%置0,d1,d2是与R的距离,0列 []
d2=zeros(1,0);
%D1,D2已经分好类了
for i=1:size(D1,1) %计算R与D1的距离d1(1,i)=norm(R-D1(i,:)); %norm用来求两个向量之间的距离,即求R和D1中每行的距离放入对应d1行中
end
for j=1:size(D2,1) %计算R与D2的距离d2(1,j)=norm(R-D2(j,:));
end
[v1,L1]=sort(d1);%对d1,d2进行排序,这里v1是排行序的结果,L1是现在排好序的位置处的元素原本是在哪个位置上的,即建立了原来和现在元素索引的一种映射
[v2,L2]=sort(d2);
if R(1,size(R,2))==2 %如果样本R=2是良性H=D1(L1(1,2:k+1),:); %L1中是与R最近距离的变化,赋给H,除去自身的,因为第一个是R,不能加入M=D2(L2(1,1:k),:);%
else%之前版本%H=D1(L1(1,1:k),:); %M=D2(L2(1,2:k+1),:);%同上面的if中的H%更改版本, 依据公式,这里H和M分别表示和R的同类与不同类的样本集。由于R的变化,所以这里H和M相比较之前的需要互换下位置M=D1(L1(1,1:k),:); H=D2(L2(1,2:k+1),:);%同上面的if中的H
end
%循环计算2个样本特征之间的特征距离
for i=1:size(H,1)for j=1:size(H,2)Dh(i,j)=abs(H(i,j)-R(1,j))/9; %公式进行求得diff值,因为A连续从1到10Dm(i,j)=abs(M(i,j)-R(1,j))/9;end
end%(R特征-Mk特征)/(max-min)

该程序首先初始化两个距离行向量,保存从R到D1和D2每行的距离.

接着对距离进行归一化(或者称按照公式)得到diff值,用于后面的W更新

三、运行结果

可见第一个和第六个特征影响很大,第九个影响很小.

参考:

https://blog.csdn.net/ferrarild/article/details/18792613

数据来源:

http://archive.ics.uci.edu/ml/

特征选择 ReliefF算法相关推荐

  1. 特征工程 特征选择 reliefF算法

    特征工程 特征选择 reliefF算法 背景 运行效果 背景 由于最近在整理一些特征工程的内容,当整理到特征选择算法的时候有reliefF算法,感觉算法挺常见的,应该在sklearn上能找到,但是找了 ...

  2. Matlab中特征选择reliefF算法使用方法(分类与回归)

    1. ReliefF简介 ReliefF是特征选择的一种算法,在高维特征样本中,选取部分具有代表性的特征,从而降低样本特征维度.它也是relief算法的进阶.Relief算法只能用来做二分类,但其算法 ...

  3. python算法特征_python 3.x实现特征选择ReliefF算法

    代码 !/usr/bin/env python # -*- coding:utf-8 -*- @Time : 2019/10/29 0029 9:12 @Author : tb_youth @File ...

  4. python特征选择relieff图像特征优选_python 3.x实现特征选择ReliefF算法

    #!/usr/bin/env python # -*- coding:utf-8 -*- #@Time : 2019/10/29 0029 9:12 #@Author : tb_youth #@Fil ...

  5. python特征选择relieff图像特征优选_ReliefF与QPSO结合的故障特征选择算法

    [1] Zhang L, Zhang F, Hu Y. A Two-phase Flight Data Feature Selection Method Using both Filter and W ...

  6. 特征选择之Relief算法与Relief-F算法

    特征选择之Relief算法与Relief-F算法 一.背景介绍 二.Relief算法 三.Relief-F算法 参考资料 一.背景介绍 Relief算法是由Kira提出的一种经典的过滤式特征选择算法, ...

  7. python特征选择relieff图像特征优选_基于Relief特征选择算法的研究与应用

    作者姓名导师姓名文献出处论文摘要伴随着当代科学技术的高速发展,人类已经进入了信息爆炸的时代.数据挖掘技术通过从大量数据中揭示出隐含的信息,将海量的高维数据转换为有用的信息和知识.特征选择是数据挖掘中的 ...

  8. 利用ReliefF算法对特征变量做重要性排序,实现特征选择

    利用ReliefF算法对特征变量做重要性排序,实现特征选择. 替换数据即可. 基于relieff算法的分类预测. 通过重要性排序图,选择重要的特征变量,来实现数据降维的目的. matlab语言. ID ...

  9. 特征选择----relief及reliefF算法

    relief算法 Relief算法最早由Kira提出,最初局限于两类数据的分类问题.Relief算法是一种特征权重算法(Feature weighting algorithms),根据各个特征和类别的 ...

最新文章

  1. 基于机器学习的化合物活性预测模型
  2. apache mysql 添加到开机自动启动
  3. 如果测试你的MongoDB应用升级?
  4. 宝塔php的opcache模块未载入,宝塔面板CPU负载过高使用opcache扩展的解决方法
  5. laydate 时间控件去掉秒以及解决在移动端不能滑动的问题
  6. HDU 2152 Fruit (母函数)
  7. python社交网络分析 书籍_使用Python分析社交网络数据电子书.pdf
  8. Android Studio应用Freeline光速编译APK
  9. matlab 角速度,从您的移动设备获取并绘制角速度和方向数据
  10. mysql no database selected_数据库中出现no database selected是什么意思?
  11. Java-ForkJoinPool详解
  12. open judge 1.6.3
  13. Windows GDI 窗口与 Direct3D 屏幕截图
  14. Radware荣获ICSA实验室“卓越信息安全测试奖”
  15. 计算机硬盘清理,电脑磁盘满了怎样清理
  16. iOS 高仿美图定制
  17. 车载调频广播电台移动发射系统应用
  18. NB-IoT的低功耗特性原理解说
  19. 网络安全培训试题及答案
  20. 「镁客·请讲」观界科技刘天成:全景摄录产品一定会在B端爆发

热门文章

  1. 网上一片红色的中国心,我也来跟随潮流,表达对祖国的热爱!
  2. Python3批量转换文本文件编码
  3. 蓝桥杯 ALGO-83 算法训练 阶乘
  4. 计算机网络运用专业,计算机网络专业
  5. mysql创建和修改索引_MySQL索引创建 删除 增加 修改命令
  6. wifi 中间人攻击_揭秘3·15晚会“Wi-Fi中间人攻击”的操作原理
  7. Windows下底层数据包发送实战
  8. 笔记 - 收藏集 - 掘金
  9. spring配置 quartz-config.xml
  10. Reachability的用法 判断用户的网络状态