2014-09-04 24 views
1

我需要對來自不同供應商的目錄數據的部件的不同描述進行聚類。我試圖找到一種「方法」,可以檢測類似描述的集羣,以便將它們組合在一起。用於羣集產品說明的ML方法

這是一個部件數目的樣本數據集即 A100: ["COCPIT VOICE RECORDER", "RECORDER", "VOICE RECORDER","BELT", "REGULARTOR BELT", "OXIGEN REGULATOR", "BULB", "OXIGEN REG"]

聚類

預期結果將是,即:它的 Cluster 1: ["COCPIT VOICE RECORDER", "RECORDER", "VOICE RECORDER"], Cluster 2 : ["BELT"], Cluster 3: ["OXIGEN REG", "OXIGEN REGULATOR"], Cluster 4: ["BULB"]

或變化。

我從未有過經驗,這一點,但我對ML基礎研究表明,你需要做的第一件事情就是從數據中提取特徵,所以我試着想出一些功能...

我的特徵提取方法是使用相似性函數(即編輯距離或Levenstain距離)或Jaro Winkler距離來比較這些部分中的每一個部分。

那麼我的想法是使用KMeans算法來找到羣集? 任何想法,如果這個功能選擇是好的? 關於特徵提取的任何其他想法或解決此問題的方法? 謝謝!

+0

作爲一個特徵,字符串(Bag of Words)中每個單詞出現的次數可能非常有趣,因爲它不會預測不同單詞的相對位置。 – AdrienNK 2014-09-04 21:09:12

+0

我不確定這個單詞包對於這個問題是否有好處,因爲在這個數據中有很多情況下單詞是拼寫錯誤或縮寫。例如:CVR和COCPIT VOICE RECORDER使用「編輯距離」具有相似性,但沒有常用的單詞袋特徵,我希望它們位於同一個羣集中? – 2014-09-04 21:28:23

回答

0

我做了類似的地方,我的特徵向量是每個產品說明包含每個字典詞的次數(因此對於每個條目,您將得到一個長向量,大部分爲0,幾個1或2)。然後,您可以將其輸入到您選擇的羣集中(我也使用kmeans)。

在蟒蛇的總體思路是:

# loop over all descriptions to get word list 
allWords = {} 
for productDesc in products : 
    for word in productDesc.split(" ") : 
     if(not word in words) : 
      words[word] = 0 

# build a vector for each description 
matrix = [] 
for productDesc in products : 
    vec = words.copy() 
    for word in productDesc.split(" ") : 
     vec['word'] = vec['word'] + 1 

    matrix.append(vec) 

一旦你有一個特徵矩陣這樣你可以使用自己喜歡的聚類算法,爲了這個,我會直接使用無論是K均值,或計算的相似矩陣(用於矩陣中的每一行計算共同字的數量),然後使用譜聚類。