Agrupaciones por distancias
En este vídeo pueden verse las diferentes distancias y como usarlas para realizar agrupaciones:
Aquí tenéis el código utilizado para ver los diferentes resultados del clsutering dependiendo de la distancia utilizada:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
# Cargar datos
datos = np.loadtxt("venta_propiedades.csv", delimiter=",")
# Graficar datos
plt.figure(figsize=(6, 6))
plt.scatter(datos[:, 0], datos[:, 1],
c=np.linspace(0, 1, datos.shape[0]), s=300, alpha=0.6)
plt.xlabel("Antigüedad de la Construcción en Años", fontsize=14)
plt.ylabel("Precio de Casa en Pesos (1:100,000)", fontsize=14)
plt.box(False)
plt.show()
# Cargar datos
datos = np.loadtxt("venta_propiedades.csv", delimiter=",")
# Identificar Clusters con diferentes distancias
distancias = ["euclidean", "chebyshev", "manhattan"]
fig = plt.figure(figsize=(12, 4))
plt.set_cmap("plasma")
for d in range(len(distancias)):
clusters = DBSCAN(2, min_samples=10,
metric=distancias[d]).fit_predict(datos)
ax = fig.add_subplot(1, 3, d + 1)
# puntos considerados ruido
ax.scatter(datos[clusters == -1][:, 0], datos[clusters == -1][:, 1],
c="cyan", s=200, marker="2")
# puntos pertenencientes a clusters
ax.scatter(datos[clusters >= 0][:, 0], datos[clusters >= 0][:, 1],
c=clusters[clusters >= 0], s=200,
linewidth=0.5, edgecolors="black")
ax.set_title(distancias[d].capitalize(), fontsize=24)
ax.axis("off")
plt.show()