March 29, 2022

Генерация данных для кластеризации

Для освоения машинного обучения необходимы данные, которые не всегда имеются под рукой. Поэтому в библиотеке Scikit-learn реализованы функции для их генерации. В частности, датасеты для кластеризации можно создавать с помощью make_blobs из модуля sklearn.datasets. Эта функция позволяет задать следующие настройки:

n_samples - число точек;

n_features - число признаков;

centers - число центров кластеров;

cluster_std - стандартное отклонение кластеров;

center_box - рамки значений для центров кластеров;

shuffle - флаг, перемешивать ли точки кластеров;

random_state - инициализатор случайных чисел для повторения датасета;

return_centers - флаг, определяющий возвращать ли координаты кластеров;

Например, создадим набор из 1000 точек с 3 кластерами и 2 признаками, центры кластеров заданы в квадрате [2, 100]:

from sklearn.datasets import make_blobs
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
X, y, centers = make_blobs(n_samples=1000, centers=3, n_features=2, center_box=[2,100], return_centers=True, random_state=0)
X = pd.DataFrame(X, columns=['feat1', 'feat2'])
X.head()

Визуализируем набор с помощью библиотеки Seaborn (читать подробнее):

plt.figure(figsize=(15,7))
plt.rc('axes', labelsize=20)   
sns.scatterplot(data=X, x='feat1', y='feat2', hue=y, palette= 'rocket')
plt.scatter(centers[:,0], centers[:,1], s=50, c='g', marker='o')