|
|
# Введение в кластеризацию
|
|
|
|
|
|
Кластеризация — это тип [Обучения без учителя](https://wikipedia.org/wiki/Unsupervised_learning), который предполагает, что набор данных не имеет меток или что его входные данные не сопоставлены с заранее определёнными выходами. Он использует различные алгоритмы для сортировки немаркированных данных и формирования групп в соответствии с выявленными в данных закономерностями.
|
|
|
|
|
|
[](https://youtu.be/ty2advRiWJM "No One Like You by PSquare")
|
|
|
|
|
|
> 🎥 Нажмите на изображение выше для просмотра видео. Пока вы изучаете машинное обучение с применением кластеризации, насладитесь некоторыми треками нигерийского Dance Hall — это очень популярная песня 2014 года от PSquare.
|
|
|
|
|
|
## [Превью-викторина](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
|
|
### Введение
|
|
|
|
|
|
[Кластеризация](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) очень полезна для исследования данных. Давайте посмотрим, сможет ли она помочь обнаружить тенденции и закономерности в том, как нигерийская аудитория потребляет музыку.
|
|
|
|
|
|
✅ Потратьте минуту, чтобы подумать о применениях кластеризации. В реальной жизни кластеризация происходит каждый раз, когда у вас есть куча белья, и нужно отсортировать одежду по членам семьи 🧦👕👖🩲. В науке о данных кластеризация применяется при попытке проанализировать предпочтения пользователя или определить характеристики любого немаркированного набора данных. Кластеризация, в некотором роде, помогает упорядочить хаос, как ящик с носками.
|
|
|
|
|
|
[](https://youtu.be/esmzYhuFnds "Введение в кластеризацию")
|
|
|
|
|
|
> 🎥 Нажмите на изображение выше для просмотра видео: Джон Гаттаг из MIT рассказывает о кластеризации
|
|
|
|
|
|
В профессиональной среде кластеризацию можно использовать для определения, например, сегментации рынка, выяснения, какие возрастные группы покупают какие товары. Другой вариант использования — обнаружение аномалий, например, для выявления мошенничества в наборе данных транзакций по кредитным картам. Или вы можете использовать кластеризацию, чтобы определить опухоли на серии медицинских снимков.
|
|
|
|
|
|
✅ Подумайте минуту, как вы могли столкнуться с кластеризацией «в дикой природе» — в банковской, электронной коммерции или деловой среде.
|
|
|
|
|
|
> 🎓 Интересно, что анализ кластеров возник в областях антропологии и психологии в 1930-х годах. Можете представить, как это могло применяться?
|
|
|
|
|
|
Или же вы можете использовать кластеризацию для группировки результатов поиска — по ссылкам на покупки, изображениям или обзорам, например. Кластеризация полезна, когда у вас есть большой набор данных, который вы хотите сократить, и на котором хотите выполнить более детальный анализ, поэтому этот метод можно использовать для изучения данных до построения других моделей.
|
|
|
|
|
|
✅ Как только ваши данные организованы в кластеры, вы присваиваете им номер кластера, и этот метод может быть полезен для сохранения конфиденциальности набора данных; вместо того чтобы ссылаться на конкретную точку данных, вы можете упоминать её номер кластера. Можете ли вы придумать другие причины, почему вы бы использовали номер кластера, а не другие элементы кластера, чтобы идентифицировать данные?
|
|
|
|
|
|
Углубите свои знания о методах кластеризации в этом [модуле для обучения](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott)
|
|
|
|
|
|
## Начало работы с кластеризацией
|
|
|
|
|
|
[Scikit-learn предлагает широкий набор](https://scikit-learn.org/stable/modules/clustering.html) методов для выполнения кластеризации. Выбор зависит от вашей задачи. Согласно документации, каждый метод имеет свои преимущества. Вот упрощённая таблица методов, поддерживаемых Scikit-learn, и их соответствующих областей применения:
|
|
|
|
|
|
| Название метода | Область применения |
|
|
|
| :------------------------- | :-------------------------------------------------------------------- |
|
|
|
| K-Means | универсальное, индуктивное |
|
|
|
| Affinity propagation | много, неравномерные кластеры, индуктивное |
|
|
|
| Mean-shift | много, неравномерные кластеры, индуктивное |
|
|
|
| Spectral clustering | мало, равномерные кластеры, трансдуктивное |
|
|
|
| Ward hierarchical clustering | много, ограниченные кластеры, трансдуктивное |
|
|
|
| Agglomerative clustering | много, ограниченные, неевклидовы расстояния, трансдуктивное |
|
|
|
| DBSCAN | негладкая геометрия, неравномерные кластеры, трансдуктивное |
|
|
|
| OPTICS | негладкая геометрия, неравномерные кластеры с переменной плотностью, трансдуктивное |
|
|
|
| Gaussian mixtures | гладкая геометрия, индуктивное |
|
|
|
| BIRCH | большой набор данных с выбросами, индуктивное |
|
|
|
|
|
|
> 🎓 То, как мы создаём кластеры, во многом зависит от того, как мы собираем точки данных в группы. Давайте разберём некоторые термины:
|
|
|
>
|
|
|
> 🎓 ['Трансдуктивное' vs. 'индуктивное'](https://wikipedia.org/wiki/Transduction_(machine_learning))
|
|
|
>
|
|
|
> Трансдуктивный вывод основан на наблюдаемых обучающих примерах, которые сопоставляются с конкретными тестовыми случаями. Индуктивный вывод основан на обучающих примерах, которые сопоставляются с общими правилами, применяемыми затем к тестовым примерам.
|
|
|
>
|
|
|
> Пример: представьте, что у вас есть набор данных, который частично размечен. Некоторые данные — 'пластинки', некоторые — 'CD', а некоторые — без метки. Ваша задача — присвоить метки пустым. Если вы используете индуктивный подход, вы обучаете модель искать 'пластинки' и 'CD' и применяете эти метки к вашим немаркированным данным. Такой подход затруднительно классифицировать то, что на самом деле является 'кассетами'. Трансдуктивный же подход более эффективно обрабатывает неизвестные данные, группируя похожие объекты и присваивая метку группе. В этом случае кластеры могут отражать «круглые музыкальные вещи» и «квадратные музыкальные вещи».
|
|
|
>
|
|
|
> 🎓 ['Негладкая' vs. 'гладкая' геометрия](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering)
|
|
|
>
|
|
|
> Терминология происходит из математики: негладкая и гладкая геометрия относится к измерению расстояний между точками либо с помощью «гладких» (евклидовых), либо «негладких» (неевклидовых) геометрических методов.
|
|
|
>
|
|
|
> «Гладкая» здесь означает евклидову геометрию (часть которой изучается как «плоская» геометрия), а негладкая — это неевклидова геометрия. Как это связано с машинным обучением? Поскольку обе области основаны на математике, нужен общий способ измерения расстояния между точками в кластерах, который может быть «гладким» или «негладким» в зависимости от данных. [Евклидовы расстояния](https://wikipedia.org/wiki/Euclidean_distance) измеряются как длина отрезка между двумя точками. [Неевклидовы расстояния](https://wikipedia.org/wiki/Non-Euclidean_geometry) измеряются по кривой. Если визуализированные данные выглядят как не лежащие на плоскости, может потребоваться специализированный алгоритм.
|
|
|
>
|
|
|

|
|
|
> Инфографика от [Dasani Madipalli](https://twitter.com/dasani_decoded)
|
|
|
>
|
|
|
> 🎓 ['Расстояния'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf)
|
|
|
>
|
|
|
> Кластеры определяются своей матрицей расстояний, например расстояниями между точками. Это расстояние можно измерять несколькими способами. Евклидовы кластеры определяются средним значением точек и содержат «центроид» — центральную точку. Расстояния измеряются как расстояния до центроида. Неевклидовы расстояния относятся к «кластроидом», точке, наиболее близкой к другим точкам. Кластроиды могут определяться по-разному.
|
|
|
>
|
|
|
> 🎓 ['Ограниченная' кластеризация](https://wikipedia.org/wiki/Constrained_clustering)
|
|
|
>
|
|
|
> [Ограниченная кластеризация](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) добавляет в этот метод элемент «полуобучения». Связи между точками помечаются как «нельзя связывать» или «обязательно связывать», чтобы наложить ограничения на набор данных.
|
|
|
>
|
|
|
> Пример: если алгоритму дать свободу на наборе немаркированных или частично размеченных данных, полученные кластеры могут быть низкого качества. В вышеуказанном примере кластеры могли бы сгруппировать «круглые музыкальные вещи», «квадратные музыкальные вещи», «треугольные вещи» и «печенья». Если ввести ограничения или правила ("предмет должен быть из пластика", "предмет должен быть способен создавать музыку"), алгоритм будет работать лучше.
|
|
|
>
|
|
|
> 🎓 'Плотность'
|
|
|
>
|
|
|
> «Шумные» данные считаются «плотными». Расстояния между точками в кластерах могут оказаться более или менее плотными, или «переполненными», поэтому для анализа таких данных нужен соответствующий метод кластеризации. [Эта статья](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) демонстрирует различия между использованием K-Means и алгоритмами HDBSCAN для исследования шумных наборов данных с неравномерной плотностью кластеров.
|
|
|
|
|
|
## Алгоритмы кластеризации
|
|
|
|
|
|
Существует более 100 алгоритмов кластеризации, и их использование зависит от характера данных. Обсудим некоторые из основных:
|
|
|
|
|
|
- **Иерархическая кластеризация**. Если объект классифицируется по близости к соседнему объекту, а не к более удалённому, кластеры формируются на основе расстояний между их членами и другими объектами. Агломеративная кластеризация Scikit-learn является иерархической.
|
|
|
|
|
|

|
|
|
> Инфографика от [Dasani Madipalli](https://twitter.com/dasani_decoded)
|
|
|
|
|
|
- **Кластеризация по центроиду**. Этот популярный алгоритм требует выбора 'k', то есть числа кластеров, после чего алгоритм определяет центральную точку кластера и собирает данные вокруг неё. [K-means кластеризация](https://wikipedia.org/wiki/K-means_clustering) — популярный вариант кластеризации по центроиду. Центр определяется ближайшим средним, отсюда и название. Квадрат расстояния от кластера минимизируется.
|
|
|
|
|
|

|
|
|
> Инфографика от [Dasani Madipalli](https://twitter.com/dasani_decoded)
|
|
|
|
|
|
- **Кластеризация на основе распределения**. Основана на статистическом моделировании, где определяют вероятность принадлежности точки данных к кластеру и присваивают её соответственно. К этому типу относятся методы на основе гауссовских смесей.
|
|
|
|
|
|
- **Плотностная кластеризация**. Точки данных назначаются кластерам на основе их плотности или группировки друг вокруг друга. Точки, удалённые от группы, считаются выбросами или шумом. DBSCAN, Mean-shift и OPTICS принадлежат к этому типу кластеризации.
|
|
|
|
|
|
- **Сеточная кластеризация**. Для многомерных наборов данных создаётся сетка, и данные делятся между ячейками сетки, создавая кластеры.
|
|
|
|
|
|
## Упражнение — кластеризация ваших данных
|
|
|
|
|
|
Кластеризация как техника значительно улучшается с помощью визуализации, поэтому начнём с визуализации наших музыкальных данных. Это упражнение поможет нам решить, какой метод кластеризации наиболее эффективен для этого набора данных.
|
|
|
|
|
|
1. Откройте файл [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) в этой папке.
|
|
|
|
|
|
1. Импортируйте пакет `Seaborn` для качественной визуализации данных.
|
|
|
|
|
|
```python
|
|
|
!pip install seaborn
|
|
|
```
|
|
|
|
|
|
1. Добавьте данные песен из [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv). Загрузите dataframe с некоторой информацией о песнях. Подготовьтесь к изучению данных, импортировав библиотеки и выведя данные:
|
|
|
|
|
|
```python
|
|
|
import matplotlib.pyplot as plt
|
|
|
import pandas as pd
|
|
|
|
|
|
df = pd.read_csv("../data/nigerian-songs.csv")
|
|
|
df.head()
|
|
|
```
|
|
|
|
|
|
Проверьте первые несколько строк данных:
|
|
|
|
|
|
| | name | album | artist | artist_top_genre | release_date | length | popularity | danceability | acousticness | energy | instrumentalness | liveness | loudness | speechiness | tempo | time_signature |
|
|
|
| --- | ------------------------ | ---------------------------- | ------------------- | ---------------- | ------------ | ------ | ---------- | ------------ | ------------ | ------ | ---------------- | -------- | -------- | ----------- | ------- | -------------- |
|
|
|
| 0 | Sparky | Mandy & The Jungle | Cruel Santino | alternative r&b | 2019 | 144000 | 48 | 0.666 | 0.851 | 0.42 | 0.534 | 0.11 | -6.699 | 0.0829 | 133.015 | 5 |
|
|
|
| 1 | shuga rush | EVERYTHING YOU HEARD IS TRUE | Odunsi (The Engine) | afropop | 2020 | 89488 | 30 | 0.71 | 0.0822 | 0.683 | 0.000169 | 0.101 | -5.64 | 0.36 | 129.993 | 3 |
|
|
|
| 2 | LITT! | LITT! | AYLØ | indie r&b | 2018 | 207758 | 40 | 0.836 | 0.272 | 0.564 | 0.000537 | 0.11 | -7.127 | 0.0424 | 130.005 | 4 |
|
|
|
| 3 | Confident / Feeling Cool | Enjoy Your Life | Lady Donli | nigerian pop | 2019 | 175135 | 14 | 0.894 | 0.798 | 0.611 | 0.000187 | 0.0964 | -4.961 | 0.113 | 111.087 | 4 |
|
|
|
| 4 | wanted you | rare. | Odunsi (The Engine) | afropop | 2018 | 152049 | 25 | 0.702 | 0.116 | 0.833 | 0.91 | 0.348 | -6.044 | 0.0447 | 105.115 | 4 |
|
|
|
|
|
|
1. Получите информацию о DataFrame, вызвав `info()`:
|
|
|
|
|
|
```python
|
|
|
df.info()
|
|
|
```
|
|
|
|
|
|
Вывод выглядит так:
|
|
|
|
|
|
```output
|
|
|
<class 'pandas.core.frame.DataFrame'>
|
|
|
RangeIndex: 530 entries, 0 to 529
|
|
|
Data columns (total 16 columns):
|
|
|
# Column Non-Null Count Dtype
|
|
|
--- ------ -------------- -----
|
|
|
0 name 530 non-null object
|
|
|
1 album 530 non-null object
|
|
|
2 artist 530 non-null object
|
|
|
3 artist_top_genre 530 non-null object
|
|
|
4 release_date 530 non-null int64
|
|
|
5 length 530 non-null int64
|
|
|
6 popularity 530 non-null int64
|
|
|
7 danceability 530 non-null float64
|
|
|
8 acousticness 530 non-null float64
|
|
|
9 energy 530 non-null float64
|
|
|
10 instrumentalness 530 non-null float64
|
|
|
11 liveness 530 non-null float64
|
|
|
12 loudness 530 non-null float64
|
|
|
13 speechiness 530 non-null float64
|
|
|
14 tempo 530 non-null float64
|
|
|
15 time_signature 530 non-null int64
|
|
|
dtypes: float64(8), int64(4), object(4)
|
|
|
memory usage: 66.4+ KB
|
|
|
```
|
|
|
|
|
|
1. Проверьте наличие пропущенных значений, вызвав `isnull()` и убедившись, что сумма равна 0:
|
|
|
|
|
|
```python
|
|
|
df.isnull().sum()
|
|
|
```
|
|
|
|
|
|
Все в порядке:
|
|
|
|
|
|
```output
|
|
|
name 0
|
|
|
album 0
|
|
|
artist 0
|
|
|
artist_top_genre 0
|
|
|
release_date 0
|
|
|
length 0
|
|
|
popularity 0
|
|
|
danceability 0
|
|
|
acousticness 0
|
|
|
energy 0
|
|
|
instrumentalness 0
|
|
|
liveness 0
|
|
|
loudness 0
|
|
|
speechiness 0
|
|
|
tempo 0
|
|
|
time_signature 0
|
|
|
dtype: int64
|
|
|
```
|
|
|
|
|
|
1. Описываем данные:
|
|
|
|
|
|
```python
|
|
|
df.describe()
|
|
|
```
|
|
|
|
|
|
| | release_date | length | popularity | danceability | acousticness | energy | instrumentalness | liveness | loudness | speechiness | tempo | time_signature |
|
|
|
| ----- | ------------ | ----------- | ---------- | ------------ | ------------ | -------- | ---------------- | -------- | --------- | ----------- | ---------- | -------------- |
|
|
|
| count | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 |
|
|
|
| mean | 2015.390566 | 222298.1698 | 17.507547 | 0.741619 | 0.265412 | 0.760623 | 0.016305 | 0.147308 | -4.953011 | 0.130748 | 116.487864 | 3.986792 |
|
|
|
| std | 3.131688 | 39696.82226 | 18.992212 | 0.117522 | 0.208342 | 0.148533 | 0.090321 | 0.123588 | 2.464186 | 0.092939 | 23.518601 | 0.333701 |
|
|
|
| min | 1998 | 89488 | 0 | 0.255 | 0.000665 | 0.111 | 0 | 0.0283 | -19.362 | 0.0278 | 61.695 | 3 |
|
|
|
| 25% | 2014 | 199305 | 0 | 0.681 | 0.089525 | 0.669 | 0 | 0.07565 | -6.29875 | 0.0591 | 102.96125 | 4 |
|
|
|
| 50% | 2016 | 218509 | 13 | 0.761 | 0.2205 | 0.7845 | 0.000004 | 0.1035 | -4.5585 | 0.09795 | 112.7145 | 4 |
|
|
|
| 75% | 2017 | 242098.5 | 31 | 0.8295 | 0.403 | 0.87575 | 0.000234 | 0.164 | -3.331 | 0.177 | 125.03925 | 4 |
|
|
|
| max | 2020 | 511738 | 73 | 0.966 | 0.954 | 0.995 | 0.91 | 0.811 | 0.582 | 0.514 | 206.007 | 5 |
|
|
|
|
|
|
> 🤔 Если мы работаем с кластеризацией, методом без учителя, который не требует меток, зачем мы показываем эти данные с метками? На этапе изучения данных они полезны, но для работы алгоритмов кластеризации они не нужны. Вы также могли бы просто убрать заголовки столбцов и обращаться к данным по номеру столбца.
|
|
|
|
|
|
Посмотрите на общие значения данных. Обратите внимание, что популярность может быть '0', что показывает песни без рейтинга. Давайте вскоре удалим их.
|
|
|
|
|
|
1. Используйте столбчатую диаграмму, чтобы определить самые популярные жанры:
|
|
|
|
|
|
```python
|
|
|
import seaborn as sns
|
|
|
|
|
|
top = df['artist_top_genre'].value_counts()
|
|
|
plt.figure(figsize=(10,7))
|
|
|
sns.barplot(x=top[:5].index,y=top[:5].values)
|
|
|
plt.xticks(rotation=45)
|
|
|
plt.title('Top genres',color = 'blue')
|
|
|
```
|
|
|
|
|
|

|
|
|
|
|
|
✅ Если хотите увидеть больше верхних значений, измените `[:5]` на большее число или уберите его, чтобы увидеть все.
|
|
|
|
|
|
Обратите внимание, что если топ-жанр описан как 'Missing', это значит, что Spotify не классифицировал его, поэтому избавимся от него.
|
|
|
|
|
|
1. Удалите пропущенные данные, отфильтровав их
|
|
|
|
|
|
```python
|
|
|
df = df[df['artist_top_genre'] != 'Missing']
|
|
|
top = df['artist_top_genre'].value_counts()
|
|
|
plt.figure(figsize=(10,7))
|
|
|
sns.barplot(x=top.index,y=top.values)
|
|
|
plt.xticks(rotation=45)
|
|
|
plt.title('Top genres',color = 'blue')
|
|
|
```
|
|
|
|
|
|
Теперь проверьте жанры снова:
|
|
|
|
|
|

|
|
|
|
|
|
1. Три жанра доминируют в этом наборе данных. Сосредоточимся на `afro dancehall`, `afropop` и `nigerian pop`, дополнительно отфильтруем данные, удалив все с нулевой популярностью (то есть песни, не классифицированные по популярности, которые можно считать шумом для наших целей):
|
|
|
|
|
|
```python
|
|
|
df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')]
|
|
|
df = df[(df['popularity'] > 0)]
|
|
|
top = df['artist_top_genre'].value_counts()
|
|
|
plt.figure(figsize=(10,7))
|
|
|
sns.barplot(x=top.index,y=top.values)
|
|
|
plt.xticks(rotation=45)
|
|
|
plt.title('Top genres',color = 'blue')
|
|
|
```
|
|
|
|
|
|
1. Проведите быстрый тест, чтобы проверить, есть ли сильная корреляция в данных:
|
|
|
|
|
|
```python
|
|
|
corrmat = df.corr(numeric_only=True)
|
|
|
f, ax = plt.subplots(figsize=(12, 9))
|
|
|
sns.heatmap(corrmat, vmax=.8, square=True)
|
|
|
```
|
|
|
|
|
|

|
|
|
|
|
|
Единственная сильная корреляция — между `energy` и `loudness`, что неудивительно, учитывая, что громкая музыка обычно довольно энергична. В остальном корреляции относительно слабы. Интересно будет посмотреть, что алгоритм кластеризации сможет выявить в этих данных.
|
|
|
|
|
|
> 🎓 Обратите внимание, что корреляция не означает причинно-следственную связь! У нас есть доказательства корреляции, но нет доказательств причинности. [Забавный сайт](https://tylervigen.com/spurious-correlations) демонстрирует это визуально.
|
|
|
|
|
|
Есть ли в этом наборе данных сходство между воспринимаемой популярностью и танцевальностью песни? FacetGrid показывает концентрические круги, которые совпадают независимо от жанра. Возможно, вкусы в Нигерии сходятся на определённом уровне танцевальности для этого жанра?
|
|
|
|
|
|
✅ Попробуйте разные точки данных (energy, loudness, speechiness) и больше или другие музыкальные жанры. Что можно обнаружить? Посмотрите таблицу `df.describe()`, чтобы увидеть общие разбросы данных.
|
|
|
|
|
|
### Упражнение — распределение данных
|
|
|
|
|
|
Значимо ли различаются эти три жанра по восприятию их танцевальности с учётом популярности?
|
|
|
|
|
|
1. Исследуйте распределение данных по популярности и танцевальности для трёх топ-жанров вдоль осей x и y.
|
|
|
|
|
|
```python
|
|
|
sns.set_theme(style="ticks")
|
|
|
|
|
|
g = sns.jointplot(
|
|
|
data=df,
|
|
|
x="popularity", y="danceability", hue="artist_top_genre",
|
|
|
kind="kde",
|
|
|
)
|
|
|
```
|
|
|
|
|
|
Можно обнаружить концентрические круги вокруг общей точки сходства, показывающие распределение точек.
|
|
|
|
|
|
> 🎓 Обратите внимание, что в этом примере используется график KDE (оценка ядерной плотности), который представляет данные с помощью непрерывной кривой вероятностной плотности. Это позволяет интерпретировать данные при работе с несколькими распределениями.
|
|
|
|
|
|
В целом три жанра слабо совпадают по популярности и танцевальности. Определение кластеров в таких слабо согласованных данных будет задачей:
|
|
|
|
|
|

|
|
|
|
|
|
1. Постройте диаграмму рассеяния:
|
|
|
|
|
|
```python
|
|
|
sns.FacetGrid(df, hue="artist_top_genre", height=5) \
|
|
|
.map(plt.scatter, "popularity", "danceability") \
|
|
|
.add_legend()
|
|
|
```
|
|
|
|
|
|
Диаграмма рассеяния по тем же осям показывает похожий шаблон сходства
|
|
|
|
|
|

|
|
|
|
|
|
В целом, для кластеризации можно использовать диаграммы рассеяния для визуализации групп данных, поэтому освоение этого типа визуализаций очень полезно. В следующем уроке мы возьмём отфильтрованные данные и применим кластеризацию методом k-средних, чтобы найти группы, которые пересекаются и интересным образом связаны.
|
|
|
|
|
|
---
|
|
|
|
|
|
## 🚀Вызов
|
|
|
|
|
|
В рамках подготовки к следующему уроку составьте схему различных алгоритмов кластеризации, которые вы можете применить в производственной среде. Какие задачи решает кластеризация?
|
|
|
|
|
|
## [Тест после лекции](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
|
|
## Обзор и самообучение
|
|
|
|
|
|
Прежде чем применять алгоритмы кластеризации, как мы узнали, полезно понять природу вашего набора данных. Подробнее по этой теме можно почитать [здесь](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html)
|
|
|
|
|
|
[Эта полезная статья](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) подробно объясняет, как по-разному ведут себя разные алгоритмы кластеризации в зависимости от формы данных.
|
|
|
|
|
|
## Задание
|
|
|
|
|
|
[Изучите другие визуализации для кластеризации](assignment.md)
|
|
|
|
|
|
---
|
|
|
|
|
|
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
|
|
**Отказ от ответственности**:
|
|
|
Этот документ был переведен с использованием сервиса машинного перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Несмотря на наши усилия по обеспечению точности, имейте в виду, что автоматический перевод может содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется обратиться к профессиональному человеческому переводу. Мы не несем ответственности за любые недоразумения или неправильные толкования, возникшие в результате использования этого перевода.
|
|
|
<!-- CO-OP TRANSLATOR DISCLAIMER END --> |