В задаче категоризации методом KMeans огромное количество графиков.
Вот способ вывести их в сетке 4 х Х.
(Количество окошек в строке можете изменять сами ,грамотно заменяя цифру 4 на нужную Вам.
Вывод графиков в сетке я уже не один раз делал.
На в этом задаче машинного обучения это особенно пригодилось.
Вообще, задача категоризации относится к задачам машинного обучения “без учителя”.
Это означает то ,что мы заранее не знаем, какой получится результат.
Сколько и какие категории в выборке данных сформируются.
# импорт библиотек и общие настройки import pandas as pd import seaborn as sns import math import matplotlib.pyplot as plt from sklearn.preprocessing import StandardScaler from sklearn.cluster import KMeans import itertools # отключаем некритичные уведомления import warnings warnings.filterwarnings('ignore') # показывать до 40ка колонок pd.set_option('display.max.columns', 40) # установка формата вывода на дисплей численных значений pd.options.display.float_format = '{:,.2f}'.format # чтение данных try: # Yandex path data = pd.read_csv('/datasets/gym_churn.csv') except: # local path !! в кавычках укажите свой путь к файлу !!! data = pd.read_csv(r"C:\Users\eddyd\Downloads\Praktikum\Datas_Eleventh_Project\gym_churn.csv") # убираем колонку с признаком **оттока** data_clusters = data.drop(columns=['Churn']) # создаём объект класса scaler (нормализатор) scaler = StandardScaler() # обучаем нормализатор и преобразуем набор данных x_sc = scaler.fit_transform(data_clusters) # задаём число кластеров, равное 5, и фиксируем значение random_state для воспроизводимости результата km = KMeans(n_clusters=5, random_state=0) labels = km.fit_predict(x_sc) # применяем алгоритм к данным и формируем вектор кластеров # сохраняем метки кластера в поле нашего датасета data_clusters['cluster_km'] = labels # setup size plot sns.set(rc = {'figure.figsize':(20,5)}) plt.rcParams.update({'font.size': 12}) # список колонок col_pairs = list(itertools.combinations(data_clusters.drop('cluster_km', axis=1).columns, 2)) # количество графиков qty_plots = len(col_pairs) # получим количество строк в сетке, разделив все на 4 c округлением ВВЕРХ qty_str = math.ceil(qty_plots / 4 ) # строим qty_plots графиков по 4 в ряд col=0 # порядковый номер колонки (для графика) for i in range(qty_str): # строки в матрице графиков # проверим, не достигли ли мы окончания списка колонок # если col НЕ больше qty_plots то идём в цикл # если больше то выходим if col <= (qty_plots-1): for j in [1,2, 3, 4]: # если col НЕ больше qty_plots то идём в цикл # если больше то выходим if col <= (qty_plots-1): # определяем колонку pair = col_pairs[col] # первый график в строке plt.subplot(1,4,j) sns.scatterplot( data_clusters[pair[0]], data_clusters[pair[1]], hue=data_clusters['cluster_km'], palette='Paired' ); plt.title('{} vs {}'.format(pair[0], pair[1])) #переход к следующей платформе для следующего графика col += 1 # закрываем цикл построения строки plt.show() # переход к следующей колонке для следующего графика
В результате выполнения этой программе на языке Python получается примерно вот это: