lab2
E se os dados não forem volumétricos ou globulares? o K-Means consegue clusterizar?¶
Aplicando GMM e DBSCAN¶
Gaussian Mixture Models
é uma abordagem probabilística para o agrupamento, que tenta modelar cada cluster como uma distribuição gaussiana (normal).DBSCAN (Density-Based Spatial Clustering of Applications with Noise)
é um algoritmo de clustering baseado na densidade dos pontos. Ele é capaz de identificar clusters de formas arbitrárias e tratar pontos ruidosos (outliers) de maneira eficiente.O DBSCAN possui dois principais parâmetros:
eps
: A distância máxima entre dois pontos para que sejam considerados vizinhos.min_samples
: O número mínimo de pontos vizinhos para que um ponto seja considerado parte de um cluster.
In [1]:
Copied!
#Importe das libs
import pandas as pd
from sklearn.cluster import KMeans, DBSCAN
from sklearn.mixture import GaussianMixture
import matplotlib.pyplot as plt
#Importe das libs
import pandas as pd
from sklearn.cluster import KMeans, DBSCAN
from sklearn.mixture import GaussianMixture
import matplotlib.pyplot as plt
Carregando os dados¶
In [2]:
Copied!
url_db = 'https://raw.githubusercontent.com/reisanar/datasets/master/moons.csv'
moons = pd.read_csv(url_db)
url_db = 'https://raw.githubusercontent.com/reisanar/datasets/master/moons.csv'
moons = pd.read_csv(url_db)
In [3]:
Copied!
moons.head()
moons.head()
Out[3]:
X | Y | |
---|---|---|
0 | -0.415208 | 1.035735 |
1 | 0.058781 | 0.304334 |
2 | 1.109379 | -0.509738 |
3 | 1.540948 | -0.427550 |
4 | 0.929095 | -0.532388 |
In [4]:
Copied!
plt.scatter(x=moons['X'], y=moons['Y'])
plt.scatter(x=moons['X'], y=moons['Y'])
Out[4]:
<matplotlib.collections.PathCollection at 0x16a43b1c0>
Criação de modelos de Agrupamento¶
In [5]:
Copied!
# Modelos de agrupamento
random_state = 42
#k-means
km = KMeans(n_clusters=4, random_state=random_state) # k=4
#Gaussian Mixture
gm = GaussianMixture(n_components=4, random_state=random_state) #k=4
#DBScan
db = DBSCAN(eps=0.4)
# Modelos de agrupamento
random_state = 42
#k-means
km = KMeans(n_clusters=4, random_state=random_state) # k=4
#Gaussian Mixture
gm = GaussianMixture(n_components=4, random_state=random_state) #k=4
#DBScan
db = DBSCAN(eps=0.4)
In [6]:
Copied!
#aplica o algoritimo e armazena o cluster de cada dado
km_c = km.fit_predict(moons)
gm_c = gm.fit_predict(moons)
db_c = db.fit_predict(moons)
#aplica o algoritimo e armazena o cluster de cada dado
km_c = km.fit_predict(moons)
gm_c = gm.fit_predict(moons)
db_c = db.fit_predict(moons)
In [7]:
Copied!
fig = plt.figure(figsize = (12,8), dpi=80)
plt.subplot(2,2,1)
plt.scatter(x=moons['X'],y=moons['Y'])
plt.title('Original')
plt.subplot(2,2,2)
plt.scatter(x=moons['X'],y=moons['Y'], c=km_c)
plt.title('KMeans')
plt.subplot(2,2,3)
plt.scatter(x=moons['X'],y=moons['Y'], c=gm_c)
plt.title('GaussianMixture')
plt.subplot(2,2,4)
plt.scatter(x=moons['X'],y=moons['Y'], c=db_c)
plt.title('DBScan')
fig = plt.figure(figsize = (12,8), dpi=80)
plt.subplot(2,2,1)
plt.scatter(x=moons['X'],y=moons['Y'])
plt.title('Original')
plt.subplot(2,2,2)
plt.scatter(x=moons['X'],y=moons['Y'], c=km_c)
plt.title('KMeans')
plt.subplot(2,2,3)
plt.scatter(x=moons['X'],y=moons['Y'], c=gm_c)
plt.title('GaussianMixture')
plt.subplot(2,2,4)
plt.scatter(x=moons['X'],y=moons['Y'], c=db_c)
plt.title('DBScan')
Out[7]:
Text(0.5, 1.0, 'DBScan')
In [ ]:
Copied!
In [ ]:
Copied!
In [ ]:
Copied!