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/sw/5-Clustering/2-K-Means/README.md

12 KiB

K-Means clustering

Pre-lecture quiz

Katika somo hili, utajifunza jinsi ya kuunda makundi kwa kutumia Scikit-learn na seti ya data ya muziki wa Nigeria uliyoingiza awali. Tutazungumzia misingi ya K-Means kwa Clustering. Kumbuka kwamba, kama ulivyojifunza katika somo la awali, kuna njia nyingi za kufanya kazi na makundi, na mbinu unayotumia inategemea data yako. Tutajaribu K-Means kwa kuwa ni mbinu ya kawaida zaidi ya clustering. Twende kazi!

Maneno utakayojifunza:

  • Silhouette scoring
  • Njia ya Elbow
  • Inertia
  • Variance

Utangulizi

K-Means Clustering ni mbinu inayotokana na uwanja wa usindikaji wa ishara. Inatumika kugawanya na kupanga vikundi vya data katika makundi 'k' kwa kutumia mfululizo wa uchunguzi. Kila uchunguzi hufanya kazi ya kuunganisha kipengele cha data kilicho karibu zaidi na 'mean' yake, au kituo cha kundi.

Makundi yanaweza kuonyeshwa kama Voronoi diagrams, ambazo zinajumuisha nukta (au 'mbegu') na eneo lake linalohusiana.

voronoi diagram

infographic na Jen Looper

Mchakato wa K-Means clustering hufanyika kwa hatua tatu:

  1. Algorithimu huchagua idadi ya vituo vya k kwa kuchukua sampuli kutoka seti ya data. Baada ya hapo, inarudia:
    1. Inapanga kila sampuli kwa kituo kilicho karibu zaidi.
    2. Inaunda vituo vipya kwa kuchukua thamani ya wastani ya sampuli zote zilizopangwa kwa vituo vya awali.
    3. Kisha, inahesabu tofauti kati ya vituo vipya na vya zamani na kurudia hadi vituo viwe thabiti.

Changamoto moja ya kutumia K-Means ni kwamba unahitaji kuamua 'k', yaani idadi ya vituo. Kwa bahati nzuri, 'njia ya elbow' husaidia kukadiria thamani nzuri ya kuanzia kwa 'k'. Utajaribu muda si mrefu.

Mahitaji ya awali

Utafanya kazi katika faili ya notebook.ipynb ya somo hili ambayo inajumuisha uingizaji wa data na usafishaji wa awali uliofanya katika somo la mwisho.

Zoezi - maandalizi

Anza kwa kuangalia tena data ya nyimbo.

  1. Unda boxplot, ukitumia boxplot() kwa kila safu:

    plt.figure(figsize=(20,20), dpi=200)
    
    plt.subplot(4,3,1)
    sns.boxplot(x = 'popularity', data = df)
    
    plt.subplot(4,3,2)
    sns.boxplot(x = 'acousticness', data = df)
    
    plt.subplot(4,3,3)
    sns.boxplot(x = 'energy', data = df)
    
    plt.subplot(4,3,4)
    sns.boxplot(x = 'instrumentalness', data = df)
    
    plt.subplot(4,3,5)
    sns.boxplot(x = 'liveness', data = df)
    
    plt.subplot(4,3,6)
    sns.boxplot(x = 'loudness', data = df)
    
    plt.subplot(4,3,7)
    sns.boxplot(x = 'speechiness', data = df)
    
    plt.subplot(4,3,8)
    sns.boxplot(x = 'tempo', data = df)
    
    plt.subplot(4,3,9)
    sns.boxplot(x = 'time_signature', data = df)
    
    plt.subplot(4,3,10)
    sns.boxplot(x = 'danceability', data = df)
    
    plt.subplot(4,3,11)
    sns.boxplot(x = 'length', data = df)
    
    plt.subplot(4,3,12)
    sns.boxplot(x = 'release_date', data = df)
    

    Data hii ina kelele kidogo: kwa kuangalia kila safu kama boxplot, unaweza kuona outliers.

    outliers

