<jupyter_start><jupyter_text>Pr<NAME> nr 5  <NAME>  WstępW tej pracy zajmę się problemem klasteryzacji. Przetestuję 2 metody klaseryzujące oraz 2 sposoby wybierania liczby klastrów.<jupyter_code>from sklearn.cluster import KMeans
from sklearn.cluster import AgglomerativeClustering
from sklearn.neighbors.nearest_centroid import NearestCentroid
from sklearn.metrics import silhouette_samples, silhouette_score
import pandas as pd
import os
import matplotlib.pyplot as plt
data = pd.read_csv("..\..\clustering.csv", header = None)
plt.scatter(data.iloc[:, 0], data.iloc[:, 1], alpha = 0.7)
plt.title("Points from clustering.csv")
plt.show()<jupyter_output><empty_output><jupyter_text>KmeansPierwszą metodą będzie metoda k najbliższych średnich. Do wyboru liczby klastrów wykorzystam wykres inercji oraz zasadę "łokcia".<jupyter_code>inertias = []
centroids = []
labels = []
for k in range(1, 21):
    model = KMeans(n_clusters = k)
    model.fit(data)
    inertias.append(model.inertia_)
    centroids.append(model.cluster_centers_)
    labels.append(model.predict(data))
plt.plot(range(1, 21), inertias, '-o')
plt.xlabel("Number of clusters")
plt.ylabel("Inertia")
plt.xticks(range(1, 21))
plt.show()
plt.scatter(data.iloc[:, 0], data.iloc[:, 1], alpha = 0.7, c = labels[7])
plt.scatter(centroids[7][:, 0], centroids[7][:, 1], s = 50, c = 'red')
plt.show()<jupyter_output><empty_output><jupyter_text>Agglomerative ClusteringDrugą metodą będzie klasteryzacja aglomeracyjna a do wyboru liczby klastrów wykorzystam miarę silhouette.<jupyter_code>centroids = []
labels = []
scores = []
for k in range(2, 21):
    model = AgglomerativeClustering(n_clusters = k, linkage = 'ward')
    prediction = model.fit_predict(data)
    labels.append(prediction)
    
    clf = NearestCentroid()
    clf.fit(data, prediction)
    centroids.append(clf.centroids_)
    scores.append(silhouette_score(data, prediction))
plt.plot(range(2, 21), scores, '-o')
plt.xlabel("Number of clusters")
plt.ylabel("Silhouette score")
plt.xticks(range(2, 21))
plt.show()
plt.scatter(data.iloc[:, 0], data.iloc[:, 1], alpha = 0.7, c = labels[7])
plt.scatter(centroids[7][:, 0], centroids[7][:, 1], s = 50, c = 'red')
plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1422142214221422, 'fraction_numerical': 0.02115211521152115, 'mean_word_length': 5.716012084592145, 'pattern_counts': {'":': 0, '<': 15, '<?xml version=': 0, '>': 15, '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': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '274067', 'license': 'Apache-2.0', 'n_tokens_mistral': 921, 'n_tokens_neox': 870, 'n_words': 183, 'path': 'Prace_domowe/Praca_domowa5/Grupa3/WisniewskiJacek/pd5.ipynb', 'repo_name': 'niladrem/2020L-WUM', 'size': '2236'}