scikit Learn Ошибка типа Только целочисленные массивы с одним элементом могут быть преобразованы в индекс

Я получаю следующую ошибку при вызове cosine_similarity

numerator = sum(a*b for a,b in zip(x,y))
TypeError: only integer arrays with one element can be converted to an index

Я пытаюсь получить матрицу совпадения ключевого слова и ключевого слова из матрицы ключевых слов документа, возвращаемой CountVectorizer.

Я чувствую, что cosine_similarity что-то не нравится в типе данных, который я ему передаю, но я не уверен, в чем именно проблема. Здесь n относится к типу scipy.sparse.csc.csc_matrix, а y относится к типу scipy.sparse.csr.csr_matrix.

documents = (
    "The sky is blue",
    "The sun is bright",
    "The sun in the sky is bright",
    "We can see the shining sun, the bright sun"
)

countvectorizer = CountVectorizer()
y =  countvectorizer.fit_transform(documents)
n  = y.T.dot(y) 
x = n.tocsr()
x = x.toarray()
numpy.fill_diagonal(x, 0) 

result = cosine_similarity(x, "None")

person newdev14    schedule 17.04.2016    source источник
comment
Первым предположением будет разреженное представление, вызывающее проблемы. Вы пытались преобразовать матрицы в неразреженное представление?   -  person piman314    schedule 18.04.2016
comment
@ncfirth Под неразреженным вы подразумеваете пустой массив?   -  person newdev14    schedule 18.04.2016
comment
Да [больше символов]   -  person piman314    schedule 18.04.2016
comment
@ncfirth Привет .. но это то, что я делаю после операции скалярного произведения (преобразование матрицы в массив с помощью toarray())   -  person newdev14    schedule 18.04.2016
comment
Не могли бы вы привести примеры данных для работы?   -  person piman314    schedule 19.04.2016
comment
@ncfirth Добавлено несколько примеров данных, спасибо за вашу помощь!   -  person newdev14    schedule 24.04.2016
comment
Я думаю, что это должно быть проблемой с функцией cosine_similarity, которую вы используете. См. решение ниже.   -  person piman314    schedule 26.04.2016


Ответы (1)


Используя sklearn cosine_similarity, этот сегмент кода запускается и возвращает разумно выглядящий ответ.

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics.pairwise import distance_metrics

documents = (
    "The sky is blue",
    "The sun is bright",
    "The sun in the sky is bright",
    "We can see the shining sun, the bright sun"
)

countvectorizer = CountVectorizer()
y =  countvectorizer.fit_transform(documents)
n  = y.T.dot(y) 
x = n.tocsr()
x = x.toarray()
np.fill_diagonal(x, 0) 
cosine_similarity = distance_metrics()['cosine']
result = cosine_similarity(x, x)
person piman314    schedule 26.04.2016