【发布时间】:2017-10-05 08:06:38
【问题描述】:
如何使用 Sklearn 的 Kmeans 实现对稀疏数据进行聚类?
尝试根据我自己的用例调整他们的示例,我尝试了:
from sklearn.feature_extraction import DictVectorizer
from sklearn.cluster import KMeans
mydata = [
(1, {'word1': 2, 'word3': 6, 'word7': 4}),
(2, {'word11': 1, 'word7': 9, 'word3': 2}),
(3, {'word5': 7, 'word1': 3, 'word9': 8}),
]
kmeans_data = []
for index, raw_data in mydata:
cnt_sum = float(sum(raw_data.values()))
freqs = dict((k, v/cnt_sum) for k, v in raw_data.items())
v = DictVectorizer(sparse=True)
X = v.fit_transform(freqs)
kmeans_data.append(X)
kmeans = KMeans(n_clusters=2, random_state=0).fit(kmeans_data)
但这会引发异常:
File "/myproject/.env/lib/python3.5/site-packages/sklearn/cluster/k_means_.py", line 854, in _check_fit_data
X = check_array(X, accept_sparse='csr', dtype=[np.float64, np.float32])
File "/myproject/.env/lib/python3.5/site-packages/sklearn/utils/validation.py", line 382, in check_array
array = np.array(array, dtype=dtype, order=order, copy=copy)
ValueError: setting an array element with a sequence.
大概我没有正确构建我的稀疏输入矩阵 X,因为它是一个稀疏矩阵列表,而不是一个包含列表的稀疏矩阵。如何构造合适的输入矩阵?
【问题讨论】:
标签: python scipy scikit-learn k-means