ネット上から寄せ集めて下記のようなコードを作成しました。
python
1from scipy.cluster.hierarchy import dendrogram, linkage, fcluster 2import numpy as np 3 4def hierarchical_clustering(emb, threshold): 5 # 階層型クラスタリングの実施 6 # ウォード法 x ユークリッド距離 7 linkage_result = linkage(emb, method='ward', metric='euclidean') 8 # クラスタ分けするしきい値を決める 9 threshold_distance = threshold * np.max(linkage_result[:, 2]) 10 # クラスタリング結果の値を取得 11 clustered = fcluster(linkage_result, threshold_distance, criterion='distance') 12 print("end clustering.") 13 return linkage_result, threshold_distance, clustered 14 15def plot_dendrogram(linkage_result, doc_index, threshold): 16 # 階層型クラスタリングの可視化 17 plt.figure(facecolor='w', edgecolor='k') 18 dendrogram(linkage_result, labels=doc_index, color_threshold=threshold) 19 print("end plot.") 20 plt.savefig('hierarchy.png') 21 22def save_cluster(doc_index, clustered): 23 doc_cluster = np.array([doc_index, clustered]) 24 doc_cluster = doc_cluster.T 25 doc_cluster = doc_cluster.astype("int64") 26 doc_cluster = doc_cluster[np.argsort(doc_cluster[:,1])] 27 np.savetxt('cluster.csv', doc_cluster, delimiter=",", fmt="%.0f") 28 print("save cluster.") 29 30#事前に保存したDoc2Vec学習モデルを読み込み 31m = models.Doc2Vec.load('test.model') 32 33#ベクトルをリストに格納 34vectors_list=[m.docvecs[n] for n in range(len(m.docvecs))] 35 36#クラスタリング 37threshold = 0.4 38linkage_result, threshold, clustered = hierarchical_clustering(emb=vectors_list, threshold=threshold) 39plot_dendrogram(linkage_result=linkage_result, doc_index=list(range(2000)), threshold=threshold) 40save_cluster(list(range(2000)), clustered)
上記コードを実行した結果、下記のようなエラーが出力されました
ValueError Traceback (most recent call last)
<ipython-input-10-67000ab3edde> in <module>
39 plot_dendrogram(linkage_result=linkage_result, doc_index=list(range(2000)), threshold=threshold)
40 print(clustered)
---> 41 save_cluster(list(range(2000)), clustered)<ipython-input-10-67000ab3edde> in save_cluster(doc_index, clustered)
23 doc_cluster = np.array([doc_index, clustered])
24 doc_cluster = doc_cluster.T
---> 25 doc_cluster = doc_cluster.astype("int64")
26 doc_cluster = doc_cluster[np.argsort(doc_cluster[:,1])]
27 np.savetxt('cluster.csv', doc_cluster, delimiter=",", fmt="%.0f")ValueError: setting an array element with a sequence.
エラーの解消方法を教えてください
あなたの回答
tips
プレビュー