У меня есть два файла CSV - поезд и тест, с 18000 обзоров каждый. Мне нужно использовать файл поезда, чтобы выполнить извлечение функции и вычислить метрику подобия между каждым просмотром в файле поезда и каждым просмотром в тестовом файле.Как вычислить подобие косинуса от TfidfVectorizer?
Я создал словарь, основанный на словах из поезда и набора тестов - я удалил стоп-слова, но не удалял опечатки и стебель.
Проблема, с которой я столкнулся, - я не знаю, как использовать вывод TfIdfVectorizer для генерации косинусных сходств между данными поезда и теста.
Это фрагмент кода, который соответствует моим данным поезд к vocabulary
:
vect = TfidfVectorizer(sublinear_tf=True, min_df=0.5, vocabulary=vocabulary)
X = vect.fit_transform(train_list)
vocab = vect.get_feature_names()
# train_matrix = X.todense()
train_idf = vect.idf_
print vocab
print X.todense()
Выход я получаю от X.todense() является
[[ 0. 0. 0. ..., 0. 0. 0.]
[ 0. 0. 0. ..., 0. 0. 0.]
[ 0. 0. 0. ..., 0. 0. 0.]
...,
[ 0. 0. 0. ..., 0. 0. 0.]
[ 0. 0. 0. ..., 0. 0. 0.]
[ 0. 0. 0. ..., 0. 0. 0.]]
Если я просто напечатать X, это выглядит как это:
(0, 28137) 0.114440020953
(0, 27547) 0.238913278498
(0, 26519) 0.14777362826
(0, 26297) 0.247716207254
(0, 26118) 0.178776605168
(0, 26032) 0.15139993147
(0, 25771) 0.10334152493
(0, 25559) 0.157584788446
(0, 25542) 0.0909693864147
(0, 25538) 0.179738937276
(0, 21762) 0.112899547719
(0, 21471) 0.159940534946
(0, 21001) 0.0931693893501
(0, 13960) 0.134069984961
(0, 12535) 0.198190713402
(0, 11918) 0.142570540903
: :
(18505, 18173) 0.237810781785
(18505, 17418) 0.233931974117
(18505, 17412) 0.129587180209
(18505, 17017) 0.130917070234
(18505, 17014) 0.137794139419
(18505, 15943) 0.130040669343
(18505, 15837) 0.0790013472346
(18505, 11865) 0.158061557865
(18505, 10896) 0.0708161593204
(18505, 10698) 0.0846731116968
(18505, 10516) 0.116681527108
(18505, 8668) 0.122364898181
(18505, 7956) 0.174450779875
(18505, 1111) 0.191477939381
(18505, 73) 0.257945257626
Я не знаю, как читать вывод X.todense() или печать X и я не знаете, как найти расстояние косинуса между тестами и наборами поездов (возможно, используя попарное сходство? ? - http://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.pairwise_distances.html)
Edit:
я повторил те же самые шаги для моих тестовых данных. Теперь у меня есть две разреженные матрицы X и Y типа scipy.sparse.csr.csr_matrix
- но так как они оба разреженные и типа (doc, term) tf-idf
Я не могу напрямую получить сходство косинусов между X и Y прямым умножением.
Преобразование X и Y с todense()
дает мне MemoryError - это означает, что он неэффективен.
Что мне делать дальше?
Мне нужно получить какую-то матрицу с парными косинусовыми сходствами размеров 18000 * 18000 или разреженной матрицей, но я не знаю, как это сделать.
Это для домашней работы, и никакая сумма чтения документации sklearn не помогает мне на этом этапе.
Благодарим за подсказку. Я думаю, что я почти закончен - кроме парных_данных требуется большая обработка, и моя система не может справиться с этим. – boltthrower
parwise_distances (X, Y) дает мне MemoryError. 'Файл '/home/bt/amzreview/local/lib/python2.7/site-packages/scipy/sparse/base.py", строка 1009, в _process_toarray_args return np.zeros (self.shape, dtype = self. dtype, order = order) ' – boltthrower