K-Mittel ist definiert auch nur für euklidischen Räumen, bei denen der Abstand zwischen dem Vektor A und B als
|| A - B || = sqrt(SUM_i (A_i - B_i)^2)
so ausgedrückt wird, wenn Sie bestimmte Funktion zu „Gewicht“ wollen, würden Sie so etwas wie
mögen
was dazu führen würde, dass ich sehr viel wichtiger bin (wenn w_i> 1) - also würde man eine größere Strafe bekommen, wenn man einen anderen Wert hat (in Bezug auf Beutel Wörter/Satz Wörter - es bedeutet einfach, wenn zwei Dokumente haben unterschiedliche Menge dieses bestimmten Wortes, sie sind assum anders als die, die sich in einer anderen Wortgruppe unterscheiden).
Also, wie können Sie es erzwingen? Nun, grundlegende Mathematik ist alles was Sie brauchen! Sie können ganz einfach, dass
|| A - B ||_W = || sqrt(W)*A - sqrt(W)*B ||
mit anderen Worten sehen - Sie TFIDF Transformator nehmen (oder was auch immer Sie Ihren Text auf konstante Größe Vektor verwenden, um Karte), prüfen Sie, welche Funktionen für die Worte verantwortlich sind Sie interessiert sind, können Sie Erstelle einen Vektor von Einsen (mit einer Größe, die der Anzahl der Dimensionen entspricht) und erhöhe die Werte für die Wörter, die dir wichtig sind (zum Beispiel 10x) und nimm die Quadratwurzel dieser Sache. Dann verarbeiten Sie einfach alle Ihre Daten vor, indem Sie mit diesem Gewichtsvektor "punktweise" mit Rundsendung (np.multiply
) multiplizieren. Das ist alles was du brauchst, jetzt werden deine Worte in dieser genau definierten Weise wichtiger. Aus mathematischer Perspektive führt dies die Mahalanobis-Distanz anstelle der Euklidischen ein, wobei die Kovarianzmatrix gleich w * I ist (also - Diagonal-Gaussian, das als Generator Ihrer Norm verwendet wird).
Wenn Sie sagen, zusätzliches Gewicht, wie meinst du? k-means verwendet eine Entfernungsberechnung, um herauszufinden, wie "ähnlich" alle Merkmale zweier Instanzen sind. Willst du damit sagen, dass die "Nähe" das Aussehen bestimmter Wörter überladen soll? Umgekehrt bedeutet das, dass Sie wollen, dass sie die "Distanz" zwischen Tweets überladen, wenn eines diese Wörter hat und das andere nicht? Sind Ihre Daten in irgendeiner Weise normalisiert? – flyingmeatball
@flyingmeatball zum Beispiel Ich möchte als Feature "@sasha" nehmen, weil es ein gemeinsames Wort im Korpus ist (erscheint in mehr als 30% der Tweets) und weil es ein Benutzername ist (es ist ein Token, das mit "@" beginnt). Aber ich möchte auch keine Features verpassen, die keine Benutzernamen sind. Die Pipeline für meine Daten ist CountVectorizer -> K-Means – fuxes
Ich habe zufällig mit SGDClassifier in etwas wie das laufen. Es hat einen Parameter sample_weight, der seiner Fit-Methode zugewiesen wurde. Vielleicht hat K-means so etwas. Werfen Sie einen Blick: http://scikit-learn.org/stable/auto_examples/linear_model/plot_sgd_weighted_samples.html#example-linear-model-plot-sgd-weighted-samples-py – Shovalt