這裏有兩個相關的(但截然不同的技術)問題;第一個涉及這種數據的聚類技術的選擇。
第二個謂詞問題與數據模型有關 - 也就是說,對於原始數據中的每個句子,如何將其轉換爲適合輸入到聚類算法的數據向量。
聚類技術
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。
你的總體目標是什麼?也許聚類不是達到這個目的的手段。你想要什麼文件羣集?其他簡單的技巧:[幻燈片15](http://www.slideshare.net/niccokunzmann/clustering-gruppieren-von-datenpunkten)。 – User 2014-11-23 08:06:39