Пример 1. Кластеризация методом k-means
Кластеризация объединяет похожие объекты в группы без
заранее заданных меток классов.
Алгоритм k-means стремится минимизировать внутрикластерную
сумму квадратов расстояний до центров кластеров. Он последовательно назначает
объекты ближайшим центрам и пересчитывает центроиды.
Рассмотрим четыре точки из лекции:
Центр первой группы: (0, 1).
Центр второй группы: (9, 8).
Реализация на Python:
import numpy as np
from sklearn.cluster import KMeans
X = np.array([
[0, 0],
[0, 2],
[8, 8],
[10, 8]
])
model = KMeans(
n_clusters=2,
random_state=42,
n_init=10
)
labels = model.fit_predict(X)
print("Метки кластеров:", labels)
print("Центры кластеров:")
print(model.cluster_centers_)
print("Сумма квадратов:", model.inertia_)
Результат:
Центры кластеров соответствуют точкам (0, 1) и (9, 8). Их
порядок и номера кластеров могут отличаться.
Внутрикластерная сумма квадратов равна 4.
Таким образом, k-means разделяет наблюдения на две группы по
близости к центроидам.
Пример 2. Кластеризация DBSCAN и обнаружение шума
Алгоритм DBSCAN ищет области высокой плотности наблюдений и
может выделять шумовые объекты.
В отличие от k-means, ему не требуется заранее указывать
количество кластеров.
Реализация на Python:
import numpy as np
from sklearn.cluster import DBSCAN
X = np.array([
[0.0, 0.0],
[0.1, 0.0],
[0.0, 0.1],
[5.0, 5.0],
[5.1, 5.0],
[5.0, 5.1],
[10.0, 0.0]
])
model = DBSCAN(
eps=0.3,
min_samples=2
)
labels = model.fit_predict(X)
for point, label in zip(X, labels):
print("Объект:", point, "Кластер:", label)
Результат:
Алгоритм обнаруживает две группы близко расположенных
объектов.
Точка (10, 0) обозначается меткой -1, что означает шум.
DBSCAN полезен, когда необходимо выявить плотные группы и
отделить наблюдения, не принадлежащие таким группам.
Пример 3. Снижение размерности методом PCA
Метод главных компонент (PCA) находит ортогональные
направления максимальной дисперсии данных.
Он позволяет представить исходные наблюдения с меньшим
количеством признаков.
Реализация на Python:
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.pipeline import make_pipeline
X = np.array([
[2, 4, 6],
[3, 6, 9],
[4, 8, 12],
[5, 10, 15],
[6, 12, 18]
])
model = make_pipeline(
StandardScaler(),
PCA(n_components=2)
)
X_reduced = model.fit_transform(X)
pca = model.named_steps["pca"]
print("Исходная форма:", X.shape)
print("Новая форма:", X_reduced.shape)
print(
"Доля
объяснённой дисперсии:",
pca.explained_variance_ratio_
)
Результат:
Исходная форма: (5, 3).
Новая форма: (5, 2).
Данные преобразованы из трёхмерного пространства в
двумерное.
Поскольку признаки в этом примере линейно зависимы, первая
главная компонента объясняет практически всю дисперсию.
Если PCA используется как часть предсказательной модели,
преобразование необходимо обучать только на обучающей выборке, чтобы избежать
утечки информации.