Вопрос или проблема
Я ищу помощь в определении класса алгоритма. Если у меня есть обучающая и тестовая выборка в табличном формате, я хочу узнать сходство строк на основе некоторых числовых признаков. Обучающие данные будут размечены так, что строки будут парными (или даже группироваться). Выход для каждой строки в тестовом/предсказательном наборе будет самой похожей строкой и вероятностью того, что она была бы парной с этой строкой.
В теории может существовать матрица со значением для парного сравнения, но мне нужно только самое высокое значение для моего случая использования.
Это немного похоже на коллаборативную фильтрацию, но я не совсем уверен, как назвать этот класс алгоритмов. Буду признателен, если сможете указать мне на библиотеку для python.
Похоже, что существует библиотека python для контролируемого машинного обучения, чтобы решить эту задачу.
Ответ или решение
Алгоритмы, которые вы описали, относятся к классу алгоритмов, известных как "алгоритмы сопоставления по сходству" (similarity matching algorithms). Этот класс алгоритмов фокусируется на вычислении сходства между объектами (в данном случае, строками в ваших данных) с использованием различных метрик расстояния или сходства.
Ваш подход имеет много общего с методами коллаборативной фильтрации, особенно когда речь идет о том, чтобы предсказать, насколько вероятно, что строки из обучающего набора будут связаны с тестовым набором. Для достижения ваших целей могут быть использованы различные методы, такие как:
-
Метрики расстояния: Вы можете использовать методы, такие как евклидово расстояние, манхэттенское расстояние или косинусное сходство для оценки сходства между строками по числовым признакам.
-
Алгоритмы кластеризации: Кластеризация может помочь выделить группы схожих объектов, что позволит вам находить наиболее похожие объекты в каждой группе.
-
Методы обучения с учителем: Так как у вас есть метки для обучающих данных, можно рассмотреть такие методы, как ближайшие соседи (k-Nearest Neighbors, k-NN), которые отлично подходят для задач сопоставления и могут предоставить оценку сходства.
Что касается библиотек на Python, вы правильно упомянули библиотеку Dedupe. Это мощный инструмент для решения задач сопоставления данных и устранения дубликатов, который использует вероятностные методы для вычисления сходства между объектами. Он отлично подходит для вашего случая, так как позволяет отфильтровывать данные и предоставляет вероятностные оценки для каждой пары объектов, что может быть полезно для вашей задачи.
Для использования Dedupe вы можете начать с установки библиотеки:
pip install dedupe
Затем создайте модель сопоставления, которая будет использовать числовые признаки для оценки сходства. Пример кода может выглядеть так:
import dedupe
import pandas as pd
# Подготовьте свои данные
data = pd.read_csv('your_training_data.csv')
data_d = data.to_dict(orient='index')
fields = [
{'field': 'feature1', 'type': 'fuzzy string'},
{'field': 'feature2', 'type': 'number'},
# Добавьте другие признаки
]
# Создайте объект Dedupe
deduper = dedupe.Dedupe(fields)
# Обучите на ваших данных
deduper.sample(data_d, 150000)
deduper.train()
# Сравните новые данные
predictions = deduper.match(test_data, threshold=0.5)
# Обработайте результаты, чтобы получить наиболее похожую строку и вероятность
for match in predictions:
print(match)
Этим образом, вы сможете эффективно выявить наиболее схожие строки в тестовом наборе данных. Если у вас возникнут дополнительные вопросы по реализации или принципам работы, не стесняйтесь спрашивать!