1月12日
用模拟数据,25次模拟,MAP法的模式判准率在0.742到0.893之间,有3次连0.76都不到,并不理想。这是为什么呢?
早上走在路上,突然想到:这是Q矩阵问题。在实际工作中,不可能出现属性向量为全0的题目。但在现有模拟中,会产生一些这样的题目,这相当于减少了题目数量,导致判准率降低。所以必须在生成每道题的属性向量之后进行检查,若发现属性向量为全0,立刻重新模拟该题。
在做了这个修改以后,又模拟了30批数据,MAP法的模式判准率都在0.763到0.914之间。有一些改进。
我想在代码里进行控制,若发现某个随机行向量的所有元素全是0,就重新模拟一次。
最初代码如下:
out1=zeros(I,K); %矩阵初值为全零
suiji_0=rand(I,K); % 生成一个随机数矩阵
% 如果随机数矩阵里第i行第k列的元素大于0.5,就把该元素设为1
for i=1:I
for k=1:K
if suiji_0(i,k)> 0.5
out1(i,k)=1;
end
end
kongzhi=sum(out1(i,:)); % 将该行向量的各元素相加,由此看它是否为全零向量
if kongzhi==0
i=i-1; % 如果发现属性向量是全零向量,就重新模拟一次
end
end
xlswrite('item_moni.xls',out1,'q_matrix');
可是,运行完程序以后,发现仍然有全零的行向量出现。这个是怎么回事啊?
上ilovematlab论坛求助,有人指教:“你对循环变量 i 的修改并不会真正改变循环次数。 ”
然后他给出了改进的代码:
out1=randi([0,1],I,K);
while any(~any(out1,2))
out1=randi([0,1],I,K);
end
高手就是高手,4行代码就搞定了我十几行代码都没解决的问题。佩服!
|