2015-01-26 8 views
5

मैं वाक्य की मेरी सूची के लिए x-axis के साथ x-axis के साथ शब्द और वाई-अक्ष के रूप में TFIDF स्कोर (या दस्तावेज़ आईडी) के रूप में प्लॉट करना चाहता हूं। मैंने ssyy matrix प्राप्त करने के लिए scikit learn's fit_transform() का उपयोग किया लेकिन मुझे नहीं पता कि ग्राफ को साजिश करने के लिए उस मैट्रिक्स का उपयोग कैसे करें। मैं यह देखने के लिए एक साजिश प्राप्त करने की कोशिश कर रहा हूं कि मेरे वाक्य को केमैन का उपयोग करके वर्गीकृत किया जा सकता है।प्लॉट एक दस्तावेज़ tfidf 2D ग्राफ

(दस्तावेज़ आईडी, अवधि संख्या) tfidf स्कोर

(0, 1023) 0.209291711271 
    (0, 924) 0.174405532933 
    (0, 914) 0.174405532933 
    (0, 821) 0.15579574484 
    (0, 770) 0.174405532933 
    (0, 763) 0.159719994016 
    (0, 689) 0.135518787598 

यहाँ मेरी कोड है::

यहाँ fit_transform(sentence_list) का आउटपुट है

 sentence_list=["Hi how are you", "Good morning" ...] 
     vectorizer=TfidfVectorizer(min_df=1, stop_words='english', decode_error='ignore') 
     vectorized=vectorizer.fit_transform(sentence_list) 
     num_samples, num_features=vectorized.shape 
     print "num_samples: %d, num_features: %d" %(num_samples,num_features) 
     num_clusters=10 
     km=KMeans(n_clusters=num_clusters, init='k-means++',n_init=10, verbose=1) 
     km.fit(vectorized) 
     PRINT km.labels_ # Returns a list of clusters ranging 0 to 10 

धन्यवाद,

+0

आप के लिए निम्नलिखित काम करता है? यह होना चाहिए कि आप केवल एक साधारण 2 डी साजिश देख रहे हों। http://matplotlib.org/examples/pylab_examples/simple_plot.html –

उत्तर

15

जब आप बैग का उपयोग करते हैं शब्द, आपके प्रत्येक वाक्यों को शब्दावली के बराबर लंबाई के उच्च आयामी अंतरिक्ष में दर्शाया जाता है। आप 2 डी में यह प्रतिनिधित्व करने के लिए चाहते हैं तो आप आयाम दो घटकों के साथ पीसीए का उपयोग कर उदाहरण के लिए, कम करने की जरूरत:

from sklearn.datasets import fetch_20newsgroups 
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer 
from sklearn.decomposition import PCA 
from sklearn.pipeline import Pipeline 
import matplotlib.pyplot as plt 

newsgroups_train = fetch_20newsgroups(subset='train', 
             categories=['alt.atheism', 'sci.space']) 
pipeline = Pipeline([ 
    ('vect', CountVectorizer()), 
    ('tfidf', TfidfTransformer()), 
])   
X = pipeline.fit_transform(newsgroups_train.data).todense() 

pca = PCA(n_components=2).fit(X) 
data2D = pca.transform(X) 
plt.scatter(data2D[:,0], data2D[:,1], c=data.target) 
plt.show()    #not required if using ipython notebook 

data2d

अब आप उदाहरण के लिए गणना और साजिश क्लस्टर इस डेटा के प्रवेश करती है कर सकते हैं:

from sklearn.cluster import KMeans 

kmeans = KMeans(n_clusters=2).fit(X) 
centers2D = pca.transform(kmeans.cluster_centers_) 

plt.hold(True) 
plt.scatter(centers2D[:,0], centers2D[:,1], 
      marker='x', s=200, linewidths=3, c='r') 
plt.show()    #not required if using ipython notebook 

enter image description here

+0

हां यह बिल्कुल ठीक है। धन्यवाद! – jxn

+0

क्या मैं सिर्फ convctorizer करने के बजाय tfidftransformer करने के बजाय tfidfvectorizer का उपयोग कर सकता हूं? क्या पाइपलाइन के लिए कोड इस तरह दिखता है: 'पाइपलाइन = पाइपलाइन ([('tfidf', TfidfVectorizer())] '? – jxn

+3

मुझे 'plt.scatter (data2D [:, 0], data2D [:, 1], c = data.target) 'विशेष रूप से' c = data.target' के लिए त्रुटि मिल रही है। यदि मैं चाहता हूं कि स्कैटर प्लॉट के रंगों को केमैन द्वारा खोजे गए क्लस्टर के रंगों में ट्यून किया जाए, तो मुझे 'data.target' के स्थान पर क्या उपयोग करना चाहिए? 'Kmeans.label_'? # यह एक सूची देता है। – jxn

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