ML | Нечеткая кластеризация

Опубликовано: 23 Июля, 2021

Предварительное условие: кластеризация в машинном обучении

Что такое кластеризация?
Кластеризация - это метод машинного обучения без учителя, который разделяет данные на разные кластеры в зависимости от их удаленности (сходства) друг от друга.

Алгоритм неконтролируемой кластеризации k-средних дает значения любой точки, лежащей в некотором конкретном кластере, равными 0 или 1, то есть истинным или ложным. Но нечеткая логика дает нечеткие значения любой конкретной точки данных, лежащих в любом из кластеров. Здесь, в нечеткой кластеризации c-средних, мы находим центроид точек данных, а затем вычисляем расстояние каждой точки данных от заданных центроидов до тех пор, пока сформированные кластеры не станут постоянными.

Предположим, что заданными точками данных являются {(1, 3), (2, 5), (6, 8), (7, 9)}

Шаги для выполнения алгоритма:

Шаг 1. Произвольно инициализируйте точки данных в желаемое количество кластеров.
Предположим, есть 2 кластера, в которых данные должны быть разделены, случайным образом инициализируя точку данных. Каждая точка данных находится в обоих кластерах с некоторым значением принадлежности, которое может быть принято любым в начальном состоянии.

В таблице ниже представлены значения точек данных вместе с их членством (гамма) в каждом кластере.

Кластер (1, 3) (2, 5) (4, 8) (7, 9)
1) 0,8 0,7 0,2 0,1
2) 0,2 0,3 0,8 0,9

Шаг 2: Найдите центроид.
Формула для определения центроида (V):


Где µ - нечеткое значение принадлежности точки данных, m - параметр нечеткости (обычно принимаемый равным 2), а xk - точка данных.
Здесь,

V11 = (0,82 * 1 + 0,72 * 2 + 0,22 * 4 + 0,12 * 7) / ((0,82 + 0,72 + 0,22 + 0,12) = 1,568
V12 = (0,82 * 3 + 0,72 * 5 + 0,22 * 8 + 0,12 * 9) / ((0,82 + 0,72 + 0,22 + 0,12) = 4,051
V11 = (0,22 * 1 + 0,32 * 2 + 0,82 * 4 + 0,92 * 7) / ((0,22 + 0,32 + 0,82 + 0,92) = 5,35
V11 = (0,22 * 3 + 0,32 * 5 + 0,82 * 8 + 0,92 * 9) / ((0,22 + 0,32 + 0,82 + 0,92) = 8,215

Центроиды: (1.568, 4.051) и (5.35, 8.215)

Шаг 3: Определите расстояние каждой точки от центроида.

D11 = ((1 - 1,568) 2 + (3 - 4,051) 2 ) 0,5 = 1,2
D12 = ((1 - 5,35) 2 + (3 - 8,215) 2 ) 0,5 = 6,79

Точно так же расстояние до всех других точек вычисляется от обоих центроидов.

Шаг 4: Обновление значений членства.



Для пункта 1 новые значения членства:


= [{[(1.2) 2 / (1.2) 2 ] + [(1.2) 2 / (6.79) 2 ]} ^ {(1 / (2 - 1))}] -1 = 0,96


= [{[(6,79) 2 / (6,79) 2 ] + [(6,79) 2 / (1,2) 2 ]} ^ {(1 / (2 - 1))}] -1 = 0,04

В качестве альтернативы,

Точно так же вычислите все остальные значения членства и обновите матрицу.

Шаг 5: Повторяйте шаги (2-4) до тех пор, пока не будут получены постоянные значения для значений принадлежности или разница не станет меньше значения допуска (небольшое значение, до которого допускается разница в значениях двух последовательных обновлений).

Шаг 6: Дефаззифицируйте полученные значения членства.

Реализация: библиотека fuzzy scikit learn имеет предопределенную функцию для нечетких c-средних, которые можно использовать в Python. Для использования нечетких c-средних вам необходимо установить библиотеку skfuzzy.

 pip install sklearn
pip install skfuzzy