2016-09-11 7 views
1

У меня есть два файла 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 не помогает мне на этом этапе.

ответ

1

Вы почти находитесь. Использование vect.fit_transform возвращает разреженное представление document-term matrix. Это матричное представление документа вашего набора. Затем вам нужно будет преобразовать набор тестов с той же моделью. Подсказка: используйте метод transform на test_list. Вам повезло, потому что sklearn.metrics.pairwise.pairwise_distances(X, Y) принимает разреженные матрицы для X и Y, когда передается metric='euclidean' (т. Е. Метрика, которую вы хотите). Это должно быть довольно просто, что вам нужно сделать здесь.

+0

Благодарим за подсказку. Я думаю, что я почти закончен - кроме парных_данных требуется большая обработка, и моя система не может справиться с этим. – boltthrower

+0

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

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

  • Нет связанных вопросов^_^