Извиняюсь, если ответ на этот вопрос очевиден, пожалуйста, будьте добры, это мой первый раз здесь 🙂
Я был бы признателен, если бы кто-нибудь дал мне руководство по подходящей структуре входных данных для k-средних. Я работаю над магистерской диссертацией, в которой я предлагаю новый подход к взвешиванию терминов TF-IDF, специфичный для моей области. Я хочу использовать k-средства для кластеризации результатов, а затем применить ряд внутренних и внешних критериев оценки, чтобы увидеть, имеет ли мой новый метод взвешивания терминов какие-либо достоинства.
Мои шаги до сих пор (реализованы в PHP), все рабочие
Шаг 1: Читать в коллекции документов
Шаг 2: Чистая коллекция документов, извлечение объектов, выбор объектов
Шаг 3: Термин Частота (TF)
Шаг 4. Обратная частота документов (IDF)
Шаг 5: TF * IDF
Шаг 6: Нормализуйте TF-IDF для векторов фиксированной длины
Где я борюсь
Шаг 7: Модель векторного пространства — сходство косинусов
Единственные примеры, которые я могу найти, сравнить входной запрос с каждым документом и найти сходство. Если нет входного запроса (это не информационно-поисковая система), я сравниваю каждый отдельный документ в корпусе с любым другим документом в корпусе (каждая пара документов)? Я не могу найти ни одного примера косинусного сходства, примененного ко всей коллекции документов, а не к одному примеру / запросу по сравнению с коллекцией.
Шаг 8: K-средства
Здесь я пытаюсь понять, должен ли входной вектор для k-средних содержать матрицу оценки косинусного сходства каждого документа в коллекции по сравнению с любым другим документом (матрица косинусного сходства). Или k-средства должны быть применены над векторной моделью термина. Если это последнее, то каждый пример, который я могу найти для k-средних, является достаточно простым и представляет либо единичные термины. Как мне справиться с тем фактом, что в моей коллекции документов есть несколько терминов и т. Д.
Cosine Similarity и K-Means подразумеваются как решение для кластеризации документов на очень многих примерах, поэтому я упускаю что-то очень очевидное.
Если бы кто-нибудь мог дать мне управление, я был бы всегда благодарен.
Спасибо
Claire
K-средних не могу оперировать матрицей подобия.
Потому что K-означает вычисляет точка-имею в виду расстояния, а не попарные расстояния.
Вам нужна реализация сферическое К-среднее если вы хотите использовать косинусное расстояние: на каждой итерации центры должны быть L2 нормализованы.
Если я не ошибаюсь, это должно быть эквивалентно запуску k-средних с косинусным сходством и только нормализации длины центра к единице в конце. Но обычные сферические k-средства могут быть быстрее, потому что вы можете использовать нормализацию данных для упрощения косинусного расстояния до точечного произведения.
Вы можете пересмотреть использование PHP. Это один из худших вариантов для такого типа задач программирования. Это хорошо для интерактивной веб-страницы, но совершенно не подходит для анализа данных.
Второе мнение Анони-Мусса о том, что вам следует пересмотреть PHP, и хотел бы предложить Python, поскольку есть несколько полезных библиотек для решения подобных проблем:
Numpy: отличный и эффективный пакет для научных вычислений.
SciPyНа самом деле есть несколько подпрограмм для кластеризации k-средних: посмотреть здесь
Theano: Для большего количества потребностей машинного обучения, особенно глубокого обучения.
Также есть этот отличный учебник об алгоритме k средних. Он также предоставляет псевдокод в Python. Вы можете использовать это и, возможно, реализацию, сделанную вами, чтобы лучше понять алгоритм, но в конечном итоге я бы воспользовался библиотекой, упомянутой выше, так как она оптимизирована для производительности, что, безусловно, следует учитывать, если у вас большая коллекция документов.
Если это поможет кому-то еще, я обнаружил, что можно с помощью k-средних кластеризовать многомерный вектор-термин, но если включено более 3-х измерений (что будет иметь место для любой коллекции документов), вы не сможете визуализировать это. Я полагаю, что это то, что бросило меня сюда, все примеры, которые я видел в k-means, включали визуализацию графа, это привело меня к неверной оценке, что, возможно, исходные данные для k-средних должны были быть двумерными, такими как 0 и косинус сходства. Благодарю за респондентов за помощь, высоко ценится.
Используйте TF-IDF для расчета сходства косинусов. Используйте косинусное сходство в качестве входных данных для вашего алгоритма кластеризации.
Смотреть на ..
Простой поиск: модель векторного пространства