|
|
3 months ago | |
|---|---|---|
| .. | ||
| solution | 6 months ago | |
| README.md | 3 months ago | |
| assignment.md | 6 months ago | |
| notebook.ipynb | 11 months ago | |
README.md
Увод у кластеризацију
Кластеризација је врста ненадзирано учење која претпоставља да је скуп података без ознака или да његови уноси нису повезани са унапред дефинисаним излазима. Користи различите алгоритме за сортирање неозначених података и обезбеђује груписања према обрасцима које уочава у подацима.
🎥 Кликните на слику горе за видео. Док учите машинско учење са кластеризацијом, уживајте у неким Нигеријским Dance Hall траковима - ово је високо оцењена песма из 2014. од PSquare.
Квиз пре предавања
Увод
Кластеризација је веома корисна за истраживање података. Хајде да видимо да ли може да помогне у откривању трендова и образаца у томе како нигеријска публика конзумира музику.
✅ Одвојите минут да размислите о употребама кластеризације. У стварном животу, кластеризација се дешава кад год имате гомилу веша и потребно је да распоредите одећу по члановима породице 🧦👕👖🩲. У науци о подацима, кластеризација се дешава када се покушава анализирати корисничке преференције или одредити карактеристике било ког неозначеног скупа података. Кластеризација, на неки начин, помаже да се из хаоса направи ред, као фиока са чарапама.
🎥 Кликните на слику горе за видео: Џон Гатаг са MIT-а представља кластеризацију
У професионалном окружењу, кластеризација се може користити за одређивање ствари као што је сегментација тржишта, одређивање који узрасни групи купује које артикле, на пример. Друга употреба била би детекција аномалија, можда за откривање превара на скупу података трансакција кредитном картицом. Или бисте могли користити кластеризацију да одредите туморе у низу медицинских снимака.
✅ Размислите минут о томе како сте можда срели кластеризацију „у дивљини“, у банкарству, е-трговини или пословном окружењу.
🎓 Интересантно, анализа кластера потекла је из поља антропологије и психологије 1930-их. Можете ли замислити како је могла бити коришћена?
Алтернативно, могли бисте је користити за груписање резултата претраге - по линковима за куповину, сликама или рецензијама, на пример. Кластеризација је корисна када имате велики скуп података који желите да смањите и на коме желите извршити детаљнију анализу, тако да се техника може користити за упознавање података пре него што се конструишу други модели.
✅ Кад су ваши подаци организовани у кластерима, додељујете им идентификатор кластера, и ова техника може бити корисна за очување приватности скупа података; уместо тога, можете се позвати на тачку података по идентитету кластера, а не по препознатљивим подацима. Можете ли смислити друге разлоге због којих бисте користили идентификатор кластера уместо других елемената кластера за његово идентификовање?
Продубите своје разумевање техника кластеризације у овом Learn модулу
Почетак са кластеризацијом
Scikit-learn нуди велики избор метода за извођење кластеризације. Тип који одаберете зависиће од вашег случаја употребе. Према документацији, свака метода има разне користи. Ево поједностављене табеле метода које Scikit-learn подржава и њихових одговарајућих случајева употребе:
| Назив методе | Случај употребе |
|---|---|
| K-Means | за општу употребу, индуктивни |
| Affinity propagation | много, неравномерни кластери, индуктивни |
| Mean-shift | много, неравномерни кластери, индуктивни |
| Spectral clustering | мало, равномерни кластери, трандуктивни |
| Ward hierarchical clustering | много, ограничени кластери, трандуктивни |
| Agglomerative clustering | много, ограничени, не-Еуклидова удаљеност, трандуктивни |
| DBSCAN | неравна геометрија, неравномерни кластери, трандуктивни |
| OPTICS | неравна геометрија, неравномерни кластери са варијабилном густином, трандуктивни |
| Gaussian mixtures | равна геометрија, индуктивни |
| BIRCH | велики скуп података са одступањима, индуктивни |
🎓 Како правимо кластере има везе са тим како прикупљамо тачке података у групе. Хајде да разјаснимо неку терминологију:
🎓 'Трандуктивно' vs. 'индуктивно'
Трандуктивна инференција изведена је из посматраних тренинг случајева који се мапирају на специфичне тест случајеве. Индуктивна инференција произилази из тренинг случајева који се мапирају на општа правила која се тек онда примењују на тест случајеве.
Пример: Замислите да имате скуп података који је само делимично означен. Неке ствари су "плоче", неке "цд-ови", а неке су празне. Ваш посао је да обезбедите ознаке за празне. Ако изаберете индуктивни приступ, тренирали бисте модел тражећи "плоче" и "цд-ове", и применили те ознаке на своје неозначене податке. Овај приступ ће имати потешкоће са класификацијом ствари које су заправо "касете". Трандуктивни приступ, с друге стране, ефикасније третира ове непознате податке јер ради на груписању сличних ставки заједно, а затим примењује ознаку на групу. У овом случају, кластери би могли одражавати "кругле музичке ствари" и "квадратне музичке ствари".
🎓 'Неравна' vs. 'равна' геометрија
Изведено из математичке терминологије, неравна и равна геометрија односе се на мерење удаљености између тачака путем "равних" (Еуклидових) или "неравних" (не-Еуклидових) геометријских метода.
"Равна" у овом контексту означава Еуклидову геометрију (делове које уче као "раван" геометрију), а неравна се односи на не-Еуклидову геометрију. Шта геометрија има са машинским учењем? Као два поља кореном у математици, мора постојати заједнички начин мерења удаљености између тачака у кластерима, и то може бити учињено "равним" или "неравним" начином, у зависности од природе података. Еуклидске удаљености мере се као дужина линијског сегмента између две тачке. Не-Еуклидске удаљености мере се дуж криве. Ако ваши подаци, када су визуелизовани, изгледају да не постоје у равни, можда ће вам бити потребан специјализовани алгоритам да их обради.
Инфографик од Дасанa Мадипaлија
Кластери су дефинисани својом матрицом удаљености, нпр. удаљеностима између тачака. Ова удаљеност може бити измерена на неколико начина. Еуклидски кластери су дефинисани просеком вредности тачака и садрже 'центроид' или централну тачку. Удаљености се тако мере као удаљеност од тог центроида. Не-Еуклидске удаљености се односе на 'кластроиде', тачку најближу другим тачкама. Кластроиди се могу дефинисати на различите начине.
Ограничена кластеризација уводи „полунадзирано“ учење у ову ненадзирану методу. Односи између тачака су означени као 'не сме се повезати' или 'мора да се повезује' тако да нека правила буду наметнута скупу података.
Пример: Ако алгоритам буде пуштен на скуп неозначених или полуозначених података, кластеризација којој ће довести може бити лошег квалитета. У примеру горе, кластери би могли груписати 'кругле музичке ствари' и 'квадратне музичке ствари' и 'троугаоне ствари' и 'кексе'. Ако добије нека ограничења или правила ("ставка мора бити од пластике", "ставка треба да може да производи музику") ово може помоћи да се 'ограничи' алгоритам да прави боље изборе.
🎓 'Густина'
Податке који су 'буцни' сматрају се 'густим'. Удаљености између тачака у сваком од њихових кластера могу се, на прегледу, показати као мање или више гушће, или 'гужваније' и зато је потребно да се подаци анализирају одговарајућом методом кластеризације. Овај чланак илуструје разлику између коришћења K-Means кластеризације и HDBSCAN алгоритама за истраживање бучних података са неравномерном густином кластера.
Алгоритми кластеризације
Постоји преко 100 алгоритама кластеризације, а њихова употреба зависи од природе података. Хајде да дискутујемо о неким од главних:
-
Хијерархијска кластеризација. Ако је објекат класификован по близини до оближњег објекта, а не удаљенијег, кластери се формирају на основу удаљености чланова једног од другог. Scikit-learn агломеративна кластеризација је хијерархијска.
Инфографик од Дасанa Мадипaлија
-
Кластеризација центроида. Овај популаран алгоритам захтева избор 'k', односно броја кластера који треба формирати, након чега алгоритам одређује централну тачку кластера и сакупља податке око ње. K-means кластеризација је популаран облик кластеризације центроида. Центар се одређује по најближој средини, отуда и име. Квадратна удаљеност од кластера се минимизира.
Инфографик од Дасанa Мадипaлија
-
Расподелом заснована кластеризација. Заснована на статистичком моделовању, ова кластеризација се фокусира на одређивање вероватноће да тачка података припада кластеру и одговарајуће јој је додељује. Гаусове мешавине припадају овој врсти.
-
Густином заснована кластеризација. Тачке података се додељују кластерима на основу њихове густине, односно њиховог груписања једних око других. Тачке података далеко од групе сматрају се одступањима или шумом. DBSCAN, Mean-shift и OPTICS припадају овом типу кластеризације.
-
Mрешично заснована кластеризација. За више-димензијске скупове података, креира се мрежа и подаци се деле између ћелија мреже, чиме се стварају кластери.
Вежба - кластеризујте своје податке
Кластеризација као техника је у великој мери олакшана правилном визуелизацијом, па хајде да почнемо са визуелизацијом наших музичких података. Ова вежба ће нам помоћи да одлучимо коју од метода кластеризације треба најделотворније користити за природу ових података.
-
Отворите фајл notebook.ipynb у овом фолдеру.
-
Увезите пакет
Seabornза добру визуелизацију података.!pip install seaborn -
Додатно учитајте податке о песмама из файла nigerian-songs.csv. Учитајте dataframe са неким подацима о песмама. Спремите се да истражите те податке увозом библиотека и исписом података:
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 -
Добити неке информације о dataframe-у позивајући
info():df.info()Излаз изгледа овако:
<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 -
Двоструко провери null вредности позивајући
isnull()и провером да је сума 0:df.isnull().sum()Изгледа добро:
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 -
Описати податке:
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', што показује песме које немају ранг. Ускоро ћемо те уклонити.
-
Користите барплот да сазнате који су најпопуларнији жанрови:
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] у већу вредност, или уклоните тај део да видите све.
Обратите пажњу, када је најпопуларнији жанр описан као 'Пропуштено', то значи да га Spotify није класификовао, па се тога решавамо.
-
Уклонити пропуштене податке филтрирањем
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')Сада поново проверите жанрове:
-
Три најпопуларнија жанра доминирају овим скупом података. Концентришимо се на
afro dancehall,afropopиnigerian pop, уз додатно филтрирање података да уклонимо све са вредношћу 0 у популарности (што значи да нису класификоване по популарности у скупу података и могу се сматрати шумом за наше сврхе):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') -
Направите брзи тест да видите да ли подаци корелирају на неки посебно јак начин:
corrmat = df.corr(numeric_only=True) f, ax = plt.subplots(figsize=(12, 9)) sns.heatmap(corrmat, vmax=.8, square=True)Једина јака корелација је између
енергијеигласности, што није изненађење с обзиром да је гласна музика обично прилично енергична. У осталом, корелације су релативно слабе. Биће занимљиво видети шта алгоритам кластеровања може извучи из ових података.🎓 Имајте на уму да корелација не имплицира узрочност! Имамо доказ о корелацији али не и доказ о узрочности. Један забаван веб сајт има неке визуеле који то наглашавају.
Да ли постоји нека конвергенција у овом скупу података око перципиране популарности песме и играбилности? FacetGrid показује да постоје концентрични кругови који се уклапају, без обзира на жанр. Да ли је могуће да се нигеријски укуси конвергирају на одређеном нивоу играбилности за овај жанр?
✅ Испробајте различите тачке података (енергију, гласност, говорљивост) и више или другачије музичке жанрове. Шта можете открити? Погледајте табелу df.describe() да видите општи распоред података.
Вежба - распоред података
Да ли су ова три жанра значајно различита у перцепцији своје играбилности, засновано на њиховој популарности?
-
Испитајте распоред података за популарност и играбилност за наша три најбоља жанра дуж задате x и y осе.
sns.set_theme(style="ticks") g = sns.jointplot( data=df, x="popularity", y="danceability", hue="artist_top_genre", kind="kde", )Можете открити концентричне кругове око опште тачке конвергенције, показајући распоред тачака.
🎓 Имајте на уму да овај пример користи KDE (Kernel Density Estimate) графикон који представља податке коришћењем континуиране криве вероватноће густине. Ово нам омогућава интерпретацију података када радимо са више расподела.
Уопштено, три жанра се лабаво усклађују у смислу њихове популарности и играбилности. Одређивање кластера у овим лабаво усклађеним подацима биће изазов:
-
Направите расејани дијаграм:
sns.FacetGrid(df, hue="artist_top_genre", height=5) \ .map(plt.scatter, "popularity", "danceability") \ .add_legend()Расејани дијаграм истих оса показује сличан образац конвергенције
Уопштено, за кластеровање можете користити расејане дијаграме за приказ кластера података, па је усавршавање ове врсте визуализације веома корисно. У наредном часу узети ћемо овај филтрирани скуп података и применити k-means кластеровање да откријемо групе у овим подацима које изгледају да се преплићу на занимљиве начине.
🚀Изазов
У припреми за наредни час, направите графикон о различитим алгоритмима кластеровања које бисте могли открити и користити у продуктивном окружењу. Које врсте проблема кластеровање покушава да реши?
Квиз после предавања
Преглед и Самостални рад
Пре него што примените алгоритме кластеровања, како смо научили, добро је разумети природу вашег скупа података. Прочитајте више о овој теми овде
Ова корисна артикулација вас води кроз различите начине на које се понашају различити алгоритми кластеровања, у зависности од облика података.
Задатак
Истражите друге визуализације за кластеровање
Изјава о одрицању одговорности: Овај документ је преведен коришћењем услуге за аутоматски превод Co-op Translator. Иако тежимо тачности, имајте у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати ауторитативним извором. За критичне информације препоручује се професионални људски превод. Нисмо одговорни за било каква неспоразума или погрешна тумачења која произилазе из коришћења овог превода.









