Die Implementierungsbasis finden Sie im Folgenden. K-means++ K-means Obwohl es auf Englisch ist, denke ich, dass es mehr Informationen enthält und strenger ist als die japanische Seite.
Es ist eine sehr nützliche Bibliothek, mit der Sie alle Arten von maschinellem Lernen mit Python durchführen können. Bitte lesen Sie diesen Bereich.
scikit-learn Einführung von scikit-learn
Nehmen Sie als Eingabedatei eine Textdatei an, die durch einen Zeilenumbruch für jede Zeichenfolge getrennt ist. Geben Sie dazu die Eingabe- / Ausgabedatei als Argument wie python clustering.py input.txt output.txt an. Das Ergebnis wird unterwegs mit print () angezeigt. Die Daten nach dem Clustering werden in die Ausgabedatei ausgegeben. Bitte bereiten Sie eine geeignete Textdatei vor und probieren Sie sie aus.
Der gesamte Code ist unten.
Es wird nur die Methode angegeben, mit der der Cluster erstellt wird.
clustering.py
def make_cluster(self):
"""Erstellen Sie einen Cluster und geben Sie ihn zurück
"""
#Generieren Sie eine Liste der zu verarbeitenden Zeichenfolgen
texts = self._read_from_file()
print("texts are %(texts)s" %locals() )
# TF-IDF-Vektor generieren
vectorizer = TfidfVectorizer(
max_df=self.max_df,
max_features=self.max_features,
stop_words='english'
)
X = vectorizer.fit_transform(texts)
print("X values are %(X)s" %locals() )
#Generieren und gruppieren Sie KMeans-Instanzen
#Stellen Sie sicher, dass die Parameter entsprechend der Menge und den Eigenschaften der Daten geeignet sind.
km = MiniBatchKMeans(
n_clusters=self.num_clusters,
init='k-means++', batch_size=1000,
n_init=10, max_no_improvement=10,
verbose=True
)
km.fit(X)
labels = km.labels_
#Berechnen Sie den Cluster, zu dem er gehört, und seine Entfernung
transformed = km.transform(X)
dists = np.zeros(labels.shape)
for i in range(len(labels)):
dists[i] = transformed[i, labels[i]]
clusters = []
for i in range(self.num_clusters):
cluster = []
ii = np.where(labels==i)[0]
dd = dists[ii]
di = np.vstack([dd,ii]).transpose().tolist()
di.sort()
for d, j in di:
cluster.append(texts[int(j)])
clusters.append(cluster)
#Gibt den generierten Cluster zurück
return clusters
Mit scikit-learn können Sie sehen, dass Clustering mit extrem einfachem Code durchgeführt werden kann. Überall wird eine Vielzahl von Parametern verwendet. Bei Verwendung einer tatsächlichen Anwendung ist es erforderlich, diese gemäß den Eigenschaften der Daten abzustimmen.
Recommended Posts