2014-09-04 8 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

+0

Bag of Words가이 문제에 도움이 될지 확신하지 못합니다.이 데이터에는 단어의 철자가 잘못되었거나 약어가있는 경우가 많기 때문입니다. 예 : CVR과 COCPIT VOICE RECORDER는 "edit distance"를 사용하여 유사점을 가졌지 만 일반적인 Bag of Words 기능이 없으므로 동일한 클러스터에 있어야합니다. –

답변

0

나는 각 제품 설명에 각 제품 설명에 각 단어가 몇 번이나 포함되어 있는지와 비슷한 점을 발견했습니다. 따라서 각 항목에 대해 대부분 1과 2의 길이가 긴 벡터가 나타납니다. 그런 다음 이것을 원하는 클러스터링 alg에 넣을 수 있습니다 (저는 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) 

당신이, 당신의 마음에 드는 클러스터링 알고리즘을 사용할 수 있습니다이를 위해 내가 직접 하나 kmeans를 사용하거나 유사성 행렬을 계산하는 것 행렬의 각 행 쌍은 공통 단어 수를 계산 한 다음 스펙트럼 클러스터링을 사용합니다.