В настоящее время я пытаюсь автоматически создать набор нечетких правил для набора наблюдений, которые содержат четыре значения для каждого наблюдения, где каждое наблюдение будет соответствовать состоянию (хороший пример - данные Ириса Фишера).
В Matlab я создаю таблицу четырехмерных правил, в которой одна ячейка (a, b, c, d) будет содержать соответствующее состояние. Чтобы уменьшить таблицу, я следую методу Хун и Ли проверки сходства строк и столбцов, но мне трудно понять, как обращаться к строкам и столбцам третьего и четвертого измерений. Из этого метода я понимаю, что каждое измерение рассматривается индивидуально, и если правило верно, таблица упрощается. Правила объединения следующие:
- Если все ячейки в соседних столбцах или строках совпадают.
- Если две ячейки одинаковы или одна из них пуста в соседней
столбцы или строки и хотя бы одна ячейка
в обоих не пусто.
- Если все ячейки в столбце или строке пусты и если ячейки в его двух
соседние столбцы или строки одинаковы,
объединить три.
- Если все ячейки в столбце или строке пусты и если ячейки в его двух
соседние столбцы или строки одинаковы
или любой из них пуст, объединить
три.
- Если все ячейки в столбце или строке пусты и если все непустые
ячейки в столбце или строке слева
имеют один и тот же регион, и все
непустые ячейки в столбце или строке
справа от этого же региона,
но отличается от ранее
упомянутый регион, объединить эти три
колонны на две части.
Теперь немного запутанно. Просто проверить, совпадает ли вся строка / столбец со смежными (правило 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-таблицей.