Кластерный анализ в действии
Здесь мы изучаем и реализуем различные алгоритмы кластерного анализа и проверяем их эффективность
Исследуемые алгоритмы
[править]- K-средних
- Нейронная сеть Кохонена (Сети векторного квантования)
Теория
[править]Расчеты по методу K-средних
[править]- выбрать число кластеров N
- выбрать исходные центры кластеров
- Пересчитать центры кластеров
- Для каждого кластера выполнить:
for (i=0; i< dimensions; i++)
{
centroid[i] += point[i];
pointsInCluster++;
}
for (i=0; i< dimensions; i++)
{
centroid[i] /= pointsInCluster;
}
Обучение слоя Кохонена
[править]Обучения нейрона Кохонена выполняется итерационно, согласно уравнению:
- ,
где – новое значение веса, соединяющего входную компоненту х с выигравшим нейроном; – предыдущее значение этого веса; k – коэффициент скорости обучения, который может варьироваться в процессе обучения.
Выбор начальных значений весовых векторов
[править]Одно из решений, известное под названием метода выпуклой комбинации, состоит в том, что все веса приравниваются одной и той же величине:
- ,
где – число входов (число компонент каждого весового вектора).
Но тогда каждая компонента входа x корректируется:
В начале обучения мало, вследствие чего все входные векторы имеют длину, близкую к , и почти совпадают с векторами весов. В процессе обучения сети постепенно возрастает, приближаясь к единице.
Метод выпуклой комбинации хорошо работает, но несколько замедляет процесс обучения, так как весовые векторы подстраиваются к изменяющейся цели. Но зато, в отличие от метода K-средних, нет необходимости устанавливать центры произвольным образом, и они образуется плавно в зависимости от распределения значений компонентов в обучающей выборке.
Практика
[править]Задание №1
[править]- Есть готовый численный пример
- Нужно перевести и оформить в Викиверситете
Задание №2
[править]- Есть готовая реализация кластеризации алгоритмом k-means на C++
- Нужно переписать код на C#, разобравшись в алгоритме