<jupyter_start><jupyter_text>Praca domowa 6 <NAME> zaimportujmy dane i przyjrzyjmy się im<jupyter_code>import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv("../../clustering_R3.csv", header = 0)
data.head()
plt.scatter(data["X1"], data["X2"])
plt.scatter(data["X1"], data["X3"])
plt.scatter(data["X2"], data["X3"])
from mpl_toolkits import mplot3d

def plot_results(data, labels = 'blue'):
    fig = plt.figure()
    ax = plt.axes(projection="3d")

    ax.scatter3D(data["X1"], data["X2"], data["X3"], c = labels)
    ax.view_init(60, 35)
    
    plt.tight_layout()

    plt.show()
    
plot_results(data)<jupyter_output><empty_output><jupyter_text>Na oko powinny być 4 klastry o znacząco różnych rozrzutach. Warto jednak dodatkowo znormalizować dane:<jupyter_code>from sklearn import preprocessing

x = data.values
min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(x)
data = pd.DataFrame(x_scaled)

data.columns = ["X1", "X2", "X3"]
data.head()
plot_results(data)<jupyter_output><empty_output><jupyter_text>Wykorzystam dwie metryki: silhouette i indeks Daviesa-Bouldina.  k-means<jupyter_code>from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
from sklearn.metrics import davies_bouldin_score<jupyter_output><empty_output><jupyter_text>Silhouette scoreSilhouette sprawdza jak "podobny" jest każdy punkt do swojego klastra. Wynik będzie pochodzić z przedziału $(-1, 1)$, a im więcej, tym lepiej.<jupyter_code>kmeans = KMeans(n_clusters = 4, random_state = 2137)
kmeans.fit(data)
labels = kmeans.predict(data)

sil_scores = silhouette_score(data, labels)
sil_scores<jupyter_output><empty_output><jupyter_text>Tyle wynosi wynik silhouette dla kmeans. Przyporządkowanie klastrów wygląda następująco:<jupyter_code>plot_results(data, labels)<jupyter_output><empty_output><jupyter_text>Davies-Bouldin scoreTen indeks liczy stosunek między odległościami wewnątrz klastra a odległościami spoza klastra, daje wynik z przedziału (0, 1) - im **mniej** tym lepiej.<jupyter_code>db_scores = davies_bouldin_score(data, labels)
db_scores<jupyter_output><empty_output><jupyter_text>GMM<jupyter_code>from sklearn.mixture import GaussianMixture<jupyter_output><empty_output><jupyter_text>Silhouette<jupyter_code>gmm = GaussianMixture(n_components = 4)
gmm.fit(data)
labels = gmm.predict(data)

sil_scores = silhouette_score(data, labels)    
sil_scores
plot_results(data, labels)<jupyter_output><empty_output><jupyter_text>Sytuacja jest identyczna jak w k-means, nawet wynik wyszedł taki sam.  Davies-Bouldin score<jupyter_code>db_scores = davies_bouldin_score(data, labels)
db_scores<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11044776119402985, 'fraction_numerical': 0.012313432835820896, 'mean_word_length': 7.565495207667731, 'pattern_counts': {'":': 0, '<': 38, '<?xml version=': 0, '>': 38, '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': '9', 'dir': 'jupyter-structured-clean-dedup', 'id': '632411', 'license': 'Apache-2.0', 'n_tokens_mistral': 1098, 'n_tokens_neox': 1073, 'n_words': 196, 'path': 'Prace_domowe/Praca_domowa6/Grupa3/WdowskiMichal/pd6.ipynb', 'repo_name': 'welkierk/2020L-WUM', 'size': '2697'}