Cet article a extrait le degré de dispersion des informations de direction sur l'hypersphère. Dans l'exemple de cluster de sphères utilisé à ce moment-là, un exemple utilisant vmFD est préparé. Dans l'un d'eux, tf-idf est utilisé pour vectoriser des mots dans un document, et KMeans est utilisé pour les catégoriser en fonction du centre de gravité du vecteur. Dans cet article, nous utiliserons l'exemple du cluster de sphères pour effectuer et comparer le clustering de documents avec les KMeans généraux et movMFD. Cliquez ici pour des programmes spécifiques. Dans cet article, je ne présenterai que les principaux points.
Tout d'abord, je présenterai les données à utiliser. Comprend des scripts de journaux et 4 types d'informations sur les catégories provenant des ensembles de données externes de sklearn Chargez le texte.
###############################################################################
# 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)
Les données de phrase sont acquises comme ceci.
Cette phrase est convertie en vecteurs avec TfidfVectorizer.
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)
Le résultat est une liste de 3387 lignes x 43256 colonnes. Si vous connaissez tfidf, vous n'avez pas besoin de l'expliquer, mais cela signifie qu'il y a 3387 phrases et 43256 mots uniques.
Ici, si nécessaire, Execute LSA. Si use_LSA = True, les données du document seront compressées dimensionnellement à n_components = 500 à l'avance. La valeur par défaut est 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()
Ceci termine la préparation des données.
Ensuite, le regroupement de documents est effectué de quatre manières: K-means, K-Means sphériques, soft-movMF et 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)
Ici, l'évaluation est effectuée à l'aide des métriques de sklearn. Plus précisément, nous effectuons les six évaluations suivantes.
Pour plus de détails sur chaque index d'évaluation, reportez-vous à cet article. *fabrication
Voici le résultat de l'évaluation.
Dans tous les résultats, on peut voir que l'indice d'amas de sphères est supérieur à K Moyens. En particulier, K Means a été étendu à une hypersphère. Les KMeans sphériques et movMF-soft et movMF-hard utilisant la distribution de von Mies Fisher ont montré d'excellents résultats.
Recommended Posts