Dieser Artikel extrahierte den Grad der Streuung von Richtungsinformationen auf der Hypersphäre. In dem damals verwendeten Beispiel eines Kugelclusters wird ein Beispiel mit vmFD erstellt. In einem von ihnen wird tf-idf verwendet, um Wörter in einem Dokument zu vektorisieren, und KMeans wird verwendet, um sie nach dem Schwerpunkt des Vektors zu kategorisieren. In diesem Artikel werden wir das Clustering von Dokumenten vergleichen, indem wir es mit allgemeinen KMeans und movMFD am Beispiel des Sphärenclusters ausführen. Klicken Sie hier für bestimmte Programme. In diesem Artikel werde ich nur die wichtigsten Punkte vorstellen.
Zunächst werde ich die zu verwendenden Daten vorstellen. Enthält Zeitungsskripte und 4 Arten von Kategoriedaten aus externen Datensätzen von sklearn Laden Sie den Text.
###############################################################################
# Load some categories from the training set
categories = [
'alt.atheism',
'talk.religion.misc',
'comp.graphics',
'sci.space',
]
# Uncomment the following to do the analysis on all the categories
#categories = None
print("Loading 20 newsgroups dataset for categories:")
print(categories)
dataset = fetch_20newsgroups(subset='all', categories=categories,
shuffle=True, random_state=42)
Die Textdaten werden so erfasst.
Dieser Satz wird mit TfidfVectorizer vektorkonvertiert.
print("Extracting features from the training dataset using a sparse vectorizer")
vectorizer = TfidfVectorizer(stop_words='english', use_idf=True)
X = vectorizer.fit_transform(dataset.data)
Das Ergebnis ist eine Liste von 3387 Zeilen x 43256 Spalten. Wenn Sie tfidf kennen, müssen Sie es nicht erklären, aber es bedeutet, dass es 3387 Sätze und 43256 eindeutige Wörter gibt.
Hier, falls erforderlich, LSA ausführen. Wenn use_LSA = True ist, werden die Dokumentdaten im Voraus dimensional auf n_components = 500 komprimiert. Der Standardwert ist use_LSA = False.
###############################################################################
# LSA for dimensionality reduction (and finding dense vectors)
if use_LSA:
print("Performing dimensionality reduction using LSA")
svd = TruncatedSVD(n_components)
normalizer = Normalizer(copy=False)
lsa = make_pipeline(svd, normalizer)
X = lsa.fit_transform(X)
explained_variance = svd.explained_variance_ratio_.sum()
print("Explained variance of the SVD step: {}%".format(
int(explained_variance * 100)))
print()
Damit ist die Datenaufbereitung abgeschlossen.
Als nächstes wird das Clustering von Dokumenten auf vier Arten durchgeführt: K-Mittel, sphärische K-Mittel, Soft-MovMF und Hard-MovMF.
# K-Means clustering
km = KMeans(n_clusters=true_k, init='k-means++', n_init=20)
print("Clustering with %s" % km)
km.fit(X)
# Spherical K-Means clustering
skm = SphericalKMeans(n_clusters=true_k, init='k-means++', n_init=20)
print("Clustering with %s" % skm)
skm.fit(X)
# Mixture of von Mises Fisher clustering (soft)
vmf_soft = VonMisesFisherMixture(n_clusters=true_k, posterior_type='soft',
init='random-class', n_init=20, force_weights=np.ones((true_k,))/true_k)
print("Clustering with %s" % vmf_soft)
vmf_soft.fit(X)
# Mixture of von Mises Fisher clustering (hard)
vmf_hard = VonMisesFisherMixture(n_clusters=true_k, posterior_type='hard',
init='spherical-k-means', n_init=20, force_weights=np.ones((true_k,))/true_k)
print("Clustering with %s" % vmf_hard)
vmf_hard.fit(X)
Hier erfolgt die Auswertung anhand der Metriken von sklearn. Insbesondere führen wir die folgenden sechs Bewertungen durch.
Einzelheiten zu jedem Bewertungsindex finden Sie in diesem Artikel. *Herstellung
Hier ist das Bewertungsergebnis.
In allen Ergebnissen ist ersichtlich, dass der Index des Kugelclusters K-Mitteln überlegen ist. Insbesondere wurde K Means auf eine Hypersphäre ausgedehnt. Sphärische KMeans und movMF-soft und movMF-hard unter Verwendung der von Mies Fisher-Verteilung zeigten hervorragende Ergebnisse.
Recommended Posts