Definitive Guide to Hierarchical Clustering with Python and Scikit-Learn PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Endgültiger Leitfaden für hierarchisches Clustering mit Python und Scikit-Learn

Einleitung

In diesem Leitfaden konzentrieren wir uns auf die Implementierung der Hierarchischer Clustering-Algorithmus mit Scikit-Learn um ein Marketingproblem zu lösen.

Nach dem Lesen des Leitfadens werden Sie verstehen:

  • Wann man hierarchisches Clustering anwenden sollte
  • So visualisieren Sie das Dataset, um zu verstehen, ob es für das Clustering geeignet ist
  • Wie Features vorverarbeitet und neue Features basierend auf dem Datensatz entwickelt werden
  • So reduzieren Sie die Dimensionalität des Datensatzes mit PCA
  • Wie man ein Dendrogramm verwendet und liest, um Gruppen zu trennen
  • Welche unterschiedlichen Verknüpfungsmethoden und Abstandsmetriken werden auf Dendrogramme und Clustering-Algorithmen angewendet?
  • Welche agglomerativen und divisiven Clustering-Strategien gibt es und wie funktionieren sie?
  • So implementieren Sie das agglomerative hierarchische Clustering mit Scikit-Learn
  • Was sind die häufigsten Probleme beim Umgang mit Clustering-Algorithmen und wie lassen sie sich lösen?

Hinweis: Sie können das Notebook herunterladen, das den gesamten Code in diesem Handbuch enthält hier.

Motivation

Stellen Sie sich ein Szenario vor, in dem Sie Teil eines Data-Science-Teams sind, das mit der Marketingabteilung zusammenarbeitet. Das Marketing sammelt seit einiger Zeit Einkaufsdaten von Kunden und möchte anhand der gesammelten Daten verstehen, ob es welche gibt Ähnlichkeiten zwischen Kunden. Diese Ähnlichkeiten unterteilen Kunden in Gruppen und Kundengruppen helfen bei der Ausrichtung von Kampagnen, Werbeaktionen, Konvertierungen und dem Aufbau besserer Kundenbeziehungen.

Gibt es eine Möglichkeit, mit der Sie feststellen können, welche Kunden ähnlich sind? Wie viele von ihnen gehören derselben Gruppe an? Und wie viele verschiedene Gruppen gibt es?

Eine Möglichkeit, diese Fragen zu beantworten, ist die Verwendung von a Clustering Algorithmus, wie z. B. K-Means, DBSCAN, Hierarchical Clustering usw. Im Allgemeinen finden Clustering-Algorithmen Ähnlichkeiten zwischen Datenpunkten und gruppieren sie.

In diesem Fall sind unsere Marketingdaten ziemlich klein. Wir haben Informationen über nur 200 Kunden. In Anbetracht des Marketingteams ist es wichtig, dass wir ihnen klar erklären können, wie die Entscheidungen basierend auf der Anzahl der Cluster getroffen wurden, und ihnen daher erklären, wie der Algorithmus tatsächlich funktioniert.

Da unsere Daten klein sind, ist die Erklärbarkeit ein wichtiger Faktor, können wir nutzen Hierarchisches Clustering um dieses Problem zu lösen. Dieser Vorgang wird auch als bezeichnet Hierarchische Clusteranalyse (HCA).

Einer der Vorteile von HCA besteht darin, dass es interpretierbar ist und bei kleinen Datensätzen gut funktioniert.

Eine andere Sache, die in diesem Szenario berücksichtigt werden muss, ist, dass HCA ein ist unbeaufsichtigt Algorithmus. Beim Gruppieren von Daten haben wir keine Möglichkeit zu überprüfen, ob wir die Zugehörigkeit eines Benutzers zu einer bestimmten Gruppe korrekt identifizieren (wir kennen die Gruppen nicht). Es gibt keine Labels, mit denen wir unsere Ergebnisse vergleichen können. Wenn wir die Gruppen richtig identifiziert haben, wird dies später täglich von der Marketingabteilung bestätigt (gemessen an Metriken wie ROI, Konversionsraten usw.).

Jetzt, da wir das Problem verstanden haben, das wir zu lösen versuchen, und wie wir es lösen können, können wir anfangen, einen Blick auf unsere Daten zu werfen!

Kurze explorative Datenanalyse

Hinweis: Sie können den in diesem Leitfaden verwendeten Datensatz herunterladen hier.

Beachten Sie nach dem Herunterladen des Datensatzes, dass es sich um eine CSV (kommagetrennte Werte) Datei aufgerufen shopping-data.csv. Um das Erkunden und Bearbeiten der Daten zu vereinfachen, laden wir sie in eine DataFrame mit Pandas:

import pandas as pd


path_to_file = 'home/projects/datasets/shopping-data.csv'
customer_data = pd.read_csv(path_to_file)

Das Marketing sagte, es habe 200 Kundendatensätze gesammelt. Wir können überprüfen, ob die heruntergeladenen Daten mit 200 Zeilen vollständig sind, indem wir die verwenden shape Attribut. Es wird uns sagen, wie viele Zeilen bzw. Spalten wir haben:

customer_data.shape

Das führt zu:

(200, 5)

Groß! Unsere Daten sind mit 200 Zeilen vollständig (Kundendatensätze) und wir haben auch 5 Spalten (Merkmale). Um zu sehen, welche Merkmale die Marketingabteilung von Kunden gesammelt hat, können wir Spaltennamen mit sehen columns Attribut. Führen Sie dazu Folgendes aus:

customer_data.columns

Das obige Skript gibt Folgendes zurück:

Index(['CustomerID', 'Genre', 'Age', 'Annual Income (k$)',
       'Spending Score (1-100)'],
      dtype='object')

Hier sehen wir, dass Marketing a erzeugt hat CustomerID, sammelte die Genre, Age, Annual Income (in Tausend Dollar) und a Spending Score von 1 bis 100 für jeden der 200 Kunden. Als sie um Klarstellung gebeten wurden, sagten sie, dass die Werte in der Spending Score Spalte geben auf einer Skala von 1 bis 100 an, wie oft eine Person Geld in einem Einkaufszentrum ausgibt. Mit anderen Worten, wenn ein Kunde eine Punktzahl von 0 hat, gibt diese Person nie Geld aus, und wenn die Punktzahl 100 ist, haben wir gerade das entdeckt höchster Spender.

Werfen wir einen kurzen Blick auf die Verteilung dieser Punktzahl, um die Ausgabegewohnheiten der Benutzer in unserem Datensatz zu untersuchen. Da sind die Pandas hist() Methode hilft:

customer_data['Spending Score (1-100)'].hist()

img

Wenn wir uns das Histogramm ansehen, sehen wir, dass mehr als 35 Kunden Punkte dazwischen haben 40 und 60, dann haben weniger als 25 Punkte dazwischen 70 und 80. So sind die meisten unserer Kunden ausgeglichene Ausgaben, gefolgt von mäßigen bis hohen Ausgaben. Wir können auch sehen, dass es eine Linie danach gibt 0, links von der Verteilung, und eine weitere Zeile vor 100, rechts von der Verteilung. Diese Leerzeichen bedeuten wahrscheinlich, dass die Verteilung keine Nicht-Spender enthält, die eine Punktzahl von haben würden 0, und dass es auch keine Vielausgebenden mit einer Punktzahl von gibt 100.

Um zu überprüfen, ob das stimmt, können wir uns die Minimal- und Maximalwerte der Verteilung ansehen. Diese Werte können leicht als Teil der deskriptiven Statistik gefunden werden, sodass wir die verwenden können describe() Methode, um ein Verständnis für andere Verteilungen numerischer Werte zu erhalten:


customer_data.describe().transpose()

Dadurch erhalten wir eine Tabelle, aus der wir Verteilungen anderer Werte unseres Datensatzes ablesen können:

 						count 	mean 	std 		min 	25% 	50% 	75% 	max
CustomerID 				200.0 	100.50 	57.879185 	1.0 	50.75 	100.5 	150.25 	200.0
Age 					200.0 	38.85 	13.969007 	18.0 	28.75 	36.0 	49.00 	70.0
Annual Income (k$) 		200.0 	60.56 	26.264721 	15.0 	41.50 	61.5 	78.00 	137.0
Spending Score (1-100) 	200.0 	50.20 	25.823522 	1.0 	34.75 	50.0 	73.00 	99.0

Unsere Hypothese wird bestätigt. Das min Wert der Spending Score is 1 und das Maximum ist 99. Also haben wir nicht 0 or 100 Spender punkten. Schauen wir uns dann die anderen Spalten der Transponierten an describe Tisch. Beim Betrachten der mean und std Spalten, wir können das für sehen Age mean is 38.85 und dem std etwa 13.97. Das gleiche passiert für Annual Income, Mit mean of 60.56 und std 26.26Und für Spending Score mit mean of 50 und std of 25.82. Für alle Funktionen, die mean weit von der Standardabweichung entfernt ist, die anzeigt Unsere Daten weisen eine hohe Variabilität auf.

Um besser zu verstehen, wie unsere Daten variieren, lassen Sie uns die grafisch darstellen Annual Income Verteilung:

customer_data['Annual Income (k$)'].hist()

Was uns geben wird:

img

Beachten Sie im Histogramm, dass sich die meisten unserer Daten, mehr als 35 Kunden, in der Nähe der Zahl konzentrieren 60, auf unserem mean, in der horizontalen Achse. Aber was passiert, wenn wir uns dem Ende der Verteilung nähern? Wenn wir vom Mittelwert von 60.560 $ nach links gehen, ist der nächste Wert, auf den wir stoßen werden, 34.300 $ – der Mittelwert (60.560 $) abzüglich der Standardabweichung (26.260 $). Wenn wir uns von unserer Datenverteilung weiter nach links bewegen, gilt eine ähnliche Regel: Wir subtrahieren die Standardabweichung (26.260 $) vom aktuellen Wert (34.300 $). Daher werden wir auf einen Wert von 8.040 $ stoßen. Beachten Sie, wie unsere Daten schnell von 60 $ auf 8 $ anstiegen. Es „springt“ jedes Mal um 26.260 US-Dollar – es gibt große Schwankungen, und deshalb haben wir eine so hohe Variabilität.

img

Die Variabilität und die Größe der Daten sind bei der Clustering-Analyse wichtig, da Abstandsmessungen der meisten Clustering-Algorithmen empfindlich auf Datengrößen reagieren. Der Größenunterschied kann die Clustering-Ergebnisse verändern, indem ein Punkt näher oder weiter entfernt von einem anderen erscheint, als er tatsächlich ist, wodurch die tatsächliche Gruppierung von Daten verzerrt wird.

Bisher haben wir die Form unserer Daten, einige ihrer Verteilungen und deskriptive Statistiken gesehen. Mit Pandas können wir auch unsere Datentypen auflisten und sehen, ob alle unsere 200 Zeilen gefüllt sind oder welche haben null Werte:

customer_data.info()

Das führt zu:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 200 entries, 0 to 199
Data columns (total 5 columns):
 #   Column                  Non-Null Count  Dtype 
---  ------                  --------------  ----- 
 0   CustomerID              200 non-null    int64 
 1   Genre                   200 non-null    object
 2   Age                     200 non-null    int64 
 3   Annual Income (k$)      200 non-null    int64 
 4   Spending Score (1-100)  200 non-null    int64 
dtypes: int64(4), object(1)
memory usage: 7.9+ KB

Hier können wir sehen, dass es keine gibt null Werte in den Daten und dass wir nur eine kategoriale Spalte haben – Genre. In diesem Stadium ist es wichtig, dass wir im Hinterkopf behalten, welche Funktionen interessant erscheinen, um sie dem Clustering-Modell hinzuzufügen. Wenn wir unserem Modell die Spalte „Genre“ hinzufügen möchten, müssen wir ihre Werte von transformieren kategorisch zu numerisch.

Mal sehen wie Genre wird ausgefüllt, indem wir einen kurzen Blick auf die ersten 5 Werte unserer Daten werfen:

customer_data.head() 

Das führt zu:

    CustomerID 	Genre 	Age 	Annual Income (k$) 	Spending Score (1-100)
0 	1 			Male 	19 		15 					39
1 	2 			Male 	21 		15 					81
2 	3 			Female 	20 		16 					6
3 	4 			Female 	23 		16 					77
4 	5 			Female 	31 		17 					40

Es scheint, dass es nur hat Female und Male Kategorien. Wir können uns dessen sicher sein, wenn wir einen Blick auf seine einzigartigen Werte mit werfen unique:

customer_data['Genre'].unique()

Dies bestätigt unsere Vermutung:

array(['Male', 'Female'], dtype=object)

Bisher wissen wir, dass wir nur zwei Genres haben, wenn wir vorhaben, diese Funktion auf unserem Modell zu verwenden, Male umgewandelt werden könnte 0 und Female zu 1. Es ist auch wichtig, das Verhältnis zwischen den Genres zu überprüfen, um zu sehen, ob sie ausgewogen sind. Das können wir mit value_counts() Methode und ihre Argumentation normalize=True um den Prozentsatz zwischen anzuzeigen Male und Female:

customer_data['Genre'].value_counts(normalize=True)

Dies gibt aus:

Female    0.56
Male      0.44
Name: Genre, dtype: float64

Wir haben 56 % Frauen im Datensatz und 44 % Männer. Der Unterschied zwischen ihnen beträgt nur 16 %, und unsere Daten sind nicht 50/50, sind es aber ausgeglichen genug keinen Ärger zu machen. Wenn die Ergebnisse 70/30, 60/40 wären, dann wäre es möglicherweise notwendig gewesen, entweder mehr Daten zu sammeln oder eine Art Datenerweiterungstechnik anzuwenden, um dieses Verhältnis ausgewogener zu machen.

Bisher alle Features aber Age, wurden kurz untersucht. In welchen Belangen Age, ist es normalerweise interessant, sie in Bins zu unterteilen, um Kunden nach Altersgruppen zu segmentieren. Wenn wir das tun, müssten wir die Alterskategorien in eine Zahl umwandeln, bevor wir sie unserem Modell hinzufügen. Anstatt die Kategorie 15–20 Jahre zu verwenden, würden wir auf diese Weise zählen, wie viele Kunden es in der gibt 15-20 Kategorie, und das wäre eine Nummer in einer neuen Spalte namens 15-20.

Hinweis: In diesem Leitfaden präsentieren wir nur eine kurze explorative Datenanalyse. Aber Sie können noch weiter gehen und Sie sollten noch weiter gehen. Sie können sehen, ob es Einkommensunterschiede und Bewertungsunterschiede je nach Genre und Alter gibt. Dies bereichert nicht nur die Analyse, sondern führt auch zu besseren Modellergebnissen. Um tiefer in die explorative Datenanalyse einzusteigen, schauen Sie sich die an EDA-Kapitel im „Praktische Hauspreisvorhersage – Maschinelles Lernen in Python" Geführtes Projekt.

Nach Vermutungen darüber, was mit beiden kategorisch – oder kategorisch zu sein – getan werden könnte Genre und Age Spalten, wenden wir an, was besprochen wurde.

Kodierungsvariablen und Feature-Engineering

Beginnen wir mit der Aufteilung der Age in Gruppen, die in 10 variieren, so dass wir 20-30, 30-40, 40-50 und so weiter haben. Da unser jüngster Kunde 15 Jahre alt ist, können wir mit 15 beginnen und mit 70 enden, was dem Alter des ältesten Kunden in den Daten entspricht. Beginnend bei 15 und endend bei 70 hätten wir 15-20, 20-30, 30-40, 40-50, 50-60 und 60-70 Intervalle.

Gruppieren bzw Kasten Age Werte in diese Intervalle können wir die Pandas verwenden cut() Methode, um sie in Behälter zu schneiden und die Behälter dann einem neuen zuzuweisen Age Groups Säule:

intervals = [15, 20, 30, 40, 50, 60, 70]
col = customer_data['Age']
customer_data['Age Groups'] = pd.cut(x=col, bins=intervals)


customer_data['Age Groups'] 

Das führt zu:

0      (15, 20]
1      (20, 30]
2      (15, 20]
3      (20, 30]
4      (30, 40]
         ...   
195    (30, 40]
196    (40, 50]
197    (30, 40]
198    (30, 40]
199    (20, 30]
Name: Age Groups, Length: 200, dtype: category
Categories (6, interval[int64, right]): [(15, 20] < (20, 30] < (30, 40] < (40, 50] < (50, 60] < (60, 70]]

Beachten Sie, dass beim Betrachten der Spaltenwerte auch eine Zeile vorhanden ist, die angibt, dass wir 6 Kategorien haben, und alle klassierten Datenintervalle anzeigt. Auf diese Weise haben wir unsere zuvor numerischen Daten kategorisiert und eine neue erstellt Age Groups -Funktion

Und wie viele Kunden haben wir in jeder Kategorie? Wir können das schnell feststellen, indem wir die Spalte gruppieren und die Werte mit zählen groupby() und count():

customer_data.groupby('Age Groups')['Age Groups'].count()

Das führt zu:

Age Groups
(15, 20]    17
(20, 30]    45
(30, 40]    60
(40, 50]    38
(50, 60]    23
(60, 70]    17
Name: Age Groups, dtype: int64

Es ist leicht zu erkennen, dass die meisten Kunden zwischen 30 und 40 Jahre alt sind, gefolgt von Kunden zwischen 20 und 30 und dann Kunden zwischen 40 und 50. Dies ist auch eine gute Information für die Marketingabteilung.

Im Moment haben wir zwei kategoriale Variablen, Age und Genre, die wir in Zahlen umwandeln müssen, um sie in unserem Modell verwenden zu können. Es gibt viele verschiedene Möglichkeiten, diese Transformation durchzuführen – wir werden die Pandas verwenden get_dummies() Methode, die für jedes Intervall und Genre eine neue Spalte erstellt und ihre Werte dann mit 0 und 1 füllt – diese Art von Operation wird aufgerufen One-Hot-Codierung. Mal sehen, wie es aussieht:


customer_data_oh = pd.get_dummies(customer_data)

customer_data_oh 

Dies gibt uns eine Vorschau auf die resultierende Tabelle:

img

Anhand der Ausgabe ist leicht zu erkennen, dass die Spalte Genre wurde in Spalten aufgeteilt – Genre_Female und Genre_Male. Wenn der Kunde weiblich ist, Genre_Female entspricht 1, und wenn der Kunde männlich ist, ist es gleich 0.

Auch die Age Groups Spalte wurde in 6 Spalten aufgeteilt, eine für jedes Intervall, wie z Age Groups_(15, 20], Age Groups_(20, 30], usw. So wie Genre, wenn der Kunde 18 Jahre alt ist, die Age Groups_(15, 20] Wert ist 1 und der Wert aller anderen Spalten ist 0.

Das haben Vorteile für der One-Hot-Codierung ist die Einfachheit bei der Darstellung der Spaltenwerte, es ist einfach zu verstehen, was passiert – während die Nachteil ist, dass wir jetzt 8 zusätzliche Spalten erstellt haben, um die Spalten, die wir bereits hatten, zusammenzufassen.

Warnung: Wenn Sie einen Datensatz haben, in dem die Anzahl der One-Hot-codierten Spalten die Anzahl der Zeilen übersteigt, ist es am besten, eine andere Codierungsmethode zu verwenden, um Probleme mit der Datendimensionalität zu vermeiden.

Die One-Hot-Codierung fügt unseren Daten auch Nullen hinzu, wodurch sie spärlicher werden, was ein Problem für einige Algorithmen sein kann, die empfindlich auf Datensparsity reagieren.

Für unsere Clustering-Anforderungen scheint die One-Hot-Codierung zu funktionieren. Aber wir können die Daten grafisch darstellen, um zu sehen, ob es wirklich verschiedene Gruppen gibt, die wir gruppieren können.

Grundlegendes Plotten und Dimensionsreduktion

Unser Datensatz hat 11 Spalten, und es gibt einige Möglichkeiten, wie wir diese Daten visualisieren können. Die erste besteht darin, es in 10 Dimensionen zu zeichnen (viel Glück damit). Zehn, weil die Customer_ID Spalte wird nicht berücksichtigt. Die zweite besteht darin, unsere anfänglichen numerischen Merkmale zu zeichnen, und die dritte besteht darin, unsere 10 Merkmale in 2 umzuwandeln – also eine Dimensionsreduktion durchzuführen.

Plotten jedes Datenpaares

Da das Plotten von 10 Dimensionen ein bisschen unmöglich ist, entscheiden wir uns für den zweiten Ansatz – wir werden unsere anfänglichen Features plotten. Wir können zwei davon für unsere Clustering-Analyse auswählen. Eine Möglichkeit, alle unsere Datenpaare kombiniert zu sehen, ist mit einem Seaborn pairplot():

import seaborn as sns


customer_data = customer_data.drop('CustomerID', axis=1)

sns.pairplot(customer_data)

Welches zeigt:

img

Auf einen Blick können wir die Streudiagramme erkennen, die Gruppen von Daten zu enthalten scheinen. Eines, das interessant erscheint, ist das Streudiagramm, das kombiniert wird Annual Income und Spending Score. Beachten Sie, dass es keine klare Trennung zwischen anderen variablen Streudiagrammen gibt. Wir können höchstens sagen, dass es zwei unterschiedliche Konzentrationen von Punkten in der gibt Spending Score vs Age Streudiagramm.

Beide Streudiagramme bestehend aus Annual Income und Spending Score sind im Wesentlichen gleich. Wir können es zweimal sehen, weil die x- und y-Achse vertauscht wurden. Wenn wir uns eine von ihnen ansehen, können wir sehen, was fünf verschiedene Gruppen zu sein scheinen. Lassen Sie uns nur diese beiden Funktionen mit einem Seaborn darstellen scatterplot() um genauer hinzusehen:

sns.scatterplot(x=customer_data['Annual Income (k$)'],
                y=customer_data['Spending Score (1-100)'])

img

Bei näherer Betrachtung können wir definitiv 5 verschiedene Datengruppen unterscheiden. Es scheint, dass unsere Kunden basierend darauf gruppiert werden können, wie viel sie in einem Jahr verdienen und wie viel sie ausgeben. Dies ist ein weiterer relevanter Punkt in unserer Analyse. Es ist wichtig, dass wir nur zwei Merkmale berücksichtigen, um unsere Kunden zu gruppieren. Alle anderen Informationen, die wir über sie haben, gehen nicht in die Gleichung ein. Das gibt der Analyse Aussagekraft – wenn wir wissen, wie viel ein Kunde verdient und ausgibt, können wir leicht die Ähnlichkeiten finden, die wir brauchen.

img

Das ist großartig! Bisher haben wir bereits zwei Variablen, um unser Modell zu erstellen. Abgesehen davon, was dies darstellt, macht es das Modell auch einfacher, sparsamer und besser erklärbar.

Sehen Sie sich unseren praxisnahen, praktischen Leitfaden zum Erlernen von Git an, mit Best Practices, branchenweit akzeptierten Standards und einem mitgelieferten Spickzettel. Hören Sie auf, Git-Befehle zu googeln und tatsächlich in Verbindung, um es!

Hinweis: Data Science favorisiert in der Regel möglichst einfache Ansätze. Nicht nur, weil es für das Unternehmen einfacher zu erklären ist, sondern auch, weil es direkter ist – mit 2 Funktionen und einem erklärbaren Modell ist klar, was das Modell tut und wie es funktioniert.

Plotten von Daten nach Verwendung von PCA

Es scheint, dass unser zweiter Ansatz wahrscheinlich der beste ist, aber werfen wir auch einen Blick auf unseren dritten Ansatz. Es kann nützlich sein, wenn wir die Daten nicht darstellen können, weil sie zu viele Dimensionen haben, oder wenn es keine Datenkonzentrationen oder klare Trennung in Gruppen gibt. Wenn diese Situationen auftreten, wird empfohlen, zu versuchen, die Datendimensionen mit einer aufgerufenen Methode zu reduzieren Hauptkomponentenanalyse (PCA).

Hinweis: Die meisten Menschen verwenden PCA zur Dimensionsreduktion vor der Visualisierung. Es gibt andere Methoden, die bei der Datenvisualisierung vor dem Clustering helfen, wie z Dichtebasiertes räumliches Clustering von Anwendungen mit Rauschen (DBSCAN) und Selbstorganisierende Karten (SOM) Clusterung. Beides sind Clustering-Algorithmen, können aber auch zur Datenvisualisierung verwendet werden. Da die Clusteranalyse keinen goldenen Standard hat, ist es wichtig, verschiedene Visualisierungen und verschiedene Algorithmen zu vergleichen.

PCA wird die Dimensionen unserer Daten reduzieren und gleichzeitig versuchen, so viele Informationen wie möglich zu erhalten. Lassen Sie uns zunächst eine Vorstellung davon bekommen, wie PCA funktioniert, und dann können wir auswählen, auf wie viele Datendimensionen wir unsere Daten reduzieren.

Für jedes Merkmalspaar sieht PCA, ob die größeren Werte einer Variablen den größeren Werten der anderen Variablen entsprechen, und macht dasselbe für die kleineren Werte. Es berechnet also im Wesentlichen, wie stark sich die Merkmalswerte voneinander unterscheiden – wir nennen das ihre Kovarianz. Diese Ergebnisse werden dann in einer Matrix organisiert, wodurch a erhalten wird Kovarianzmatrix.

Nach Erhalt der Kovarianzmatrix versucht PCA, eine lineare Kombination von Merkmalen zu finden, die sie am besten erklärt – sie passt lineare Modelle an, bis sie diejenige identifiziert, die sie erklärt maximal Betrag der Abweichung.

Note: PCA ist eine lineare Transformation, und die Linearität ist empfindlich gegenüber der Datenskala. Daher funktioniert PCA am besten, wenn alle Datenwerte auf derselben Skala liegen. Dies kann durch Subtrahieren der Spalte erfolgen bedeuten aus seinen Werten und Division des Ergebnisses durch seine Standardabweichung. Das wird .. genannt Datenstandardisierung. Stellen Sie vor der Verwendung von PCA sicher, dass die Daten skaliert sind! Wenn Sie nicht sicher sind, wie, lesen Sie unsere „Funktionsskalierungsdaten mit Scikit-Learn für maschinelles Lernen in Python“!

Mit der gefundenen besten Linie (Linearkombination) erhält PCA die Richtungen seiner Achsen, genannt Eigenvektoren, und seine linearen Koeffizienten, die Eigenwerte. Die Kombination der Eigenvektoren und Eigenwerte – oder Achsenrichtungen und Koeffizienten – sind die Hauptkomponenten von PCA. Und dann können wir unsere Anzahl an Dimensionen basierend auf der erklärten Varianz jedes Merkmals auswählen, indem wir verstehen, welche Hauptkomponenten wir basierend auf der Varianz, die sie erklären, behalten oder verwerfen möchten.

Nachdem die Hauptkomponenten erhalten wurden, verwendet PCA die Eigenvektoren, um einen Vektor von Merkmalen zu bilden, die die Daten von den ursprünglichen Achsen zu denjenigen umorientieren, die durch die Hauptkomponenten repräsentiert werden – so werden die Datendimensionen reduziert.

Hinweis: Ein wichtiges Detail, das hier zu berücksichtigen ist, ist, dass PCA aufgrund seiner linearen Natur den größten Teil der erklärten Varianz in den ersten Hauptkomponenten konzentriert. Wenn wir uns also die erklärte Varianz ansehen, reichen normalerweise unsere ersten beiden Komponenten aus. Aber das könnte in manchen Fällen irreführend sein – versuchen Sie also, beim Clustering verschiedene Diagramme und Algorithmen zu vergleichen, um zu sehen, ob sie ähnliche Ergebnisse liefern.

Vor der Anwendung von PCA müssen wir zwischen den wählen Age Spalte oder die Age Groups Spalten in unseren zuvor One-Hot-codierten Daten. Da beide Spalten dieselben Informationen darstellen, wirkt sich eine zweimalige Einführung auf unsere Datenvarianz aus. Wenn die Age Groups Spalte ausgewählt ist, entfernen Sie einfach die Age Spalte mit den Pandas drop() -Methode und weisen Sie sie der neu zu customer_data_oh Variable:

customer_data_oh = customer_data_oh.drop(['Age'], axis=1)
customer_data_oh.shape 

Jetzt haben unsere Daten 10 Spalten, was bedeutet, dass wir eine Hauptkomponente pro Spalte erhalten und auswählen können, wie viele davon wir verwenden möchten, indem wir messen, inwieweit die Einführung einer neuen Dimension mehr von unserer Datenvarianz erklärt.

Machen wir das mit Scikit-Learn PCA. Wir berechnen die erklärte Varianz jeder Dimension, gegeben durch explained_variance_ratio_ , und betrachten Sie dann ihre kumulierte Summe mit cumsum() :

from sklearn.decomposition import PCA

pca = PCA(n_components=10)
pca.fit_transform(customer_data_oh)
pca.explained_variance_ratio_.cumsum()

Unsere kumulativen erklärten Varianzen sind:

array([0.509337  , 0.99909504, 0.99946364, 0.99965506, 0.99977937,
       0.99986848, 0.99993716, 1.        , 1.        , 1.        ])

Wir können sehen, dass die erste Dimension 50 % der Daten erklärt, und wenn sie mit der zweiten Dimension kombiniert werden, erklären sie 99 %. Das bedeutet, dass die ersten 2 Dimensionen bereits 99% unserer Daten erklären. So können wir eine PCA mit 2 Komponenten anwenden, unsere Hauptkomponenten erhalten und sie plotten:

from sklearn.decomposition import PCA

pca = PCA(n_components=2)
pcs = pca.fit_transform(customer_data_oh)

pc1_values = pcs[:,0]
pc2_values = pcs[:,1]
sns.scatterplot(x=pc1_values, y=pc2_values)

img

Das Datendiagramm nach PCA ist dem Diagramm sehr ähnlich, das nur zwei Spalten der Daten ohne PCA verwendet. Beachten Sie, dass die Punkte, die Gruppen bilden, näher beieinander liegen und nach der PCA etwas konzentrierter sind als zuvor.

img

Visualisierung hierarchischer Strukturen mit Dendrogrammen

Bisher haben wir die Daten untersucht, One-Hot-codierte kategoriale Spalten, entschieden, welche Spalten für das Clustering geeignet sind, und die Datendimensionalität reduziert. Die Diagramme zeigen, dass wir 5 Cluster in unseren Daten haben, aber es gibt auch eine andere Möglichkeit, die Beziehungen zwischen unseren Punkten zu visualisieren und die Anzahl der Cluster zu bestimmen – durch Erstellen von a Dendrogramm (häufig als Dendogramm falsch geschrieben). dendro Mittel Baum in Latein.

Das Dendrogramm ist ein Ergebnis der Verknüpfung von Punkten in einem Datensatz. Es ist eine visuelle Darstellung des hierarchischen Clustering-Prozesses. Und wie funktioniert der hierarchische Clustering-Prozess? Nun… es kommt darauf an – wahrscheinlich eine Antwort, die Sie in Data Science schon oft gehört haben.

Hierarchisches Clustering verstehen

Wenn das Hierarchischer Clustering-Algorithmus (HCA) beginnt, die Punkte zu verbinden und Cluster zu finden, kann es zuerst Punkte in 2 große Gruppen aufteilen und dann jede dieser beiden Gruppen in kleinere 2 Gruppen aufteilen, mit insgesamt 4 Gruppen, was die ist spaltend und Top-down- Ansatz.

Alternativ kann es das Gegenteil tun – es kann sich alle Datenpunkte ansehen, 2 Punkte finden, die näher beieinander liegen, sie verknüpfen und dann andere Punkte finden, die diesen verknüpften Punkten am nächsten sind, und die beiden Gruppen weiter aufbauen von dem Prost. Welche ist die agglomerativ Ansatz, den wir entwickeln werden.

Schritte zur Durchführung von agglomerativem hierarchischem Clustering

Um den agglomerativen Ansatz noch deutlicher zu machen, gibt es Schritte der Agglomeratives hierarchisches Clustering (AHC) Algorithmus:

  1. Behandeln Sie zu Beginn jeden Datenpunkt als einen Cluster. Daher ist die Anzahl der Cluster am Anfang K – während K eine Ganzzahl ist, die die Anzahl der Datenpunkte darstellt.
  2. Bilden Sie einen Cluster, indem Sie die beiden nächstgelegenen Datenpunkte verbinden, was zu K-1-Clustern führt.
  3. Bilden Sie mehr Cluster, indem Sie die beiden nächsten Cluster verbinden, was zu K-2-Clustern führt.
  4. Wiederholen Sie die obigen drei Schritte, bis sich ein großer Cluster gebildet hat.

Note: Zur Vereinfachung sprechen wir in den Schritten 2 und 3 von „zwei am nächsten liegenden“ Datenpunkten. Es gibt jedoch noch mehr Möglichkeiten, Punkte zu verknüpfen, wie wir gleich sehen werden.

Wenn Sie die Schritte des ACH-Algorithmus umkehren und von 4 auf 1 gehen, wären das die Schritte zu *Divisive Hierarchical Clustering (DHC)*.

Beachten Sie, dass HCAs entweder spaltend und top-down oder agglomerativ und bottom-up sein können. Der Top-Down-DHC-Ansatz funktioniert am besten, wenn Sie weniger, aber größere Cluster haben, daher ist er rechenintensiver. Andererseits ist der Bottom-up-AHC-Ansatz geeignet, wenn Sie viele kleinere Cluster haben. Es ist rechnerisch einfacher, häufiger verwendet und verfügbarer.

Hinweis: Entweder von oben nach unten oder von unten nach oben, die Dendrogrammdarstellung des Clustering-Prozesses beginnt immer mit einer Teilung in zwei und endet damit, dass jeder einzelne Punkt diskriminiert wird, sobald seine zugrunde liegende Struktur ein binärer Baum ist.

Lassen Sie uns unser Kundendaten-Dendrogramm zeichnen, um die hierarchischen Beziehungen der Daten zu visualisieren. Diesmal verwenden wir die scipy Bibliothek zum Erstellen des Dendrogramms für unseren Datensatz:

import scipy.cluster.hierarchy as shc
import matplotlib.pyplot as plt

plt.figure(figsize=(10, 7))
plt.title("Customers Dendrogram")


selected_data = customer_data_oh.iloc[:, 1:3]
clusters = shc.linkage(selected_data, 
            method='ward', 
            metric="euclidean")
shc.dendrogram(Z=clusters)
plt.show()

Die Ausgabe des Skripts sieht so aus:

img

Im obigen Skript haben wir die Cluster und Untercluster mit unseren Punkten generiert, definiert, wie unsere Punkte verknüpft werden (durch Anwenden der ward -Methode) und wie man den Abstand zwischen Punkten misst (mit der euclidean metrisch).

Mit dem Plot des Dendrogramms können die beschriebenen Prozesse von DHC und AHC visualisiert werden. Um den Top-Down-Ansatz zu visualisieren, beginnen Sie am oberen Rand des Dendrogramms und gehen Sie nach unten, und machen Sie das Gegenteil, indem Sie nach unten beginnen und sich nach oben bewegen, um den Bottom-Up-Ansatz zu visualisieren.

Verknüpfungsmethoden

Es gibt viele andere Verknüpfungsmethoden. Wenn Sie mehr über ihre Funktionsweise verstehen, können Sie die für Ihre Bedürfnisse geeignete auswählen. Abgesehen davon wird jeder von ihnen bei der Anwendung unterschiedliche Ergebnisse liefern. Bei der Clustering-Analyse gibt es keine feste Regel. Wenn möglich, untersuchen Sie die Art des Problems, um zu sehen, welches am besten geeignet ist, testen Sie verschiedene Methoden und überprüfen Sie die Ergebnisse.

Einige der Verknüpfungsmethoden sind:

  • Einzelverbindung: auch bezeichnet als Nächster Nachbar (NN). Der Abstand zwischen Clustern wird durch den Abstand zwischen ihren nächsten Mitgliedern definiert.

img

  • Vollständige Verknüpfung: auch bezeichnet als Am weitesten entfernter Nachbar (FN), Am weitesten entfernter Punkt-Algorithmus, oder Voor Hees-Algorithmus. Der Abstand zwischen Clustern wird durch den Abstand zwischen ihren am weitesten entfernten Mitgliedern definiert. Dieses Verfahren ist rechenintensiv.

img

  • Durchschnittliche Verknüpfung: auch bekannt als UPGMA (Ungewichtete Paargruppenmethode mit arithmetischem Mittel). Der Prozentsatz der Punktzahl jedes Clusters wird in Bezug auf die Punktzahl der beiden Cluster berechnet, wenn sie zusammengeführt würden.

img

  • Gewichtete Verknüpfung: auch bekannt als WPGMA (Gewichtete Paargruppenmethode mit arithmetischem Mittel). Die einzelnen Punkte der beiden Cluster tragen zum aggregierten Abstand zwischen einem kleineren und einem größeren Cluster bei.
  • Schwerpunktverknüpfung: auch bezeichnet als UPGMC (Ungewichtete Paargruppenmethode mit Zentroiden). Für jeden Cluster wird ein Punkt berechnet, der durch den Mittelwert aller Punkte (Schwerpunkt) definiert ist, und der Abstand zwischen den Clustern ist der Abstand zwischen ihren jeweiligen Schwerpunkten.

img

  • Stationsverknüpfung: Auch bekannt als MISSQ (Minimale Erhöhung der Summe der Quadrate). Es gibt den Abstand zwischen zwei Clustern an, berechnet den Quadratsummenfehler (ESS) und wählt sukzessive die nächsten Cluster basierend auf dem kleineren ESS aus. Die Methode von Ward versucht, den Anstieg von ESS bei jedem Schritt zu minimieren. Daher Minimierung von Fehlern.

img

Entfernungsmetriken

Neben der Verknüpfung können wir auch einige der am häufigsten verwendeten Entfernungsmetriken angeben:

  • Euklidisch: auch bezeichnet als Pythagoräisch oder geradlinig Distanz. Es berechnet den Abstand zwischen zwei Punkten im Raum, indem es die Länge eines Liniensegments misst, das zwischen ihnen verläuft. Es verwendet den Satz des Pythagoras und der Entfernungswert ist das Ergebnis (C) der Gleichung:

$$
c^2 = a^2 + b^2
$$

  • Manhattan: auch genannt City-Block, Taxi Distanz. Es ist die Summe der absoluten Unterschiede zwischen den Maßen in allen Dimensionen von zwei Punkten. Wenn diese Dimensionen zwei sind, ist es analog dazu, wenn man einen Block nach rechts und dann nach links geht.

img

  • Minkowski: Es ist eine Verallgemeinerung sowohl der euklidischen als auch der Manhattan-Entfernung. Es ist eine Möglichkeit, Entfernungen basierend auf den absoluten Differenzen in der Größenordnung der Minkowski-Metrik zu berechnen p. Obwohl es für alle definiert ist p> 0, wird es selten für andere Werte als 1, 2 und ∞ (unendlich) verwendet. Die Minkowski-Distanz ist die gleiche wie die Manhattan-Distanz, wenn p = 1, und dasselbe wie die euklidische Distanz, wenn p = 2.

$$
Dlinks(X,Yrechts) = links(sum_{i=1}^n |x_i-y_i|^prechts)^{frac{1}{p}}
$$

img

  • Chebyshev: auch bekannt als Schachbrett Distanz. Es ist der Extremfall der Minkowski-Distanz. Wenn wir unendlich als Wert des Parameters verwenden p (p = ∞), erhalten wir eine Metrik, die die Entfernung als die maximale absolute Differenz zwischen Koordinaten definiert.
  • Kosinus: Es ist der Winkelkosinusabstand zwischen zwei Folgen von Punkten oder Vektoren. Die Kosinusähnlichkeit ist das Skalarprodukt der Vektoren dividiert durch das Produkt ihrer Längen.
  • Jaccard: Misst die Ähnlichkeit zwischen endlichen Mengen von Punkten. Sie ist definiert als die Gesamtzahl der Punkte (Kardinalität) in den gemeinsamen Punkten in jedem Satz (Schnittpunkt), dividiert durch die Gesamtzahl der Punkte (Kardinalität) der Gesamtpunkte beider Sätze (Vereinigung).
  • Jensen Shannon: basierend auf der Kullback-Leibler-Divergenz. Es berücksichtigt die Wahrscheinlichkeitsverteilungen der Punkte und misst die Ähnlichkeit zwischen diesen Verteilungen. Es ist eine beliebte Methode der Wahrscheinlichkeitstheorie und Statistik.

Wir haben ausgesucht Ward und Euklidisch für das Dendrogramm, weil sie die am häufigsten verwendete Methode und Metrik sind. Sie liefern normalerweise gute Ergebnisse, da Ward Punkte basierend auf der Minimierung der Fehler verknüpft und Euklidisch in niedrigeren Dimensionen gut funktioniert.

In diesem Beispiel arbeiten wir mit zwei Merkmalen (Spalten) der Marketingdaten und 200 Beobachtungen oder Zeilen. Da die Anzahl der Beobachtungen größer ist als die Anzahl der Merkmale (200 > 2), arbeiten wir in einem niedrigdimensionalen Raum.

Wenn die Anzahl der Funktionen (F) ist größer als die Anzahl der Beobachtungen (N) – meistens geschrieben als f >> Nbedeutet es, dass wir eine haben hochdimensionaler Raum.

Wenn wir mehr Attribute einbeziehen würden, also mehr als 200 Merkmale haben, würde die euklidische Distanz möglicherweise nicht sehr gut funktionieren, da sie Schwierigkeiten hätte, all die kleinen Distanzen in einem sehr großen Raum zu messen, der immer größer wird. Mit anderen Worten, der Ansatz der euklidischen Distanz hat Schwierigkeiten, mit den Daten zu arbeiten Sparsamkeit. Dies ist ein Problem, das aufgerufen wird der Fluch der Dimensionalität. Die Abstandswerte würden so klein werden, als würden sie im größeren Raum „verdünnt“, verzerrt, bis sie 0 werden.

Hinweis: Wenn Sie jemals auf einen Datensatz mit f >> p, werden Sie wahrscheinlich andere Entfernungsmetriken verwenden, z Mahalanobis Distanz. Alternativ können Sie die Datensatzabmessungen auch reduzieren, indem Sie verwenden Hauptkomponentenanalyse (PCA). Dieses Problem tritt häufig auf, insbesondere wenn biologische Sequenzdaten geclustert werden.

Wir haben bereits Metriken, Verknüpfungen und deren Einfluss auf unsere Ergebnisse besprochen. Lassen Sie uns nun mit der Dendrogrammanalyse fortfahren und sehen, wie sie uns einen Hinweis auf die Anzahl der Cluster in unserem Datensatz geben kann.

Das Finden einer interessanten Anzahl von Clustern in einem Dendrogramm ist dasselbe wie das Finden des größten horizontalen Raums, der keine vertikalen Linien hat (der Raum mit den längsten vertikalen Linien). Das bedeutet, dass es mehr Trennung zwischen den Clustern gibt.

Wir können eine horizontale Linie zeichnen, die durch diese längste Entfernung verläuft:

plt.figure(figsize=(10, 7))
plt.title("Customers Dendogram with line")
clusters = shc.linkage(selected_data, 
            method='ward', 
            metric="euclidean")
shc.dendrogram(clusters)
plt.axhline(y = 125, color = 'r', linestyle = '-')

img

Nachdem wir die horizontale Linie gefunden haben, zählen wir, wie oft unsere vertikalen Linien von ihr gekreuzt wurden – in diesem Beispiel 5 Mal. 5 scheint also ein guter Hinweis auf die Anzahl der Cluster zu sein, die den größten Abstand zwischen sich haben.

Note: Das Dendrogramm sollte nur als Referenz betrachtet werden, wenn es zur Auswahl der Anzahl der Cluster verwendet wird. Es kann leicht von dieser Zahl abweichen und wird vollständig von der Art der Verknüpfung und den Entfernungsmetriken beeinflusst. Bei der Durchführung einer eingehenden Clusteranalyse empfiehlt es sich, Dendrogramme mit unterschiedlichen Verknüpfungen und Metriken zu betrachten und sich die Ergebnisse anzusehen, die mit den ersten drei Zeilen generiert wurden, in denen die Cluster den größten Abstand zueinander haben.

Implementieren eines agglomerativen hierarchischen Clusterings

Verwenden von Originaldaten

Bisher haben wir die empfohlene Anzahl von Clustern für unseren Datensatz berechnet, die mit unserer ersten Analyse und unserer PCA-Analyse übereinstimmen. Jetzt können wir mit Scikit-Learn unser agglomeratives hierarchisches Clustering-Modell erstellen AgglomerativeClustering und finden Sie die Labels der Vermarktungsstellen mit heraus labels_:

from sklearn.cluster import AgglomerativeClustering

clustering_model = AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward')
clustering_model.fit(selected_data)
clustering_model.labels_

Das führt zu:

array([4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3,
       4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 1,
       4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 0, 2, 0, 2,
       1, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 2, 1, 2, 0, 2, 0, 2, 0, 2,
       0, 2, 0, 2, 0, 2, 1, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2,
       0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2,
       0, 2])

Wir haben viel recherchiert, um an diesen Punkt zu gelangen. Und was bedeuten diese Etiketten? Hier haben wir jeden Punkt unserer Daten als Gruppe von 0 bis 4 gekennzeichnet:

data_labels = clustering_model.labels_
sns.scatterplot(x='Annual Income (k$)', 
                y='Spending Score (1-100)', 
                data=selected_data, 
                hue=data_labels,
                pallete="rainbow").set_title('Labeled Customer Data')

img

Dies sind unsere letzten gruppierten Daten. Sie sehen die farbcodierten Datenpunkte in Form von fünf Clustern.

Die Datenpunkte unten rechts (Beschriftung: 0, violette Datenpunkte) gehören zu den Kunden mit hohen Gehältern, aber geringen Ausgaben. Das sind die Kunden, die ihr Geld sorgfältig ausgeben.

Ebenso die Kunden oben rechts (Beschriftung: 2, grüne Datenpunkte), sind die Kunden mit hohen Gehältern und hohen Ausgaben. Dies ist die Art von Kunden, auf die Unternehmen abzielen.

Die Kunden in der Mitte (Etikett: 1, blaue Datenpunkte) sind diejenigen mit durchschnittlichem Einkommen und durchschnittlichen Ausgaben. Zu dieser Kategorie gehören die meisten Kunden. Unternehmen können diese Kunden auch ansprechen, da sie in großer Zahl vorhanden sind.

Die Kunden unten links (Beschriftung: 4, rot) sind die Kunden mit niedrigen Gehältern und geringen Ausgaben, sie könnten durch das Anbieten von Werbeaktionen angezogen werden.

Und schließlich die Kunden oben links (Beschriftung: 3, orangefarbene Datenpunkte) sind diejenigen mit hohem Einkommen und geringen Ausgaben, die idealerweise vom Marketing anvisiert werden.

Verwenden des Ergebnisses von PCA

Wenn wir in einem anderen Szenario wären, in dem wir die Dimensionalität von Daten reduzieren müssten. Wir könnten auch die geclusterten PCA-Ergebnisse leicht darstellen. Dies kann durch Erstellen eines weiteren agglomerativen Clustering-Modells und Abrufen eines Datenlabels für jede Hauptkomponente erfolgen:

clustering_model_pca = AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward')
clustering_model_pca.fit(pcs)

data_labels_pca = clustering_model_pca.labels_

sns.scatterplot(x=pc1_values, 
                y=pc2_values,
                hue=data_labels_pca,
                palette="rainbow").set_title('Labeled Customer Data Reduced with PCA')

img

Beachten Sie, dass beide Ergebnisse sehr ähnlich sind. Der Hauptunterschied besteht darin, dass das erste Ergebnis mit den Originaldaten viel einfacher zu erklären ist. Es ist deutlich zu sehen, dass Kunden nach ihrem jährlichen Einkommens- und Ausgabenwert in fünf Gruppen eingeteilt werden können. Während wir beim PCA-Ansatz alle unsere Funktionen berücksichtigen, so sehr wir uns die von jedem von ihnen erklärten Abweichungen ansehen können, ist dies ein schwieriger zu verstehendes Konzept, insbesondere wenn Sie an eine Marketingabteilung berichten.

Je weniger wir unsere Daten transformieren müssen, desto besser.

Wenn Sie einen sehr großen und komplexen Datensatz haben, in dem Sie vor dem Clustering eine Dimensionsreduktion durchführen müssen, versuchen Sie, die linearen Beziehungen zwischen den einzelnen Merkmalen und ihren Residuen zu analysieren, um die Verwendung von PCA zu untermauern und die Erklärbarkeit des Prozesses zu verbessern. Indem Sie ein lineares Modell pro Merkmalspaar erstellen, können Sie verstehen, wie die Merkmale interagieren.

Wenn die Datenmenge so groß ist, wird es unmöglich, die Merkmalspaare zu zeichnen, eine Stichprobe Ihrer Daten auszuwählen, die so ausgewogen und nahe wie möglich an der Normalverteilung liegt, und die Analyse zuerst an der Stichprobe durchzuführen, sie zu verstehen, fein abzustimmen es – und später auf den gesamten Datensatz anwenden.

Sie können je nach Art Ihrer Daten (linear, nichtlinear) immer verschiedene Clustering-Visualisierungstechniken auswählen und bei Bedarf alle kombinieren oder testen.

Zusammenfassung

Die Clustering-Technik kann sehr praktisch sein, wenn es um unbeschriftete Daten geht. Da die meisten Daten in der realen Welt unbeschriftet sind und das Annotieren der Daten höhere Kosten verursacht, können Clustering-Techniken verwendet werden, um unbeschriftete Daten zu beschriften.

In diesem Leitfaden haben wir ein echtes Data-Science-Problem eingebracht, da Clustering-Techniken weitgehend in der Marketinganalyse (und auch in der biologischen Analyse) verwendet werden. Wir haben auch viele der Untersuchungsschritte erklärt, um zu einem guten hierarchischen Clustering-Modell zu gelangen, und wie man Dendrogramme liest, und hinterfragt, ob PCA ein notwendiger Schritt ist. Unser Hauptziel ist es, einige der Fallstricke und verschiedene Szenarien, in denen wir hierarchisches Clustering finden können, abzudecken.

Viel Spaß beim Clustern!

Zeitstempel:

Mehr von Stapelmissbrauch