【发布时间】:2016-11-26 21:22:10
【问题描述】:
我正在尝试在一组描述中找到最近的邻居。描述通常包含 1-15 个单词,我使用 scikit 的 TfIdfVectorizer 进行标记。然后,使用相同的矢量化器,我正在拟合基本描述。但是,向量化器似乎将这个分割为分隔字符而不是单词,因为生成的稀疏矩阵的形状为 [基本描述中的字母数 x 语料库中唯一单词的数量]
descriptions = 'total assets'
products = LoadData('C:/dict.csv', dtype = {'Code': np.str, 'LocalLanguageLabel': np.str})
products = products.fillna({'LocalLanguageLabel':''})
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(token_pattern=r'\b\w+\b')
#tried the below two as well
#vectorizer = TfidfVectorizer()
#vectorizer = TfidfVectorizer(token_pattern=r'\b\w+\b', analyzer = 'word')
dict_matrix = vectorizer.fit_transform(products['LocalLanguageLabel'])
input_matrix = vectorizer.transform(description)
from sklearn.neighbors import NearestNeighbors
model = NearestNeighbors(metric='euclidean', algorithm='brute')
model.fit(dict_matrix)
distance, indices = model.kneighbors(input_matrix,n_neighbors = 10)
当我打印 input_matrix 时,这是我得到的(你可以猜到索引与“totalassets”中的字符相关):
print(input_matrix)
(0, 33478) 1.0 #t
(1, 24021) 1.0 #o
(2, 33478) 1.0 #t
(3, 2298) 1.0 #a
(4, 20272) 1.0 #l
(6, 2298) 1.0 #a
(7, 30874) 1.0 #s
(8, 30874) 1.0 #s
(9, 11386) 1.0 #e
(10, 33478) 1.0 #t
(11, 30874) 1.0 #s
<12x39859 sparse matrix of type '<class 'numpy.float64'>'
with 11 stored elements in Compressed Sparse Row format>
这是预期的吗?我希望有 10 个距离和 10 个索引,而不是我得到 12 个列表,每个列表包含 10 个元素。
【问题讨论】:
标签: python scikit-learn