webentwicklung-frage-antwort-db.com.de

zeichnen Sie ein Dokument in einem 2D-Diagramm

Ich möchte gerne einen 2D-Graphen mit der x-Achse als Term und y-Achse als TFIDF-Score (oder Dokument-ID) für meine Satzliste darstellen. Ich habe fit_transform () von scikit learn verwendet, um die Scipy-Matrix zu erhalten, aber ich weiß nicht, wie ich diese Matrix verwenden soll, um den Graphen zu zeichnen. Ich versuche eine Verschwörung zu erhalten, um zu sehen, wie gut meine Sätze mit kmeans klassifiziert werden können.

Hier ist die Ausgabe von fit_transform(sentence_list):

(Dokument-ID, Termnummer) 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

Hier ist mein 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 

Vielen Dank,

12
jxn

Wenn Sie Wortsäcke verwenden, wird jeder Ihrer Sätze in einem hochdimensionalen Längenraum dargestellt, der dem Vokabular entspricht. Wenn Sie dies in 2D darstellen möchten, müssen Sie die Bemaßung reduzieren, beispielsweise mit PCA mit zwei Komponenten:

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

Nun können Sie zum Beispiel die Eingaben des Clusters anhand dieser Daten berechnen und darstellen:

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

27
elyase

Weisen Sie den Etiketten einfach eine Variable zu und verwenden Sie diese, um Farbe zu kennzeichnen. ex km = Kmeans().fit(X) clusters = km.labels_.tolist() dann c=clusters

0
beto