вот такую реализацию нашел https://github.com/typeetfunc/claster_analysis, навскидку должна подойтивообще ничего не нашёл тут.
PS: без использования готовых библиотек и встроенных функций языка программирования, если ответ будет представлен в виде кода.Там должны быть или пара-тройка формул с описанием, или пара-тройка строк кода, кмк.
А можно пример? Ну конечно. Предположим, у нас есть набор данных пациентов. В кластерном анализе они называются признаками. О каждом из пациентов нам известны различные факты: возраст, пульс, кровяное давление, уровень холестерина, и т.д. Это вектор характеристик, представляющий пациента.
[значение признака 1, значение признака 2, ...., значение признака N]
При том, что "вес" каждого слова до кластеризации должен быть уникальным.
Как именно можно создать 3 кластера похожих по написанию слов из следующего ниже списка слов:
ком, лом, ром, сом
сок, сом, сор
и возможно соль
лось
сом
, которая равноудалена от слов как первой так и второй групп, к какой группе его отнести? к первой, второй, а может сразу к обоим группам? Математически оно одинаково близко к обоим группам.function detSimilarity(w1, w2) {
const len = Math.max(w1.length, w2.length);
let summ = 0;
for (let i1 in w1) {
c1 = w1[i1];
let d = len;
for (let i2 in w2) {
c2 = w2[i2];
if (c1 == c2) {
const t = Math.abs(i1 - i2);
if (t < d) d = t;
}
}
summ += len - d;
}
return summ / Math.pow(len, 2);
}
... было сказано, что вес совпадения букв в начале слова выше чем в конце?только это:
При том, что "вес" каждого слова до кластеризации должен быть уникальным.
06 | 03 | 01
-------------
03 | 05 | 02
-------------
01 | 02 | 04
сом
однозначно отойдет ко второй группеdetSimilarity(w1, w2) != detSimilarity(w2, w1)
НО какие логические основания для этого могут быть?чтобы это понять, нужно в столбик вывести ВСЕ "веса" слов и убедиться, что они ВСЕ уникальны. А потом - делать выводы по тому, насколько корректны их расстояния между собой.
Но это уже по сути будет подтасовка/жульничество.Не будет: просто я банально не пройду тест с такими приколами!)) Не зря же они просят не юзать встроенные функции и описывать всё алгоритмически.
Создать матрицу 33х33 в которой будут коэффициенты похожести написания самих букв между собой.не думаю, что прям нужно именно начертание букв смотреть... Хотя, и это тоже может быть вариантом решения.
Кластеризация (обучение без учителя) отличается от классификации (обучения с учителем) тем, что метки объектов из обучающей выборки yi изначально не заданы, и даже может быть неизвестно само множество Y
.
Решение задачи кластеризации объективно неоднозначно по ряду причин:
Не существует однозначного критерия качества кластеризации. Известен ряд алгоритмов, осуществляющих разумную кластеризацию "по построению", однако все они могут давать разные результаты. Следовательно, для определения качества кластеризации и оценки выделенных кластеров необходим эксперт предметной области;
Число кластеров, как правило, заранее не известно и выбирается по субъективным критериям. Даже если алгоритм не требует изначального знания о числе классов, конкретные реализации зачастую требуют указать этот параметр[1];
Результат кластеризации существенно зависит от метрики. Однако существует ряд рекомендаций по выбору метрик для определенных классов задач.[2].
Как сделать так, чтобы все слова имели уникальные "веса" до кластеризации
хоть и небольшаяне совсем. Это будет полуквадратичная: xy/2. А это довольно большое кол-во коллизий...
aa
будет представленно как 1*34+1
, слово бa
как 2*34+1
, слово aб
как 1*34+2
. По сути тот же вектор, только запакованный, но так как это обычное число - то оно же и вес. Притом вес уникальный для каждого уникального слова. Расстояние можно считать как между векторами, так и простой арифметикой между весами. Признаками соответственно будут разницы между условных "едениц", "десятков", "сотен" и т.д.