feat: complete all practice modules (Git basics, Jupyter analysis, Networking, Spectral Clustering)
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
import time
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
from scipy.ndimage import gaussian_filter
|
||||
from skimage.data import coins
|
||||
from skimage.transform import rescale
|
||||
from sklearn.cluster import spectral_clustering
|
||||
from sklearn.feature_extraction import image
|
||||
import logging
|
||||
|
||||
logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s")
|
||||
|
||||
logging.info("Загрузка и препроцессинг изображения...")
|
||||
orig = coins()
|
||||
smoothed = gaussian_filter(orig, sigma=2)
|
||||
rescaled = rescale(smoothed, 0.2, mode="reflect", anti_aliasing=False)
|
||||
|
||||
logging.info("Преобразование в граф...")
|
||||
graph = image.img_to_graph(rescaled)
|
||||
beta, eps = 10, 1e-6
|
||||
graph.data = np.exp(-beta * graph.data / graph.data.std()) + eps
|
||||
|
||||
n_regions, n_plus = 26, 3
|
||||
logging.info(f"Запуск спектральной кластеризации ({n_regions} регионов)...")
|
||||
|
||||
results = {}
|
||||
for method in ("kmeans", "discretize", "cluster_qr"):
|
||||
logging.info(f"Метод: {method}")
|
||||
t0 = time.time()
|
||||
labels = spectral_clustering(graph, n_clusters=n_regions+n_plus,
|
||||
eigen_tol=1e-7, assign_labels=method, random_state=42)
|
||||
labels = labels.reshape(rescaled.shape)
|
||||
results[method] = (labels, time.time()-t0)
|
||||
|
||||
logging.info("Визуализация результатов...")
|
||||
for method, (labels, dur) in results.items():
|
||||
plt.figure(figsize=(6,6))
|
||||
plt.imshow(rescaled, cmap="gray")
|
||||
plt.title(f"{method}, {dur:.2f} сек.")
|
||||
plt.axis("off")
|
||||
for l in range(n_regions):
|
||||
plt.contour(labels == l, colors=[plt.cm.nipy_spectral((l+4)/float(n_regions+4))])
|
||||
plt.show()
|
||||
Reference in New Issue
Block a user