Je voudrais tracer un graphique 2d avec l'axe des x comme terme et l'axe des y comme le score TFIDF (ou l'identifiant du document) pour ma liste de phrases. J'ai utilisé fit_transform () de scikit learn pour obtenir la matrice scipy mais je ne sais pas comment utiliser cette matrice pour tracer le graphique. J'essaie d'obtenir un complot pour voir comment mes phrases peuvent être classées à l'aide de kméans.
Voici le résultat de fit_transform(sentence_list)
:
(identifiant du document, numéro du terme) tfidf score
(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
Voici mon code:
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
Merci,
Lorsque vous utilisez Sac de mots, chacune de vos phrases est représentée dans un espace de grande dimension et de longueur égale au vocabulaire. Si vous souhaitez représenter cela en 2D, vous devez réduire la cote, par exemple en utilisant PCA avec deux composants:
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
Maintenant, vous pouvez par exemple calculer et tracer le cluster entre sur ces données:
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
Attribuez simplement une variable aux étiquettes et utilisez-la pour indiquer la couleur. ex km = Kmeans().fit(X)
clusters = km.labels_.tolist()
puis c=clusters