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/fi/5-Clustering/1-Visualize
leestott e4050807fb
🌐 Update translations via Co-op Translator
2 weeks ago
..
solution 🌐 Update translations via Co-op Translator 2 weeks ago
README.md 🌐 Update translations via Co-op Translator 2 weeks ago
assignment.md 🌐 Update translations via Co-op Translator 2 weeks ago
notebook.ipynb 🌐 Update translations via Co-op Translator 2 weeks ago

README.md

Johdanto klusterointiin

Klusterointi on eräänlainen valvomaton oppiminen, joka olettaa, että datasetti on merkitsemätön tai että sen syötteet eivät ole yhdistetty ennalta määriteltyihin tuloksiin. Se käyttää erilaisia algoritmeja käydäkseen läpi merkitsemätöntä dataa ja luodakseen ryhmiä datasta havaittujen kuvioiden perusteella.

No One Like You by PSquare

🎥 Klikkaa yllä olevaa kuvaa nähdäksesi videon. Opiskellessasi koneoppimista klusteroinnin avulla, nauti samalla nigerialaisista Dance Hall -kappaleista tämä on PSquaren erittäin arvostettu kappale vuodelta 2014.

Esiluennon kysely

Johdanto

Klusterointi on erittäin hyödyllinen datan tutkimiseen. Katsotaan, voiko se auttaa löytämään trendejä ja kuvioita nigerialaisten yleisöjen musiikinkulutustavoista.

Mieti hetki klusteroinnin käyttötarkoituksia. Arkielämässä klusterointi tapahtuu aina, kun sinulla on kasa pyykkiä ja sinun täytyy lajitella perheenjäsenten vaatteet 🧦👕👖🩲. Data-analytiikassa klusterointi tapahtuu, kun yritetään analysoida käyttäjän mieltymyksiä tai määrittää minkä tahansa merkitsemättömän datasetin ominaisuuksia. Klusterointi auttaa tavallaan tuomaan järjestystä kaaokseen, kuten sukkalaatikkoon.

Introduction to ML

🎥 Klikkaa yllä olevaa kuvaa nähdäksesi videon: MIT:n John Guttag esittelee klusterointia.

Ammatillisessa ympäristössä klusterointia voidaan käyttää esimerkiksi markkinasegmentoinnin määrittämiseen, kuten sen selvittämiseen, mitkä ikäryhmät ostavat mitäkin tuotteita. Toinen käyttötarkoitus voisi olla poikkeavuuksien havaitseminen, esimerkiksi luottokorttitapahtumien datasetistä petosten tunnistamiseen. Tai klusterointia voisi käyttää kasvainten tunnistamiseen lääketieteellisten skannauksien joukosta.

Mieti hetki, miten olet saattanut kohdata klusterointia "luonnossa", esimerkiksi pankkitoiminnassa, verkkokaupassa tai liiketoiminnassa.

🎓 Mielenkiintoista on, että klusterianalyysi sai alkunsa antropologian ja psykologian aloilla 1930-luvulla. Voitko kuvitella, miten sitä saatettiin käyttää?

Vaihtoehtoisesti sitä voisi käyttää hakutulosten ryhmittelyyn esimerkiksi ostoslinkkien, kuvien tai arvostelujen mukaan. Klusterointi on hyödyllistä, kun sinulla on suuri datasetti, jonka haluat pienentää ja josta haluat tehdä tarkempaa analyysiä, joten tekniikkaa voidaan käyttää datan tutkimiseen ennen muiden mallien rakentamista.

Kun datasi on järjestetty klustereihin, sille annetaan klusteri-ID, ja tämä tekniikka voi olla hyödyllinen datasetin yksityisyyden säilyttämisessä; voit viitata datapisteeseen sen klusteri-ID:n avulla sen sijaan, että käyttäisit paljastavampia tunnistettavia tietoja. Voitko keksiä muita syitä, miksi käyttäisit klusteri-ID:tä klusterin muiden elementtien sijaan sen tunnistamiseen?

