2

Я хочу, чтобы визуализировать сходство текстовых документов, для которых я использую-х scikit учиться TfidfVectorizer в tfidf = TfidfVectorizer(decode_error='ignore', max_df=3).fit_transform(data)Использование подобия матрицы вместо несходства матрицы для МДС в scikit учиться

, а затем выполняет вычисление косинуса подобия, как cosine_similarity = (tfidf*tfidf.T).toarray()

, который дает подобие, но sklearn.manifold.MDS нуждается в матрице различий. Когда я даю 1-косинус-сходство, диагональные значения, которые должны быть равны нулю, не равны нулю. Они представляют собой небольшое значение, например 1.12e-9 и т. Д. Два вопроса:

1) Как использовать матрицу подобия для MDS или как изменить свою матрицу подобия на матрицу несходства?

2) В MDS есть опция dissimilarity, значения которой могут быть 'precomputed' или 'euclidean'. В чем разница между ними, потому что, когда я даю евклидову, координаты MDS становятся одинаковыми, независимо от того, использую ли я cosine_similarity или 1-cosine_similarity, который выглядит неправильно.

Спасибо!

ответ

1

Я не понимаю вашего косинуса преобразования (как я не вижу косинус/угол не участвует), и я не знаю, функциональность TfidfVectorizer, но я постараюсь ответить на ваши два вопроса:

1) Как правило, (несходство = 1-подобие) -подход действителен для случаев, когда все элементы матрицы находятся между -1 и 1. Предполагая, что матрица расстояний d = cosine_similarity является такой симметричной матрицей расстояний до числовых артефактов, вы можете применить

dissimilarity_clean = 1 - np.triu(d)+np.triu(d).T-np.diag(np.ones(len(d))) 

для исправления артефактов. Такая же операция может потребоваться при использовании numpys corrcoef (X) для создания матрицы несходства, основанной на коэффициентах корреляции Пирсона. Два боковых узла: 1. Для неограниченных мер подобия вы можете придумать эквивалентные подходы. 2. В случае использования для MDS вы можете рассмотреть возможность использования меры, которая ближе к эвклидовому расстоянию (и не ограничена), поскольку это будет более естественным выбором для MDS и приведет к лучшим результатам.

2) Используя опцию «предварительно вычисленный», предполагается, что вы подаете матрицу .fit (X = несходство) - метод MDS с матрицей различий, которую вы предварительно вычислили (ваш сценарий). Использование несходства = 'евклидова' вместо этого будет вычислять евклидовую матрицу расстояний данных, которые вы передаете .fit (X = data).

Надеюсь, это поможет!

Смежные вопросы