2014-11-23 73 views
3

我是新來的聚類,需要對如何處理這個問題的一些意見...聚類在Python與文件

比方說,我有成千上萬的句子,但是從樣本數可以是:

  • 經驗,在網絡
  • 強大的銷售經驗
  • 強大的聯網能力者優先
  • 銷售的專業企業需要
  • 巧克力蘋果
  • 作業是爲網絡專業

至關重要爲了聚集這些最好的方式,我可以採取什麼辦法?

我已經看過k-means的單詞引導,但是當我有數以千計的可能包含不同單詞的句子時,這對於構建這種大小的矢量是否有效,然後通過每個試圖查看哪個句子具有這些話?

還有什麼其他方法我沒有找到?

我迄今所做的:

  • 進口從CSV的句子的字典進行ID:句子
  • 我從每個句子移除停止字
  • 我然後分別計算所有的話建立一個主矢量並保持一個單詞出現的次數。
+0

你的總體目標是什麼?也許聚類不是達到這個目的的手段。你想要什麼文件羣集?其他簡單的技巧:[幻燈片15](http://www.slideshare.net/niccokunzmann/clustering-gruppieren-von-datenpunkten)。 – User 2014-11-23 08:06:39

回答

6

這裏有兩個相關的(但截然不同的技術)問題;第一個涉及這種數據的聚類技術的選擇。

第二個謂詞問題與數據模型有關 - 也就是說,對於原始數據中的每個句子,如何將其轉換爲適合輸入到聚類算法的數據向量。

聚類技術

K-手段可能是最流行的聚類技術,但也有不少更佳;考慮k-kmeans如何工作:用戶從數據中選擇少量數據點(k-均值算法中的初始迭代的聚類中心,也稱爲質心)。接下來,確定每個數據點與質心集合之間的距離,並且分配給它所接受的質心的每個數據點都接近;然後根據分配給相同羣集的數據點的平均值確定新的質心。重複這兩個步驟直到達到某個收斂標準(例如,在兩個連續迭代之間,質心組合運動降至某個閾值以下)。

更好的聚類技術做更多的不僅僅是移動周圍的聚類中心 - 例如,譜聚類技術旋轉和伸展/擠壓數據,以找到最大方差的單個軸線然後確定附加軸正交到原來的一個和另一個 - 即一個變換過的特徵空間。 PCA(主成分分析),LDA(線性判別分析),和kPCA是這個類的所有成員,定義特徵其是,本徵值/本徵矢量雙在每個特徵計算原始數據或協方差矩陣。 Scikit-learn有一個適用於PCA computation的模塊。

數據模型

正如你所觀察到的,在構建從非結構化的文本數據的數據模型的共同困境,包括在整個語料庫字字功能(減停的話)通常會導致在數據集上非常高的稀疏性(即,每個句子僅包括所有句子中總詞的一小部分,因此每個數據向量因此是稀疏的;另一方面,如果語料庫被修整以便例如僅前10%的詞被用作特徵,則一些/許多句子具有完全未填充的數據向量。

這裏的技術來幫助解決這個問題,這可能是特別有效的給您的數據的一個共同的序列:聯合相關條款爲單一期限使用正常化常見的處理順序,制止同義詞

這是直觀的:例如,

規格化:變換所有單詞爲小寫(Python字符串具有較低的方法,所以

REquired.lower() 

顯然,這防止必需需要 ,而要求包含數據向量中的三個獨立要素,而不是將它們摺疊爲單個術語。

:詞幹,需要,需要,和要求之後,被摺疊到單個令牌,requir

兩個最常見的莖桿菌是Porter和Lancaster莖桿菌(下文討論的NLTK具有兩者)。

Synonymize:條款像流利能夠,和熟練,可以根據上下文,全部被摺疊到單個術語,通過識別在一個共同的同義詞列表。

優秀的Python NLP庫,NLTK有(至少)一些優秀的同義詞彙編,或數字詞庫(敘詞表?)來幫你做所有這三個,編程。

例如,nltk.corpus.reader.lin是一個(只有一個,也有在NLTLK至少幾個同義詞發現者),它的簡單易用 - 只需導入這個模塊並調用代名詞,傳入一個術語。

多個詞幹在NLTK的stem package

4

我其實剛剛在Python中編寫了一個文檔集羣指南。我建議使用k-means和潛在dirichlet分配的組合。看一看,讓我知道如果我可以進一步解釋任何事情:http://brandonrose.org/clustering

+1

您好,我最近看到了關於聚類的網頁:爲什麼在聚類後執行尺寸縮減(MDS/PCA)?在許多其他的例子/文章中,它們總是對尺寸減小的數據進行聚類,因爲這應該突出文檔之間的任何可能的「綁定」。 – Vektor88 2015-08-11 14:18:34

+1

@ Vektor88我在高維數據上運行集羣,然後使用MDS將數據純爲了可視化目的而減少到兩個維度(以生成散點圖)。我可以在聚類之前運行MDS,但是我發現這些聚類有點不太合理(儘管它們在視覺上非常緊密)。 如果我有更多的數據,運行聚類算法昂貴,因爲它的維數很高,我肯定會首先使用MDS。 – brandomr 2015-08-12 17:20:12