Syvennä ymmärrystäsi klusterointitekniikoista tässä Learn-moduulissa.

Klusteroinnin aloittaminen

Scikit-learn tarjoaa laajan valikoiman menetelmiä klusteroinnin suorittamiseen. Valitsemasi tyyppi riippuu käyttötapauksestasi. Dokumentaation mukaan jokaisella menetelmällä on erilaisia etuja. Tässä on yksinkertaistettu taulukko Scikit-learnin tukemista menetelmistä ja niiden sopivista käyttötapauksista:

Menetelmän nimi Käyttötapaus
K-Means yleiskäyttö, induktiivinen
Affinity propagation monet, epätasaiset klusterit, induktiivinen
Mean-shift monet, epätasaiset klusterit, induktiivinen
Spectral clustering harvat, tasaiset klusterit, transduktiivinen
Ward hierarchical clustering monet, rajoitetut klusterit, transduktiivinen
Agglomerative clustering monet, rajoitetut, ei-euklidiset etäisyydet, transduktiivinen
DBSCAN ei-tasainen geometria, epätasaiset klusterit, transduktiivinen
OPTICS ei-tasainen geometria, epätasaiset klusterit, vaihteleva tiheys, transduktiivinen
Gaussian mixtures tasainen geometria, induktiivinen
BIRCH suuri datasetti, jossa poikkeavuuksia, induktiivinen

🎓 Klusterien luominen liittyy vahvasti siihen, miten datan pisteet ryhmitellään ryhmiin. Puretaanpa hieman sanastoa:

🎓 'Transduktiivinen' vs. 'induktiivinen'

Transduktiivinen päättely perustuu havaittuihin harjoitustapauksiin, jotka liittyvät tiettyihin testitapauksiin. Induktiivinen päättely perustuu harjoitustapauksiin, jotka johtavat yleisiin sääntöihin, joita sovelletaan vasta testitapauksiin.

Esimerkki: Kuvittele, että sinulla on datasetti, joka on vain osittain merkitty. Jotkut asiat ovat 'levyjä', jotkut 'CD-levyjä', ja jotkut ovat tyhjiä. Tehtäväsi on antaa tyhjille merkinnät. Jos valitset induktiivisen lähestymistavan, kouluttaisit mallin etsimään 'levyjä' ja 'CD-levyjä' ja soveltaisit näitä merkintöjä merkitsemättömään dataan. Tämä lähestymistapa kohtaa vaikeuksia luokitellessaan asioita, jotka ovat itse asiassa 'kasetteja'. Transduktiivinen lähestymistapa sen sijaan käsittelee tätä tuntematonta dataa tehokkaammin, koska se pyrkii ryhmittelemään samanlaiset kohteet yhteen ja soveltamaan ryhmään merkintää. Tässä tapauksessa klusterit saattavat heijastaa 'pyöreitä musiikkiesineitä' ja 'neliömäisiä musiikkiesineitä'.

🎓 'Ei-tasainen' vs. 'tasainen' geometria

Matematiikan terminologiasta johdettuna ei-tasainen vs. tasainen geometria viittaa pisteiden välisten etäisyyksien mittaamiseen joko 'tasaisilla' (euklidisilla) tai 'ei-tasaisilla' (ei-euklidisilla) geometrisilla menetelmillä.

'Tasainen' tässä yhteydessä viittaa euklidiseen geometriaan (josta osia opetetaan 'tasogeometriana'), ja ei-tasainen viittaa ei-euklidiseen geometriaan. Mitä geometrialla on tekemistä koneoppimisen kanssa? No, koska molemmat alat perustuvat matematiikkaan, pisteiden välisten etäisyyksien mittaamiseen klustereissa täytyy olla yhteinen tapa, ja se voidaan tehdä 'tasaisella' tai 'ei-tasaisella' tavalla datan luonteen mukaan. Euklidiset etäisyydet mitataan viivan pituutena kahden pisteen välillä. Ei-euklidiset etäisyydet mitataan käyrän pitkin. Jos datasi, visualisoituna, ei näytä olevan tasossa, saatat tarvita erikoistuneen algoritmin sen käsittelemiseen.

