我目前正在尝试为一组观察自动生成一组模糊规则,其中每个观察包含四个值,其中每个观察将对应于一个状态(一个很好的例子是 Fisher 的虹膜数据)。
在 Matlab 中,我正在创建一个四维规则表,其中单个单元格 (a,b,c,d) 将包含相应的状态。为了减少表格,我遵循了行列相似性检查的Hong 和 Lee方法,但我很难理解如何处理第三维和第四维的行和列。从方法来看,我的理解是每个维度都是单独处理的,如果规则是真的,表格就会被简化。合并规则如下:
- 如果相邻列或行中的所有单元格都相同。
- 如果两个单元格相同,或者相邻
列或行中的任何一个为空,并且两者中至少有一个单元格不为空。- 如果一列或一行中的所有单元格都是空的,并且如果它的两个
相邻列或行中的单元格相同,则合并三个。- 如果一列或一行中的所有单元格都是空的,并且如果它的两个
相邻列或行中的单元格相同或其中一个为空,则合并三个。- 如果一列或一行中的所有单元格都是空的,并且如果
其左侧的列或行中的所有非空单元格具有相同的区域,并且其右侧的列或行中的所有非空单元格具有相同的区域,但与前面提到的区域不同,将这三列合并为两部分。
现在是令人困惑的一点。简单地检查整个行/列是否与相邻的(规则 1)相同似乎很简单:
if (a,:,:,:) == (a+1,:,:,:)
(:,b,:,:) == (:,b+1,:,:)
(:,:,c,:) == (:,:,c+1,:)
(:,:,:,d) == (:,:,:,d+1)
这个对吗?
但是要检查行/列中的元素是否匹配,或者是否为零(规则 2 和 4),我有点迷茫。会不会是这样的:
for a = 1:20
for i = 1:length(b)
if (a+1,i,:,:) == (a,i,:,:)
...
else if (a+1,i,:,:) == 0
...
else if (a,i,:,:) == 0 etc.
对于第三维和第四维:
for c = 1:20
for i = 1:length(a)
if (i,:,c,:) == (i,:,c+1,:)
...
else if (i,:,c+1,:) == 0
...
else if (i,:,c,:) == 0 etc.
for d = 1:20
for i = 1:length(a)
if (i,:,:,d) == (i,:,:,d+1)
...
else if (i,:,:,d+1) == 0
...
else if (i,:,:,d) == 0 etc.
甚至对四维数组的任何帮助都会很有用,因为我对超过三个的想法感到非常困惑!我建议您查看论文以理解我的意思-他们自己使用了 Iris 数据,但仅给出了 2D 表格的示例。