Python 使用k-means方法將列表中相似的句子聚為一類


由於今年暑假在學習一些自然語言處理的東西,發現網上對k-means的講解不是很清楚,網上大多數代碼只是將聚類結果以圖片的形式呈現,而不是將聚類的結果表示出來,於是我將老師給的代碼和網上的代碼結合了一下,
由於網上有許多關於k-means算法基礎知識的講解,因此我在這里就不多講解了,想了解詳細內容的,大家可以自行百度,在這里我只把我的代碼給大家展示一下。k-means方法的缺點是k值需要自己確定,大家可以多換換k值,
看看結果會有什么不同
# coding: utf-8
import sys
import math
import re
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.cluster import AffinityPropagation
import nltk

reload(sys)
sys.setdefaultencoding('utf8')

from sklearn.feature_extraction.text import CountVectorizer
#要聚類的數據
corpus = [
    'This is the first document.',#0
    'This is the second second document.',#1
    'And the third one.',#2
    'Is this the first document?',#3
    'I like reading',#4
    'do you like reading?',#5
    'how funny you are! ',#6
    'he is a good guy',#7
    'she is a beautiful girl',#8
    'who am i',#9
    'i like writing',#10
    'And the first one',#11
    'do you play basketball',#12
]
#將文本中的詞語轉換為詞頻矩陣
vectorizer = CountVectorizer()
#計算個詞語出現的次數
X = vectorizer.fit_transform(corpus)#獲取詞袋中所有文本關鍵詞
word = vectorizer.get_feature_names()

#類調用
transformer = TfidfTransformer()

#將詞頻矩陣X統計成TF-IDF值
tfidf = transformer.fit_transform(X)
#查看數據結構 tfidf[i][j]表示i類文本中的tf-idf權重
weight = tfidf.toarray()
# print weight

# kmeans聚類
from sklearn.cluster import KMeans

# print data
kmeans = KMeans(n_clusters=5, random_state=0).fit(weight)#k值可以自己設置,不一定是五類
# print kmeans
centroid_list = kmeans.cluster_centers_
labels = kmeans.labels_
n_clusters_ = len(centroid_list)
# print "cluster centroids:",centroid_list
print labels
max_centroid = 0
max_cluster_id = 0
cluster_menmbers_list = []

for i in range(0, n_clusters_):

    menmbers_list = []
    for j in range(0, len(labels)):
        if labels[j] == i:
            menmbers_list.append(j)
    cluster_menmbers_list.append(menmbers_list)
# print cluster_menmbers_list
#聚類結果
for i in range(0,len(cluster_menmbers_list)):
    print '' + str(i) + '' + '---------------------'
    for j in range(0,len(cluster_menmbers_list[i])):
       a = cluster_menmbers_list[i][j]
       print corpus[a]

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM