<jupyter_start><jupyter_text>K-Means Clustering<jupyter_code>import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()

from sklearn.datasets import make_blobs

# TODO: Scikit-Learn - Importiere Clustering
# TODO: Toy-Daten erzeugen
# TODO: Modell instanziieren und fitten
# TODO: Vorhersagen treffen
# TODO: Cluster-Zentren untersuchen
# TODO: Clustering visualisieren<jupyter_output><empty_output><jupyter_text>Aufgabe: der K-Means-Algorithmus selbstständig programmiert<jupyter_code>from sklearn.metrics import pairwise_distances, pairwise_distances_argmin


def find_clusters(X, n_clusters, max_iter=300):
    
    ### Schritt 1: Initialisierung: zufällige Clusterzentren
    # Option 1.1: Zufällige Datenpunkte als Zentren designieren
    #     Tipp: np.random.choice(np.arange(len(X)))    
    # Option 1.2: Erst den Mittelwert der Datenpunkte berechnen, dann mehrmals Rauschen auf den Mittelwert legen
    # Option 1.3.: Farthest-Point (schwieriger)
    # Option 1.4: Zufällige Punkte im Bereich der Datenpunkte
    centers = None
    labels = None
    
    iter_ = 0
    while iter_ < max_iter:
        ### Schritt 2: Den X-Daten jeweils ein Label zuordnen
        # TODO       
        
        ### Schritt 3: Finde die neuen Cluster-Zentren
        # TODO

        # Schritt 4: Abbruchkriterium - wenn sich nichts mehr ändert.
        finished = None  # TODO
        if finished==True:
            break

        iter_ = iter_ + 1
        
    return centers, labels
        
    
centers, labels = find_clusters(X, n_clusters=4)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.07523510971786834, 'fraction_numerical': 0.01128526645768025, 'mean_word_length': 3.2334217506631298, 'pattern_counts': {'":': 0, '<': 10, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '376585', 'license': 'MIT', 'n_tokens_mistral': 568, 'n_tokens_neox': 546, 'n_words': 141, 'path': '3_2_clustering/Tutorial - KMeans Clustering - completed.ipynb', 'repo_name': 'layerwise/training', 'size': '1595'}