Tasainen vs Ei-tasainen geometria Infografiikka

Infografiikka: Dasani Madipalli

🎓 'Etäisyydet'

Klusterit määritellään niiden etäisyysmatriisin perusteella, eli pisteiden välisillä etäisyyksillä. Tämä etäisyys voidaan mitata muutamalla tavalla. Euklidiset klusterit määritellään pistearvojen keskiarvon perusteella, ja niillä on 'centroidi' eli keskipiste. Etäisyydet mitataan siis etäisyytenä centroidiin. Ei-euklidiset etäisyydet viittaavat 'clustroideihin', pisteeseen, joka on lähimpänä muita pisteitä. Clustroidit voidaan puolestaan määritellä eri tavoin.

🎓 'Rajoitettu'

Rajoitettu klusterointi tuo 'puolivalvotun' oppimisen tähän valvomattomaan menetelmään. Pisteiden väliset suhteet merkitään 'ei voi yhdistää' tai 'täytyy yhdistää', joten datasettiin pakotetaan joitakin sääntöjä.

Esimerkki: Jos algoritmi päästetään vapaaksi joukkoon merkitsemätöntä tai osittain merkittyä dataa, sen tuottamat klusterit voivat olla huonolaatuisia. Esimerkissä yllä klusterit saattavat ryhmitellä 'pyöreät musiikkiesineet', 'neliömäiset musiikkiesineet', 'kolmiomaiset esineet' ja 'keksit'. Jos algoritmille annetaan joitakin rajoituksia tai sääntöjä ("esineen täytyy olla muovista tehty", "esineen täytyy pystyä tuottamaan musiikkia"), tämä voi auttaa 'rajoittamaan' algoritmia tekemään parempia valintoja.

🎓 'Tiheys'

Data, joka on 'meluisaa', katsotaan olevan 'tiheää'. Etäisyydet pisteiden välillä kussakin klusterissa voivat osoittautua tarkastelussa tiheämmiksi tai harvemmiksi, ja näin ollen tämä data täytyy analysoida sopivalla klusterointimenetelmällä. Tämä artikkeli havainnollistaa eroa K-Means-klusteroinnin ja HDBSCAN-algoritmien käytössä meluisan datasetin tutkimiseen, jossa klusterien tiheys on epätasainen.

Klusterointialgoritmit

Klusterointialgoritmeja on yli 100, ja niiden käyttö riippuu käsillä olevan datan luonteesta. Keskustellaan joistakin tärkeimmistä:

  • Hierarkkinen klusterointi. Jos objekti luokitellaan sen läheisyyden perusteella lähellä olevaan objektiin, eikä kauempana olevaan, klusterit muodostuvat jäsenten etäisyyden perusteella muihin objekteihin. Scikit-learnin agglomeratiivinen klusterointi on hierarkkista.

    Hierarkkinen klusterointi Infografiikka

    Infografiikka: Dasani Madipalli

  • Centroid-klusterointi. Tämä suosittu algoritmi vaatii 'k':n eli muodostettavien klusterien määrän valinnan, minkä jälkeen algoritmi määrittää klusterin keskipisteen ja kerää dataa sen ympärille. K-means-klusterointi on suosittu versio centroid-klusteroinnista. Keskipiste määritetään lähimmän keskiarvon perusteella, mistä nimi johtuu. Klusterin neliöetäisyys minimoidaan.

    Centroid-klusterointi Infografiikka

    Infografiikka: Dasani Madipalli

  • Jakautumispohjainen klusterointi. Tilastolliseen mallinnukseen perustuva jakautumispohjainen klusterointi keskittyy määrittämään todennäköisyyden, että datapiste kuuluu klusteriin, ja liittää sen sen mukaisesti. Gaussian-sekoitusmenetelmät kuuluvat tähän tyyppiin.

  • Tiheysperusteinen klusterointi. Datapisteet liitetään klustereihin niiden tiheyden perusteella, eli niiden ryhmittymisen perusteella toistensa ympärille. Datapisteet, jotka ovat kaukana ryhmästä, katsotaan poikkeavuuksiksi tai meluksi. DBSCAN, Mean-shift ja OPTICS kuuluvat tähän klusterointityyppiin.

  • Ruudukkoon perustuva klusterointi. Moniulotteisille dataseteille luodaan ruudukko, ja data jaetaan ruudukon soluihin, jolloin muodostuu klustereita.

