Relief特征选择与matlab实现

特征选择是一个重要的数据预处理过程
(1)首先数据属性过多容易造成维度灾难,造成学习过程困难。
(2)去除不相关特征,只留下关键因素,则真相更容易看清。
特征选择的目的就是在样本的众多特征中选出有助于样本分类的属性。那么那些属性有助于样本分类呢?我们将对样本的每一个属性进行重要性评价。
Relief 借用了“假设间隔”(hypothesis margin hypothesis marginhypothesis\ margin)的思想,我们知道在分类问题中,常常会采用决策面的思想来进行分类,“假设间隔”就是指在保持样本分类不变的情况下,决策面能够移动的最大距离,可以表示为:
在这里插入图片描述
直观上,一个属性属性有助于分类,则样本在该属性上与同类的距离近,与异类的距离远。根据公式1的启发我们得到公式2
在这里插入图片描述
附上matlab程序

function [w]=Relief(data,label,class,k)
%data数据
%label数据标签
%class数据类别个数
%k近邻个数

%w属性的重要程度
[m,n]=size(data);
for j=1:n

for i=1:class
Di_index=find(label==i);
Dni_index=find(label~=i);
Di=data(Di_index,j);
Dni=data(Dni_index,j);
nr=sort(pdist2(Di,Di)')';%猜对近邻
nm=sort(pdist2(Di,Dni)')';%猜错近邻
%pl=length(Dni)/m;
pl=1;
part1=sum(nr(:,2:k+1).^2/k,2);
part2=pl.*sum(nm(:,1:k).^2/k,2);
w(1,j)=sum(part2-part1);
end
end

%以iris数据集跑一下

clear;clc;
data=load("Iris.txt");%加载数据
label=ones(50,1)*[1:3];
label=label(:);
class=3;
%对样本在各属性上进行归一化
data = mapminmax(data', 0, 1)';
k=10;%近邻个数
w=zeros(1,class);

w=Relief(data,label,class,k);


for i=1:4

a12=[data(1:50,i),ones(50,1)];
a22=[data(51:100,i),2*ones(50,1)];
a32=[data(101:150,i),3*ones(50,1)];
figure
plot(a12(:,1),a12(:,2),'r*');
hold on
plot(a22(:,1),a22(:,2),'go');
hold on
plot(a32(:,1),a32(:,2),'bs');
title(['属性为' num2str(i)]);
end

实验结果为:
在这里插入图片描述
我们看到第3,4维属性有利于分类,第二维属性不利于分类,结果是不是呢?
附上每一维度的数据分布
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们可以看到利用属性3,4确实可以对样本有很好的区分。

ps:这里的距离采用的是欧式距离,采用不同距离,可以对不同结构的数据进行划分。

  • 8
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
Relief特征选择是一种常见的特征选择方法,可以用来减少特征维度并提高分类器的性能。Matlab中可以利用ReliefF算法实现Relief特征选择。具体的代码实现如下: 1. 加载数据集 首先需要读取数据集,可以使用Matlab自带的csvread函数读取csv格式的数据集,也可以使用load函数读取.mat格式的数据集。 2. 设定参数 ReliefF算法有两个参数需要设定,分别是k和t。其中k表示从每个样本中选取的最近邻个数,t表示ReliefF算法迭代的次数。可以根据实际情况来设置这两个参数。 3. 实现ReliefF算法 接下来需要实现ReliefF算法。算法的具体步骤如下: - 对于每个特征,计算它对应的权重值。初始化所有权重为0。 - 随机选择一个样本作为当前的样本。 - 计算当前样本和所有其他样本之间的距离,并找到与当前样本最近的k个样本和最远的k个样本。 - 对于每个特征,计算当前样本和最近k个样本之间该特征值的差异d1和当前样本和最远k个样本之间该特征值的差异d2。 - 根据公式w(f) = w(f) - d1(f) + d2(f)来更新每个特征的权重值。 - 重复步骤2到5,直到迭代次数达到t。 4. 选择最优特征 ReliefF算法迭代结束后,可以根据每个特征的权重值来选择最优特征。根据设定的阈值选择权重值最大的前n个特征作为最优特征。 5. 输出结果 最后输出选择的最优特征以及它们的编号或名称,以供后续分类器训练使用。 综上所述,以上就是利用Matlab实现Relief特征选择的流程以及具体的代码实现
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值