2014-12-21 4 views
5

मैं क्लस्टर टिप्पणियों के लिए विज्ञान सीखने के केमन्स एल्गोरिदम का उपयोग कर रहा हूं।केमैन कैसे जानते हैं कि दस्तावेजों को क्लस्टर कैसे करें जब हम केवल अलग-अलग शब्दों के tfidf वैक्टर को खिलाते हैं?

sentence_list=['hello how are you', "I am doing great", "my name is abc"] 

vectorizer=TfidfVectorizer(min_df=1, max_df=0.9, stop_words='english', decode_error='ignore') 
vectorized=vectorizer.fit_transform(sentence_list) 

km=KMeans(n_clusters=num_clusters, init='k-means++',n_init=10, verbose=1) 
km.fit(vectorized) 

जब मैं vectorized के उत्पादन में प्रिंट, यह मेरे शब्द और सूचकांक के tf-आईडीएफ स्कोर के सूचकांक देता है।

तो सोच रहा im, यह देखते हुए कि हम केवल शब्दों के tfidf स्कोर प्राप्त करें, यह कैसे है कि हम और अलग-अलग शब्दों के आधार पर दस्तावेजों क्लस्टर में कामयाब नहीं एक पूरे दस्तावेज़ के स्कोर है? या शायद यह ऐसा करता है..क्या कोई मुझे इसके पीछे अवधारणा समझा सकता है?

+0

सुनिश्चित नहीं है कि आप क्या पूछ रहे हैं। शब्दों को शब्दों में विभाजित करने की प्रक्रिया वेक्टरेशन/फिटिंग प्रक्रिया का हिस्सा है। – BrenBarn

+0

मेरा अंतिम लक्ष्य वाई अक्ष के साथ 2 डी ग्राफ प्लॉट करने में सक्षम होना है, जो टीएफआईडीएफ स्कोर और एक्स-अक्ष हो सकता है, शायद गिनती वेक्टर (या कुछ और जो अधिक समझ में आता है) और प्रत्येक डेटा पॉइंट 1 दस्तावेज़ है। तो मुझे यह जानने के लिए उत्सुक था कि क्या प्रत्येक वाक्य के लिए स्कोर वास्तव में दृश्य के पीछे गणना की जाती है जैसे कि सबसे समान स्कोर वाले क्लस्टर एक साथ क्लस्टर किए जाते हैं? – jxn

उत्तर

6

आपको यह देखना चाहिए कि Kmeans algorithm कैसे काम करता है। सबसे पहले स्टॉप शब्द इसे vectorized तक कभी नहीं बनाते हैं, इसलिए पूरी तरह से केमैन द्वारा अनदेखा किया जाता है और दस्तावेज़ों को क्लस्टर करने में कोई प्रभाव नहीं पड़ता है। अब मान लीजिए कि आपके पास:

sentence_list=["word1", "word2", "word2 word3"] 

चलें कहते हैं कि तुम 2 समूहों चाहते हैं। इस मामले में आप दूसरे और तीसरे दस्तावेज़ को एक ही क्लस्टर में होने की उम्मीद करते हैं क्योंकि वे एक आम शब्द साझा करते हैं। चलो देखते हैं कि यह कैसे होता है।

डॉक्स vectorized की संख्यात्मक प्रस्तुति लगता है:

word1  word3  word2 
    1 0.000000 0.000000  # doc 1 
    0 1.000000 0.000000  # doc 2 
    0 0.605349 0.795961  # doc 3 

Kmeans के पहले चरण में, कुछ centroids हैं बेतरतीब ढंग से, डेटा से चुना उदाहरण के लिए, दस्तावेज़ 1 और दस्तावेज़ 3 होगा प्रारंभिक centroids हो: अगर आप दो centroids में से हर एक के लिए हर बिंदु (दस्तावेज़) से दूरी की गणना

Centroid 1:  [1, 0.000000, 0.000000] 

Centroid 2:  [0, 0.605349, 0.795961] 
अब

, आपको लगता है कि देखेंगे:

  • दस्तावेज़ 1 केन्द्रक 1 के लिए दूरी 0 है तो यह केन्द्रक को 1
  • दस्तावेज़ 3 दूरी 0 केन्द्रक से 2 तो यह 2

