粗糙集约简 程序 matlab,粗糙集属性约简matlab程序
时间: 2023-09-17 14:07:56 浏览: 64
粗糙集属性约简matlab程序.rar
粗糙集约简程序matlab:
```matlab
function [reduct] = roughSetReduction(data,labels)
% data: 数据集,每行为一个样本,每列为一个属性
% labels: 标签,1为正例,0为负例
% reduct: 返回的约简结果,为属性序号的集合
[n,m] = size(data);
% 正例集、反例集和决策属性
P = find(labels==1);
N = find(labels==0);
D = [P,N];
% 初始化可信域
U = 1:m;
% 判断可信域是否改变
change = true;
while change
change = false;
% 遍历可信域内的属性
for i = U
% 如果该属性已被约简,则跳过
if ~ismember(i,U)
continue
end
% 计算去掉该属性后的决策表
data_without_i = data(:,[1:i-1,i+1:end]);
% 判断去掉该属性后是否能分辨正例和反例
P_without_i = intersect(P,find(sum(data_without_i,2)==m-1));
N_without_i = intersect(N,find(sum(data_without_i,2)<m-1));
if isempty(P_without_i) || isempty(N_without_i)
% 如果不能分辨,则将该属性从可信域中删除
U(U==i) = [];
change = true;
end
end
end
reduct = U;
```
粗糙集属性约简matlab程序:
```matlab
function [reduct] = roughSetAttributeReduction(data,labels)
% data: 数据集,每行为一个样本,每列为一个属性
% labels: 标签,1为正例,0为负例
% reduct: 返回的约简结果,为属性序号的集合
[n,m] = size(data);
% 正例集、反例集和决策属性
P = find(labels==1);
N = find(labels==0);
D = [P,N];
% 初始化可信域
U = 1:m;
% 初始化属性重要度
imp = zeros(1,m);
% 计算属性重要度
for i = 1:m
% 计算去掉该属性后的决策表
data_without_i = data(:,[1:i-1,i+1:end]);
% 判断去掉该属性后是否能分辨正例和反例
P_without_i = intersect(P,find(sum(data_without_i,2)==m-1));
N_without_i = intersect(N,find(sum(data_without_i,2)<m-1));
% 计算属性重要度
imp(i) = length(P_without_i)*length(N_without_i);
end
% 按照重要度排序
[~,idx] = sort(imp,'descend');
% 依次判断属性是否可以被约简
for i = idx
% 如果该属性已被约简,则跳过
if ~ismember(i,U)
continue
end
% 计算去掉该属性后的决策表
data_without_i = data(:,[1:i-1,i+1:end]);
% 判断去掉该属性后是否能分辨正例和反例
P_without_i = intersect(P,find(sum(data_without_i,2)==m-1));
N_without_i = intersect(N,find(sum(data_without_i,2)<m-1));
if isempty(P_without_i) || isempty(N_without_i)
% 如果不能分辨,则将该属性从可信域中删除
U(U==i) = [];
end
end
reduct = U;
```
以上是两个简单的粗糙集约简相关的matlab程序,仅供参考。
阅读全文