sklearn的各種聚類(lèi)算法使用教程

編程環(huán)境:

anaconda + Spyder
Win10 + python3.6
完整代碼及數(shù)據(jù)已經(jīng)更新至GitHub,歡迎fork~GitHub鏈接


聲明:創(chuàng)作不易,未經(jīng)授權(quán)不得復(fù)制轉(zhuǎn)載
statement:No reprinting without authorization


內(nèi)容概述:

  • 測(cè)試sklearn中以下聚類(lèi)算法在tweets數(shù)據(jù)集上的聚類(lèi)效果
  • 使用NMI(Normalized Mutual Information)作為評(píng)價(jià)指標(biāo)
  • sklearn聚類(lèi)資料鏈接

一、sklearn提供的各種聚類(lèi)方法簡(jiǎn)介:

image.png

其中各種方法的原理實(shí)現(xiàn)可以查看Sklearn的官方文檔,不再贅訴。鏈接如下:
https://scikit-learn.org/stable/modules/clustering.html#

二、對(duì)tweet數(shù)據(jù)集的簡(jiǎn)單處理:

根據(jù)每條推特都有很整齊的格式,可以簡(jiǎn)單處理出需要的tweet內(nèi)容文字和true_label,具體實(shí)現(xiàn)函數(shù)如下:
處理后得到

  • ground_truth #每條推特的正確聚類(lèi)標(biāo)簽[37,5,8,58......]
  • tweets_list #處理過(guò)的推特內(nèi)容列表[推特內(nèi)容1,內(nèi)容2,......]。
def token(line):    
    index = line.index(",")
    Text = line[10:index-1]
    cluNumber = line[index+12:-2]
    return (Text,cluNumber)

def tweets_process():
    global ground_truth,tweets_list
    print("tweets processing...")
    f = open(r"C:\Users\93568\Documents\GitHub\DataMining\work5Clustering with sklearn\data\Homework5Tweets.txt")  
    lines = f.readlines()#讀取全部?jī)?nèi)容    
    for line in lines:       
        (text,cluNumber) = token(line)      
        number = int(cluNumber)
        tweets_list.append(text)
        ground_truth.append(number)

三、將tweet表示為tfidf的矩陣:

利用python提供的特征提取的工具包:

from sklearn.feature_extraction.text import  TfidfVectorizer

def get_tfidf_matrix():
    global tfidf_matrix,tweets_list
    tfidf_vectorizer = TfidfVectorizer(tokenizer=token_split, lowercase=True)
    '''
    tokenizer: 指定分詞函數(shù)
    lowercase: 在分詞之前將所有的文本轉(zhuǎn)換成小寫(xiě),因?yàn)樯婕暗街形奈谋咎幚恚?    所以最好是False,本tweet數(shù)據(jù)集已經(jīng)全是小寫(xiě)可設(shè)為T(mén)rue
    '''    
    #tfidf_matrix = tfidf_vectorizer.fit_transform(tweets_list)
    #上面一行代碼等價(jià)于下面兩行代碼
    tfidf_vectorizer.fit(tweets_list)
    tfidf_matrix = tfidf_vectorizer.transform(tweets_list)
#    joblib.dump(tfidf_matrix, 'tfidf_matrix.pkl')
#    tfidf_matrix = joblib.load('tfidf_matrix.pkl')

四、運(yùn)行結(jié)果及一些問(wèn)題:

(1)KMeans:

max_iter=200, n_init=20, init='k-means++':


#####
(2) AffinityPropagation:
image.png
(3) MeanShift:

開(kāi)始輸入相同的tfidf矩陣時(shí)出現(xiàn)
TypeError: A sparse matrix was passed, but dense data is required. Use X.toarray() to convert to a dense numpy array.(使用toarray()/todense()后結(jié)果如下:)

image.png

可能是密度質(zhì)心的方法對(duì)于高維數(shù)據(jù)結(jié)果很差,輸出的標(biāo)簽結(jié)果都是0:
image.png

(4)DBSCN:

沒(méi)有進(jìn)行調(diào)參,默認(rèn)參數(shù)運(yùn)行結(jié)果如下:


image.png
(5)SpectralClustering、ward hierarchical clustering、AgglomerativeClustering、Birch:
image.png
(6)Gaussian mixtures:略…
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容