索引超出矩阵维度。
出错 reduceEI (line 3)
if any(M(1,:))
出错 EIsum (line 4)
f=reduceEI([[zeros(max(Msize(1),Nsize(1))-Msize(1),Msize(2));M],[zeros(max(Msize(1),Nsize(1))-Nsize(1),Nsize(2));N]]);
出错 ClassDescribe (line 9)
f1=EIsum(f1,f2);
出错 AFS_Iris_classify (line 33)
DescribeClass{k1}=ClassDescribe(XAttribute,ClassLength+1,ClassLength+ClassNum(k1));
clear
clc
TrainData_Mat=xlsread('train1');
TestData_Mat=xlsread('test1');
[TrainSampleNum,TrainAttributeNum]=size(TrainData_Mat);
Parameter_Mat=[0.8 0.5 0.2;
0.8 0.5 0.2;
0.8 0.5 0.2;
0.8 0.5 0.2;
0.8 0.5 0.2;
0.8 0.5 0.2;
0.8 0.5 0.2;
0.8 0.5 0.2;
0.8 0.5 0.2]';
Str_Mat=gen_structure(TrainData_Mat,Parameter_Mat);
Lou_Mat=ones(TrainSampleNum,6*TrainAttributeNum);
Logic_Ind=1;
Threshold_1=0.8;
Threshold_2=0.75;
NumK=1;
Error=0;
[Attribute_2,SimpleConcepts,SimpleMemships]=InitialDescribe(Lou_Mat,Str_Mat,Logic_Ind,Threshold_1,Threshold_2);%%Attribute_ensure
TrainClassLabel=[ones(1,140),2*ones(1,115)];
TestClassLabel=[ones(1,45),2*ones(1,40)];
XAttribute=SelectDescribe1(Attribute_2,TrainClassLabel,NumK,Error,Lou_Mat,Str_Mat,Logic_Ind);
ClassNum=histc(TrainClassLabel,unique(TrainClassLabel));% 计算每一类有多少个样本及类的个数
ClassLength=0;
for k1=1:length(ClassNum)
DescribeClass{k1}=ClassDescribe(XAttribute,ClassLength+1,ClassLength+ClassNum(k1));
ClassLength=ClassLength+ClassNum(k1);
end
for k2=1:length(ClassNum)
TrainMemberships1(k2,:)=degree(Lou_Mat,Str_Mat,DescribeClass{k2},Logic_Ind);%初次约剪后在训练集中的隶属度
end
[TrainCorrectRate1,ClassAccuaryNum1,ClassAccuary1,ComparaMatrix1,ErrorVector1]=ClassifyTestAFS(TrainMemberships1,TrainClassLabel);
[TestSampleNum,TestAttributeNum]=size(TestData_Mat);
TestStr_Mat=gen_structure(TestData_Mat,Parameter_Mat);
TestLou_Mat=ones(TestSampleNum,6*TestAttributeNum);
for k4=1:length(ClassNum)
TestMemberships1(k4,:)=degree(TestLou_Mat,TestStr_Mat,DescribeClass{k4},Logic_Ind);%初次约剪后在测试集中的隶属度
end
[TestCorrectRate1,TestClassAccuaryNum1,TestClassAccuary1,TestComparaMatrix1,TestErrorVector1]=ClassifyTestAFS(TestMemberships1,TestClassLabel);
TrainCorrectRate1
TestCorrectRate1
TestClassAccuaryNum1
function N=reduceEI(M)
if any(M(1,:))
error('the first row of input matrix must be zeros.')
end
M=compactEI(M);
M=tran_bool(M);
Reserve_EI=reduceEI_bool(M);
N=tran_EI_mat(Reserve_EI);
return
function f=EIsum(M,N)
Msize=size(M);
Nsize=size(N);
f=reduceEI([[zeros(max(Msize(1),Nsize(1))-Msize(1),Msize(2));M],[zeros(max(Msize(1),Nsize(1))-Nsize(1),Nsize(2));N]]);
return
function F=ClassDescribe(X_attribute,i,j)
%X_attribute,为一个行向量元胞数组,其中按照同类的描述,分段放置
%属性的矩阵(元胞数组)
%i,j每一类的起始点、终点
f1=X_attribute{i};
if (i<=j)
for Index=i+1:j
f2=X_attribute{Index};
f1=EIsum(f1,f2);
end
else
for Index=i-1:-1:j
f2=X_attribute{Index};
f1=EIsum(f1,f2);
end
end
F=reduceEI(f1);
return;
求大触帮助,查了好多,关于这个“索引超出矩阵维度”到底应该怎么改代码?有时候输入数据量小一些就不会出现超出维度的情况,为什么啊?