Harjoitus klusteroi datasi

Klusterointitekniikkaa tukee suuresti asianmukainen visualisointi, joten aloitetaan visualisoimalla musiikkidatamme. Tämä harjoitus auttaa meitä päättämään, mitä klusterointimenetelmää tulisi käyttää tehokkaimmin tämän datan luonteen perusteella.

  1. Avaa notebook.ipynb tiedosto tässä kansiossa.

  2. Tuo Seaborn-paketti hyvää datan visualisointia varten.

    !pip install seaborn
    
  3. Lisää kappaledata tiedostosta nigerian-songs.csv. Lataa dataframe, jossa on tietoa kappaleista. Valmistaudu tutkimaan tätä dataa tuomalla kirjastot ja tulostamalla data:

    import matplotlib.pyplot as plt
    import pandas as pd
    
    df = pd.read_csv("../data/nigerian-songs.csv")
    df.head()
    

    Tarkista datan ensimmäiset rivit:

    nimi albumi artisti artistin_genre julkaisupäivä pituus suosio tanssittavuus akustisuus energia instrumentaalisuus elävyyys äänenvoimakkuus puheisuus tempo aika-allekirjoitus
    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. Hanki tietoa tietokehystä kutsumalla info():

    df.info()
    

    Tuloste näyttää tältä:

    <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. Tarkista null-arvot kutsumalla isnull() ja varmista, että summa on 0:

    df.isnull().sum()
    

    Näyttää hyvältä:

    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. Kuvaile data:

    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

🤔 Jos työskentelemme klusteroinnin parissa, valvomatonta menetelmää, joka ei vaadi merkittyä dataa, miksi näytämme tämän datan etiketeillä? Tutkimusvaiheessa ne ovat hyödyllisiä, mutta klusterointialgoritmit eivät tarvitse niitä toimiakseen. Voisit yhtä hyvin poistaa sarakeotsikot ja viitata dataan sarakenumeron perusteella.

Katso datan yleisiä arvoja. Huomaa, että suosio voi olla '0', mikä tarkoittaa kappaleita, joilla ei ole sijoitusta. Poistetaan ne pian.

  1. Käytä pylväsdiagrammia selvittääksesi suosituimmat genret:

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

    most popular

Jos haluat nähdä enemmän huippuarvoja, muuta top [:5] suuremmaksi arvoksi tai poista se nähdäksesi kaikki.

Huomaa, kun huippugenre on kuvattu 'Missing', se tarkoittaa, että Spotify ei luokitellut sitä, joten poistetaan se.

  1. Poista puuttuvat tiedot suodattamalla ne pois

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

    Tarkista genret uudelleen:

    most popular

  2. Selvästi kolme suosituinta genreä hallitsevat tätä datasettiä. Keskitytään afro dancehall, afropop ja nigerian pop, ja lisäksi suodatetaan datasetti poistamalla kaikki, joiden suosioarvo on 0 (mikä tarkoittaa, että niitä ei luokiteltu datasetissä ja niitä voidaan pitää meluna tarkoituksiimme):

    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. Tee nopea testi nähdäksesi, korreloiko data erityisen vahvasti:

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

    correlations

    Ainoa vahva korrelaatio on energy ja loudness välillä, mikä ei ole kovin yllättävää, koska äänekäs musiikki on yleensä melko energistä. Muuten korrelaatiot ovat suhteellisen heikkoja. On mielenkiintoista nähdä, mitä klusterointialgoritmi voi tehdä tämän datan kanssa.

    🎓 Huomaa, että korrelaatio ei tarkoita kausaatiota! Meillä on todiste korrelaatiosta, mutta ei todiste kausaatiosta. Hauska verkkosivusto sisältää visuaaleja, jotka korostavat tätä asiaa.