केन्द्रक के अंतर्गत आता है है अंत में हम शेष के बीच दूरी की गणना अंतर्गत आता है दस्तावेज़ 2 और प्रत्येक केन्द्रक पता लगाने के लिए जो एक वह जुड़ी है:

>>> from scipy.spatial.distance import euclidean 

>>> euclidean([0, 1, 0], [1, 0, 0])    # dist(doc2, centroid1) 
1.4142135623730951 

>>> euclidean([0, 1, 0], [0, 0.605349, 0.795961]) # dist(doc2, centroid2) 
0.8884272507056005 

तो 2 दस्तावेज़ और दूसरा केन्द्रक करीब हैं, इसका मतलब है कि दूसरे दस्तावेज़ 2 centr को सौंपा गया है OID।

+0

क्या प्रत्येक दस्तावेज़ को 2 डी धुरी पर प्लॉट करना संभव है ताकि हमें एक बेहतर विचार दिया जा सके कि हमें कितने क्लस्टर चाहिए या जहां केंद्र होना चाहिए? – jxn

+0

मैंने इसे पूरे दस्तावेज़ों पर कभी नहीं किया है लेकिन मुझे आपके विचार में कोई समस्या नहीं दिखाई दे रही है। मुझे लगता है कि यह करने योग्य होना चाहिए। – elyase

1

TF/आईडीएफ एक उपाय है कि उस दस्तावेज़ में शब्दों के बाकी के संबंध में एक दस्तावेज़ में एक शब्द के महत्व की गणना करता है। यह एक स्टैंडअलोन शब्द के महत्व की गणना नहीं करता है। (और यह समझ में आता है, है ना? क्योंकि महत्व हमेशा दूसरों पर निजीकरण का मतलब है!)। तो प्रत्येक शब्द का टीएफ/आईडीएफ वास्तव में शब्द के संबंध में एक दस्तावेज़ का एक महत्वपूर्ण उपाय है।

मुझे नहीं पता कि आपके कोड में टीएफ/आईडीएफ का उपयोग कहाँ किया जाता है। हालांकि, सुविधाओं के रूप में उपयोग किए गए टीएफ/आईडीएफ स्कोर के साथ केमैन एल्गोरिदम की गणना करना संभव है। साथ ही, आपके द्वारा वर्णित तीन नमूना दस्तावेजों के लिए क्लस्टरिंग असंभव है, जबकि कोई भी दो दस्तावेज़ों में एक आम शब्द नहीं है!

संपादित करें 1: सभी के पहला, अगर शब्द 'बिल्ली' दो दस्तावेज़ों में होता है यह संभव है कि वे एक साथ संकुल किया जाएगा (दो दस्तावेजों में दूसरे शब्दों और भी अन्य दस्तावेजों के आधार पर)। दूसरा, आपको के-साधनों के बारे में और जानना चाहिए। आप देखते हैं, केमैन दस्तावेज़ों को एक साथ क्लस्टर करने के लिए सुविधाओं का उपयोग करते हैं, और दस्तावेज़ में प्रत्येक शब्द के लिए प्रत्येक टीएफ/आईडीएफ स्कोर एक फीचर उपाय है जिसका उपयोग उस दस्तावेज़ की तुलना किसी अन्य कॉर्पस पर करने के लिए किया जाता है।

+0

ये केवल उदाहरण हैं, इसलिए यदि मेरी सजा के 2 में, 'बिल्ली' शब्द मौजूद है, तो 'बिल्ली' के साथ 2 वाक्य एक साथ क्लस्टर हो जाएंगे क्योंकि दूसरे शब्द स्टॉपवर्ड हैं? और यदि ऐसा है, तो क्या अहंकार प्रत्येक वाक्य के एक दस्तावेज़ में प्रत्येक शब्द के tfidf के आधार पर प्रत्येक वाक्य के लिए स्कोर गणना करता है (माना जाता है कि 'बिल्ली' में उच्च टीएफआईडीएफ स्कोर है)? – jxn

+0

@ जेन मेरा पहला संपादन देखें! यदि आपके पास और quetions है तो मुझे बताएं। – user823743

संबंधित मुद्दे