【发布时间】:2020-06-06 22:54:33
【问题描述】:
您好,我有一个小文件和一个大文件, 这里的代码甚至不适用于大文件,只适用于小文件,那么我该如何读取大文件并对其执行操作?当我阅读并尝试在一个循环中进行聚类时,它不起作用,因为每次迭代都只在线。 这是小文件的问题: 行文件,我需要将它们分成 3 组。 我尝试过亲和力传播,但它没有获得组大小参数,它给了我 4 个组,而第 4 组只有一个词与另一个组非常接近:
0
- *Bras5emax Estates, L.T.D.
:* Bras5emax Estates, L.T.D.
1
- *BOZEMAN Enterprises
:* BBAZEMAX ESTATES, LTD
, BOZEMAN Ent.
, BOZEMAN Enterprises
, BOZERMAN ENTERPRISES
, BRAZEMAX ESTATYS, LTD
, Bozeman Enterprises
2
- *PC Adelman
:* John Smith
, Michele LTD
, Nadelman, Jr
, PC Adelman
3
- *Gramkai, Inc.
:* Gramkai Books
, Gramkai, Inc.
, Gramkat Estates, Inc., Gramkat, Inc.
然后我尝试了 K-MEANS 但结果:
0
- *Gramkai Books
, Gramkai, Inc.
, Gramkat Estates, Inc., Gramkat, Inc.
:*
1
- *BBAZEMAX ESTATES, LTD
, BOZEMAN Enterprises
, BOZERMAN ENTERPRISES
, BRAZEMAX ESTATYS, LTD
, Bozeman Enterprises
, Bras5emax Estates, L.T.D.
:*
2
- *BOZEMAN Ent.
, John Smith
, Michele LTD
, Nadelman, Jr
, PC Adelman
:*
如您所见,BOZEMAN Ent。属于第 2 组而不是第 1 组。
我的问题是:有没有办法做一个更好的集群? K-MEANS 中是否有 cluster_center ?
代码:
import numpy as np
import sklearn.cluster
import distance
f = open("names.txt", "r")
words = f.readlines()
words = np.asarray(words) #So that indexing with a list will work
lev_similarity = -1*np.array([[distance.levenshtein(w1,w2) for w1 in words] for w2 in words])
affprop = sklearn.cluster.KMeans(n_clusters=3)
affprop.fit(lev_similarity)
for cluster_id in np.unique(affprop.labels_):
print(cluster_id)
cluster = np.unique(words[np.nonzero(affprop.labels_==cluster_id)])
cluster_str = ", ".join(cluster)
print(" - *%s:*" % ( cluster_str))
【问题讨论】:
标签: python file machine-learning cluster-computing k-means