Unaweza kupitia seti ya data na kuondoa outliers hizi, lakini hiyo itafanya data kuwa ndogo sana.

  1. Kwa sasa, chagua safu ambazo utatumia kwa zoezi lako la clustering. Chagua zile zenye viwango vinavyofanana na encode safu ya artist_top_genre kama data ya nambari:

    from sklearn.preprocessing import LabelEncoder
    le = LabelEncoder()
    
    X = df.loc[:, ('artist_top_genre','popularity','danceability','acousticness','loudness','energy')]
    
    y = df['artist_top_genre']
    
    X['artist_top_genre'] = le.fit_transform(X['artist_top_genre'])
    
    y = le.transform(y)
    
  2. Sasa unahitaji kuchagua idadi ya makundi ya kulenga. Unajua kuna aina 3 za muziki ambazo tulizitambua kutoka seti ya data, kwa hivyo jaribu 3:

    from sklearn.cluster import KMeans
    
    nclusters = 3 
    seed = 0
    
    km = KMeans(n_clusters=nclusters, random_state=seed)
    km.fit(X)
    
    # Predict the cluster for each data point
    
    y_cluster_kmeans = km.predict(X)
    y_cluster_kmeans
    

Unaona array iliyochapishwa na makundi yaliyotabiriwa (0, 1, au 2) kwa kila safu ya dataframe.

  1. Tumia array hii kuhesabu 'silhouette score':

    from sklearn import metrics
    score = metrics.silhouette_score(X, y_cluster_kmeans)
    score
    

Silhouette score

Tafuta silhouette score iliyo karibu na 1. Alama hii inatofautiana kutoka -1 hadi 1, na ikiwa alama ni 1, kundi ni lenye msongamano na limetenganishwa vizuri na makundi mengine. Thamani karibu na 0 inawakilisha makundi yanayofuatana na sampuli zilizo karibu sana na mpaka wa maamuzi wa makundi jirani. (Chanzo)

Alama yetu ni .53, kwa hivyo iko katikati. Hii inaonyesha kuwa data yetu haifai sana kwa aina hii ya clustering, lakini tuendelee.

Zoezi - unda modeli

  1. Ingiza KMeans na anza mchakato wa clustering.

    from sklearn.cluster import KMeans
    wcss = []
    
    for i in range(1, 11):
        kmeans = KMeans(n_clusters = i, init = 'k-means++', random_state = 42)
        kmeans.fit(X)
        wcss.append(kmeans.inertia_)
    
    

    Kuna sehemu chache hapa zinazostahili maelezo.

    🎓 range: Hizi ni marudio ya mchakato wa clustering

    🎓 random_state: "Inaamua kizazi cha nambari za bahati nasibu kwa uanzishaji wa vituo." Chanzo

    🎓 WCSS: "jumla ya mraba ndani ya kundi" hupima umbali wa wastani wa mraba wa pointi zote ndani ya kundi hadi kituo cha kundi. Chanzo.

    🎓 Inertia: Algorithimu za K-Means hujaribu kuchagua vituo ili kupunguza 'inertia', "kipimo cha jinsi makundi yalivyo thabiti ndani." Chanzo. Thamani inaongezwa kwenye variable ya wcss kwa kila marudio.

    🎓 k-means++: Katika Scikit-learn unaweza kutumia optimization ya 'k-means++', ambayo "inaanzisha vituo kuwa (kwa ujumla) mbali kutoka kwa kila mmoja, na kusababisha matokeo bora zaidi kuliko uanzishaji wa bahati nasibu."

Njia ya Elbow

Hapo awali, ulidhani kwamba, kwa kuwa umelenga aina 3 za muziki, unapaswa kuchagua makundi 3. Lakini je, ni kweli?

  1. Tumia 'njia ya elbow' kuhakikisha.

    plt.figure(figsize=(10,5))
    sns.lineplot(x=range(1, 11), y=wcss, marker='o', color='red')
    plt.title('Elbow')
    plt.xlabel('Number of clusters')
    plt.ylabel('WCSS')
    plt.show()
    

    Tumia variable ya wcss uliyounda katika hatua ya awali kuunda chati inayoonyesha mahali ambapo 'kink' katika elbow iko, ambayo inaonyesha idadi bora ya makundi. Labda ni 3!

    elbow method

