You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/sr/5-Clustering/1-Visualize
localizeflow[bot] 12ff6946a8
chore(i18n): sync translations with latest source changes (chunk 1/1, 9 changes)
3 months ago
..
solution chore(i18n): sync translations with latest source changes (chunk 1/1, 300 changes) 6 months ago
README.md chore(i18n): sync translations with latest source changes (chunk 1/1, 9 changes) 3 months ago
assignment.md chore(i18n): sync translations with latest source changes (chunk 1/1, 300 changes) 6 months ago
notebook.ipynb 🌐 Update translations via Co-op Translator 11 months ago

README.md

Увод у кластеризацију

Кластеризација је врста ненадзирано учење која претпоставља да је скуп података без ознака или да његови уноси нису повезани са унапред дефинисаним излазима. Користи различите алгоритме за сортирање неозначених података и обезбеђује груписања према обрасцима које уочава у подацима.

No One Like You by PSquare

🎥 Кликните на слику горе за видео. Док учите машинско учење са кластеризацијом, уживајте у неким Нигеријским Dance Hall траковима - ово је високо оцењена песма из 2014. од PSquare.

Квиз пре предавања

Увод

Кластеризација је веома корисна за истраживање података. Хајде да видимо да ли може да помогне у откривању трендова и образаца у томе како нигеријска публика конзумира музику.

Одвојите минут да размислите о употребама кластеризације. У стварном животу, кластеризација се дешава кад год имате гомилу веша и потребно је да распоредите одећу по члановима породице 🧦👕👖🩲. У науци о подацима, кластеризација се дешава када се покушава анализирати корисничке преференције или одредити карактеристике било ког неозначеног скупа података. Кластеризација, на неки начин, помаже да се из хаоса направи ред, као фиока са чарапама.

Introduction to ML

🎥 Кликните на слику горе за видео: Џон Гатаг са 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. 'равна' геометрија

Изведено из математичке терминологије, неравна и равна геометрија односе се на мерење удаљености између тачака путем "равних" (Еуклидових) или "неравних" (не-Еуклидових) геометријских метода.

"Равна" у овом контексту означава Еуклидову геометрију (делове које уче као "раван" геометрију), а неравна се односи на не-Еуклидову геометрију. Шта геометрија има са машинским учењем? Као два поља кореном у математици, мора постојати заједнички начин мерења удаљености између тачака у кластерима, и то може бити учињено "равним" или "неравним" начином, у зависности од природе података. Еуклидске удаљености мере се као дужина линијског сегмента између две тачке. Не-Еуклидске удаљености мере се дуж криве. Ако ваши подаци, када су визуелизовани, изгледају да не постоје у равни, можда ће вам бити потребан специјализовани алгоритам да их обради.

Flat vs Nonflat Geometry Infographic Инфографик од Дасанa Мадипaлија

🎓 'Удаљености'

Кластери су дефинисани својом матрицом удаљености, нпр. удаљеностима између тачака. Ова удаљеност може бити измерена на неколико начина. Еуклидски кластери су дефинисани просеком вредности тачака и садрже 'центроид' или централну тачку. Удаљености се тако мере као удаљеност од тог центроида. Не-Еуклидске удаљености се односе на 'кластроиде', тачку најближу другим тачкама. Кластроиди се могу дефинисати на различите начине.

🎓 'Ограничена'

Ограничена кластеризација уводи „полунадзирано“ учење у ову ненадзирану методу. Односи између тачака су означени као 'не сме се повезати' или 'мора да се повезује' тако да нека правила буду наметнута скупу података.

Пример: Ако алгоритам буде пуштен на скуп неозначених или полуозначених података, кластеризација којој ће довести може бити лошег квалитета. У примеру горе, кластери би могли груписати 'кругле музичке ствари' и 'квадратне музичке ствари' и 'троугаоне ствари' и 'кексе'. Ако добије нека ограничења или правила ("ставка мора бити од пластике", "ставка треба да може да производи музику") ово може помоћи да се 'ограничи' алгоритам да прави боље изборе.

🎓 'Густина'

Податке који су 'буцни' сматрају се 'густим'. Удаљености између тачака у сваком од њихових кластера могу се, на прегледу, показати као мање или више гушће, или 'гужваније' и зато је потребно да се подаци анализирају одговарајућом методом кластеризације. Овај чланак илуструје разлику између коришћења K-Means кластеризације и HDBSCAN алгоритама за истраживање бучних података са неравномерном густином кластера.

Алгоритми кластеризације

Постоји преко 100 алгоритама кластеризације, а њихова употреба зависи од природе података. Хајде да дискутујемо о неким од главних:

  • Хијерархијска кластеризација. Ако је објекат класификован по близини до оближњег објекта, а не удаљенијег, кластери се формирају на основу удаљености чланова једног од другог. Scikit-learn агломеративна кластеризација је хијерархијска.

    Hierarchical clustering Infographic

    Инфографик од Дасанa Мадипaлија

  • Кластеризација центроида. Овај популаран алгоритам захтева избор 'k', односно броја кластера који треба формирати, након чега алгоритам одређује централну тачку кластера и сакупља податке око ње. K-means кластеризација је популаран облик кластеризације центроида. Центар се одређује по најближој средини, отуда и име. Квадратна удаљеност од кластера се минимизира.

    Centroid clustering Infographic

    Инфографик од Дасанa Мадипaлија

  • Расподелом заснована кластеризација. Заснована на статистичком моделовању, ова кластеризација се фокусира на одређивање вероватноће да тачка података припада кластеру и одговарајуће јој је додељује. Гаусове мешавине припадају овој врсти.

  • Густином заснована кластеризација. Тачке података се додељују кластерима на основу њихове густине, односно њиховог груписања једних око других. Тачке података далеко од групе сматрају се одступањима или шумом. DBSCAN, Mean-shift и OPTICS припадају овом типу кластеризације.

  • Mрешично заснована кластеризација. За више-димензијске скупове података, креира се мрежа и подаци се деле између ћелија мреже, чиме се стварају кластери.

Вежба - кластеризујте своје податке

Кластеризација као техника је у великој мери олакшана правилном визуелизацијом, па хајде да почнемо са визуелизацијом наших музичких података. Ова вежба ће нам помоћи да одлучимо коју од метода кластеризације треба најделотворније користити за природу ових података.

  1. Отворите фајл notebook.ipynb у овом фолдеру.

  2. Увезите пакет Seaborn за добру визуелизацију података.

    !pip install seaborn
    
  3. Додатно учитајте податке о песмама из файла 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
  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
    
  5. Двоструко провери 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
    
  6. Описати податке:

    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. Користите барплот да сазнате који су најпопуларнији жанрови:

    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 није класификовао, па се тога решавамо.

  1. Уклонити пропуштене податке филтрирањем

    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')
    

    Сада поново проверите жанрове:

    најпопуларнији

  2. Три најпопуларнија жанра доминирају овим скупом података. Концентришимо се на 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')
    
  3. Направите брзи тест да видите да ли подаци корелирају на неки посебно јак начин:

    corrmat = df.corr(numeric_only=True)
    f, ax = plt.subplots(figsize=(12, 9))
    sns.heatmap(corrmat, vmax=.8, square=True)
    

    корелације

    Једина јака корелација је између енергије и гласности, што није изненађење с обзиром да је гласна музика обично прилично енергична. У осталом, корелације су релативно слабе. Биће занимљиво видети шта алгоритам кластеровања може извучи из ових података.

    🎓 Имајте на уму да корелација не имплицира узрочност! Имамо доказ о корелацији али не и доказ о узрочности. Један забаван веб сајт има неке визуеле који то наглашавају.

Да ли постоји нека конвергенција у овом скупу података око перципиране популарности песме и играбилности? FacetGrid показује да постоје концентрични кругови који се уклапају, без обзира на жанр. Да ли је могуће да се нигеријски укуси конвергирају на одређеном нивоу играбилности за овај жанр?

Испробајте различите тачке података (енергију, гласност, говорљивост) и више или другачије музичке жанрове. Шта можете открити? Погледајте табелу df.describe() да видите општи распоред података.

Вежба - распоред података

Да ли су ова три жанра значајно различита у перцепцији своје играбилности, засновано на њиховој популарности?

  1. Испитајте распоред података за популарност и играбилност за наша три најбоља жанра дуж задате 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) графикон који представља податке коришћењем континуиране криве вероватноће густине. Ово нам омогућава интерпретацију података када радимо са више расподела.

    Уопштено, три жанра се лабаво усклађују у смислу њихове популарности и играбилности. Одређивање кластера у овим лабаво усклађеним подацима биће изазов:

    распоред

  2. Направите расејани дијаграм:

    sns.FacetGrid(df, hue="artist_top_genre", height=5) \
       .map(plt.scatter, "popularity", "danceability") \
       .add_legend()
    

    Расејани дијаграм истих оса показује сличан образац конвергенције

    Facetgrid

Уопштено, за кластеровање можете користити расејане дијаграме за приказ кластера података, па је усавршавање ове врсте визуализације веома корисно. У наредном часу узети ћемо овај филтрирани скуп података и применити k-means кластеровање да откријемо групе у овим подацима које изгледају да се преплићу на занимљиве начине.


🚀Изазов

У припреми за наредни час, направите графикон о различитим алгоритмима кластеровања које бисте могли открити и користити у продуктивном окружењу. Које врсте проблема кластеровање покушава да реши?

Квиз после предавања

Преглед и Самостални рад

Пре него што примените алгоритме кластеровања, како смо научили, добро је разумети природу вашег скупа података. Прочитајте више о овој теми овде

Ова корисна артикулација вас води кроз различите начине на које се понашају различити алгоритми кластеровања, у зависности од облика података.

Задатак

Истражите друге визуализације за кластеровање


Изјава о одрицању одговорности: Овај документ је преведен коришћењем услуге за аутоматски превод Co-op Translator. Иако тежимо тачности, имајте у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати ауторитативним извором. За критичне информације препоручује се професионални људски превод. Нисмо одговорни за било каква неспоразума или погрешна тумачења која произилазе из коришћења овог превода.