Onko tässä datasetissä yhteneväisyyttä kappaleen koetun suosion ja tanssittavuuden välillä? FacetGrid näyttää, että on keskittyneitä ympyröitä, jotka asettuvat linjaan genrestä riippumatta. Voisiko olla, että nigerialaiset mieltymykset keskittyvät tiettyyn tanssittavuuden tasoon tässä genressä?

Kokeile eri datapisteitä (energy, loudness, speechiness) ja lisää tai eri musiikkigenrejä. Mitä voit löytää? Katso df.describe()-taulukkoa nähdäksesi datan yleisen jakauman.

Harjoitus - datan jakauma

Ovatko nämä kolme genreä merkittävästi erilaisia tanssittavuuden suhteen niiden suosion perusteella?

  1. Tutki kolmen suosituimman genren datan jakaumaa suosion ja tanssittavuuden osalta annetulla x- ja y-akselilla.

    sns.set_theme(style="ticks")
    
    g = sns.jointplot(
        data=df,
        x="popularity", y="danceability", hue="artist_top_genre",
        kind="kde",
    )
    

    Voit löytää keskittyneitä ympyröitä yleisen yhtymäkohdan ympärillä, jotka näyttävät pisteiden jakauman.

    🎓 Huomaa, että tämä esimerkki käyttää KDE (Kernel Density Estimate) -kaaviota, joka esittää datan jatkuvan todennäköisyystiheyskäyrän avulla. Tämä mahdollistaa datan tulkinnan, kun työskennellään useiden jakaumien kanssa.

    Yleisesti ottaen kolme genreä asettuvat löyhästi linjaan suosion ja tanssittavuuden suhteen. Klusterien määrittäminen tässä löyhästi linjautuvassa datassa tulee olemaan haastavaa:

    distribution

  2. Luo hajontakaavio:

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

    Hajontakaavio samoilla akseleilla näyttää samanlaisen yhtymäkohdan kuvion

    Facetgrid

Yleisesti ottaen klusterointia varten voit käyttää hajontakaavioita datan klustereiden näyttämiseen, joten tämän tyyppisen visualisoinnin hallitseminen on erittäin hyödyllistä. Seuraavassa oppitunnissa otamme tämän suodatetun datan ja käytämme k-means-klusterointia löytääksemme ryhmiä tästä datasta, jotka näyttävät olevan päällekkäisiä mielenkiintoisilla tavoilla.


🚀Haaste

Valmistaudu seuraavaan oppituntiin tekemällä kaavio eri klusterointialgoritmeista, joita voit löytää ja käyttää tuotantoympäristössä. Minkälaisia ongelmia klusterointi yrittää ratkaista?

Post-lecture quiz

Kertaus ja itseopiskelu

Ennen kuin sovellat klusterointialgoritmeja, kuten olemme oppineet, on hyvä idea ymmärtää datasetin luonne. Lue lisää tästä aiheesta täältä

Tämä hyödyllinen artikkeli opastaa sinut läpi eri tapoja, joilla klusterointialgoritmit käyttäytyvät eri datamuotojen kanssa.

Tehtävä

Tutki muita visualisointeja klusterointia varten


Vastuuvapauslauseke:
Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua Co-op Translator. Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.