Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
import numpy as np | |
from sklearn import datasets | |
from sklearn.model_selection import train_test_split | |
from sklearn.svm import SVR | |
from sklearn.cluster import AgglomerativeClustering | |
import matplotlib.pyplot as plt | |
class agglomerative_clustering_st: | |
def __init__(self, database, test_size=0.2): | |
self.database = database | |
self.test_size = test_size | |
self.desc = r''' | |
# **Agglomerative Clustering** | |
Agglomerative Clustering es un tipo de algoritmo que agrupa de manera jerárquica. De esta manera lo que se hace es considerar a cada observación como un cluster y luego ir juntando aquellos que sean más similares. Esto lo repetimos hasta alcanzar un numero de clusters deseado. | |
**Método** | |
- Inicializamos todos los puntos como clusters | |
- Tomamos dos clusters que se encuentren cercanos y los unificáramos en un único cluster. | |
- Repetimos el paso anterior hasta conseguir un numero de clusters deseado. | |
**Criterios para medir la similitud entre clusters** | |
- Distancia entre los puntos **más cercanos** de dos clusters distintos. | |
- Distancia entre los puntos **más lejanos** de dos clusters distintos. | |
- Distancia entre los promedios de cada cluster. | |
''' | |
self.x_feature = 1 | |
self.y_feature = 2 | |
self.n_clusters = 3 | |
def params(self): | |
n_targets = len(set(self.database.target)) | |
self.n_clusters = st.slider('Numero de clusters', 1, n_targets, 1) | |
def solve(self): | |
n_features = int(self.database.data.shape[1]) | |
self.x_feature = st.slider('Variables en eje x', 1, n_features, 1) | |
self.y_feature = st.slider('Variables en eje y', 1, n_features, 2) | |
X = self.database.data | |
sklearn_clus = AgglomerativeClustering(self.n_clusters, linkage='single') | |
pred = sklearn_clus.fit_predict(X) | |
fig, ax = plt.subplots(figsize=(12,8)) | |
ax.scatter(X[:, self.x_feature-1], X[:, self.y_feature-1], c=pred) | |
plt.title(f'{self.n_clusters} Clusters') | |
return fig | |