Zoezi - onyesha makundi

  1. Jaribu mchakato tena, wakati huu ukichagua makundi matatu, na onyesha makundi kama scatterplot:

    from sklearn.cluster import KMeans
    kmeans = KMeans(n_clusters = 3)
    kmeans.fit(X)
    labels = kmeans.predict(X)
    plt.scatter(df['popularity'],df['danceability'],c = labels)
    plt.xlabel('popularity')
    plt.ylabel('danceability')
    plt.show()
    
  2. Angalia usahihi wa modeli:

    labels = kmeans.labels_
    
    correct_labels = sum(y == labels)
    
    print("Result: %d out of %d samples were correctly labeled." % (correct_labels, y.size))
    
    print('Accuracy score: {0:0.2f}'. format(correct_labels/float(y.size)))
    

    Usahihi wa modeli hii si mzuri sana, na umbo la makundi linakupa dalili kwa nini.

    clusters

    Data hii haina uwiano mzuri, haina uhusiano wa kutosha, na kuna tofauti kubwa sana kati ya thamani za safu ili kuunda makundi vizuri. Kwa kweli, makundi yanayoundwa huenda yameathiriwa sana au yamepotoshwa na aina tatu za muziki tulizotambua hapo juu. Hii ilikuwa mchakato wa kujifunza!

    Katika nyaraka za Scikit-learn, unaweza kuona kwamba modeli kama hii, yenye makundi yasiyo na mipaka dhahiri, ina tatizo la 'variance':

    problem models

    Infographic kutoka Scikit-learn

Variance

Variance inafafanuliwa kama "wastani wa tofauti za mraba kutoka kwa Mean" (Chanzo). Katika muktadha wa tatizo hili la clustering, inahusu data ambayo nambari za seti yetu ya data zina mwelekeo wa kutofautiana sana kutoka kwa wastani.

Huu ni wakati mzuri wa kufikiria njia zote unazoweza kutumia kurekebisha tatizo hili. Kuboresha data kidogo zaidi? Kutumia safu tofauti? Kutumia algorithimu tofauti? Kidokezo: Jaribu kusawazisha data yako ili kuifanya kuwa ya kawaida na ujaribu safu nyingine.

Jaribu 'kikokotoo cha variance' ili kuelewa dhana hii zaidi.


🚀Changamoto

Tumia muda na notebook hii, ukibadilisha vigezo. Je, unaweza kuboresha usahihi wa modeli kwa kusafisha data zaidi (kwa mfano, kuondoa outliers)? Unaweza kutumia uzito ili kutoa uzito zaidi kwa sampuli fulani za data. Je, ni nini kingine unaweza kufanya ili kuunda makundi bora?

Kidokezo: Jaribu kusawazisha data yako. Kuna msimbo ulio na maoni katika notebook unaoongeza scaling ya kawaida ili kufanya safu za data zifanane zaidi kwa karibu katika suala la viwango. Utagundua kwamba ingawa silhouette score inashuka, 'kink' katika grafu ya elbow inakuwa laini. Hii ni kwa sababu kuacha data bila kusawazishwa kunaruhusu data yenye tofauti ndogo kuwa na uzito zaidi. Soma zaidi kuhusu tatizo hili hapa.

Post-lecture quiz

Mapitio na Kujisomea

Angalia Simulator ya K-Means kama hii. Unaweza kutumia zana hii kuonyesha pointi za data za sampuli na kuamua vituo vyake. Unaweza kuhariri nasibu ya data, idadi ya makundi na idadi ya vituo. Je, hii inakusaidia kupata wazo la jinsi data inaweza kugawanywa?

Pia, angalia handout hii kuhusu K-Means kutoka Stanford.

Kazi

Jaribu mbinu tofauti za clustering


Kanusho:
Hati hii imetafsiriwa kwa kutumia huduma ya tafsiri ya AI Co-op Translator. Ingawa tunajitahidi kuhakikisha usahihi, tafadhali fahamu kuwa tafsiri za kiotomatiki zinaweza kuwa na makosa au kutokuwa sahihi. Hati ya asili katika lugha yake ya awali inapaswa kuzingatiwa kama chanzo cha mamlaka. Kwa taarifa muhimu, tafsiri ya kitaalamu ya binadamu inapendekezwa. Hatutawajibika kwa kutoelewana au tafsiri zisizo sahihi zinazotokana na matumizi ya tafsiri hii.