|
|
3 months ago | |
|---|---|---|
| .. | ||
| solution | 7 months ago | |
| README.md | 3 months ago | |
| assignment.md | 7 months ago | |
| notebook.ipynb | 11 months ago | |
README.md
Utangulizi wa uundaji makundi
Uundaji makundi ni aina ya Mafunzo yasiyoongozwa ambayo inadhani dataset haina lebo au kwamba pembejeo zake hazilingani na matokeo yaliyowekwa awali. Inatumia algoriti mbalimbali kuchambua data isiyolebwa na kutoa makundi kulingana na mifumo inayoiona katika data.
🎥 Bofya picha hapo juu kwa video. Unapojifunza mashine ya kujifunza na uundaji makundi, furahia baadhi ya nyimbo za Nigerian Dance Hall - hii ni wimbo uliopewa alama kubwa kutoka 2014 na PSquare.
Mtihani wa kabla ya duru
Utangulizi
Uundaji makundi ni muhimu sana kwa uchunguzi wa data. Tuchunguze ikiwa inaweza kusaidia kugundua mwenendo na mifumo katika njia ambayo hadhira wa Nigeria huchukua muziki.
✅ Chukua dakika moja kufikiria matumizi ya uundaji makundi. Katika maisha halisi, uundaji makundi hutokea wakati wowote unapokuwa na mfululizo wa nguo za kulazimika kupangilia nguo za wanak family wako 🧦👕👖🩲. Katika sayansi ya data, uundaji makundi hutokea wakati wa kujaribu kuchambua upendeleo wa mtumiaji, au kubaini sifa za dataset yoyote isiyo na lebo. Uundaji makundi, kwa namna fulani, husaidia kufasiri machafuko, kama vile kivuli cha soksi.
🎥 Bofya picha hapo juu kwa video: John Guttag wa MIT anaanzisha uundaji makundi
Katika mazingira ya kazi, uundaji makundi unaweza kutumika kuamua vitu kama segmentation ya soko, kuamua ni makundi ya umri gani yanayonunua vitu gani, kwa mfano. Matumizi mengine ni kugundua kasoro, labda kugundua udanganyifu kutoka kwa dataset ya miamala ya kadi ya mkopo. Au unaweza kutumia uundaji makundi kubaini uvimbe katika kundi la skani za matibabu.
✅ Fikiria kwa dakika moja jinsi ulivyoweza kukutana na uundaji makundi 'katika mazingira halisi', katika benki, e-commerce, au mazingira ya biashara.
🎓 Kwa kufurahisha, uchambuzi wa makundi ulizaliwa katika nyanja za Anthropology na Psychology katika miaka ya 1930. Unaweza kufikiria jinsi ulivyotumika?
Vinginevyo, unaweza kuitumia kwa kuandaa matokeo ya utafutaji - kwa viungo vya kununua, picha, au mapitio, kwa mfano. Uundaji makundi ni wa manufaa wakati una dataset kubwa unayotaka kupunguza na kufanya uchambuzi wa kina zaidi, hivyo mbinu hii inaweza kutumika kujifunza kuhusu data kabla ya kujengwa modeli nyingine.
✅ Mara dataset yako inapowekwa katika makundi, unampa kitambulisho cha kundi, na mbinu hii inaweza kuwa muhimu wakati wa kuhifadhi faragha ya dataset; badala yake unaweza kurejelea kipengele kwa kitambulisho cha kundi, badala ya data inayofichua zaidi. Unaweza kufikiria sababu nyingine kwanini utarejelea kitambulisho cha kundi badala ya vipengele vingine vya kundi ili kukitambulisha?
Inua uelewa wako wa mbinu za uundaji makundi katika moduli ya Kujifunza
Kuanzisha na uundaji makundi
Scikit-learn inatoa mbinu nyingi za kufanya uundaji makundi. Aina unayochagua itategemea matumizi yako. Kulingana na nyaraka, kila mbinu ina faida mbalimbali. Hapa kuna jedwali lililorahisishwa la mbinu zinazoungwa mkono na Scikit-learn na matumizi yake yanayofaa:
| Jina la mbinu | Matumizi |
|---|---|
| K-Means | matumizi ya jumla, inductive |
| Affinity propagation | makundi mengi, yasiyo sawa, inductive |
| Mean-shift | makundi mengi, yasiyo sawa, inductive |
| Spectral clustering | makundi machache, sawa, transductive |
| Ward hierarchical clustering | makundi mengi, yanayozuiliwa, transductive |
| Agglomerative clustering | makundi mengi, yanayozuiliwa, umbali usiotegemea Euclid, transductive |
| DBSCAN | jiometri isiyo sawa, makundi yasiyo sawa, transductive |
| OPTICS | jiometri isiyo sawa, makundi yasiyo sawa yenye msongamano tofauti, transductive |
| Gaussian mixtures | jiometri sare, inductive |
| BIRCH | dataset kubwa yenye ving'ora, inductive |
🎓 Jinsi tunavyounda makundi ina uhusiano mkubwa na jinsi tunavyokusanya data katika makundi. Hebu tufafanue baadhi ya msamiati:
🎓 'Transductive' dhidi ya 'inductive'
Hitimisho la transductive linatokana na kesi za mafunzo zilizoonekana zinazofanana na kesi maalum za mtihani. Hitimisho la inductive linatokana na kesi za mafunzo zinazofikia sheria za jumla ambazo kisha hutumika kwa kesi za mtihani.
Mfano: Fikiria una dataset iliyolebwa sehemu tu. Baadhi ni 'rekodi', baadhi ni 'cds', na baadhi hazina kitu. Kazi yako ni kuweka lebo kwa zile zisizo na lebo. Ukichagua njia ya inductive, ungefundisha modeli kutafuta 'rekodi' na 'cds', na kutumia lebo hizo kwa data isiyo na lebo. Njia hii itakumbwa na shida katika kutambua vitu ambavyo kwa kweli ni 'kaseti'. Njia ya transductive, kwa upande mwingine, hushughulikia data isiyojulikana vyema zaidi kwa kujaribu kuunganisha vitu vinavyofanana kisha kuweka lebo kwa kundi. Katika kesi hii, makundi yanaweza kuwakilisha 'vitu vya muziki mviringo' na 'vitu vya muziki vya mraba'.
🎓 'Jiometri isiyo sare' dhidi ya 'jiometri sare'
Inatokana na istilahi za hisabati, jiometri isiyo sare dhidi ya sare inahusu kipimo cha umbali kati ya pointi kwa kutumia mbinu za jiometri 'sare' (Euclidean) au 'isiyo sare' (isiyo-Euclidean).
'Sare' katika muktadha huu inahusu jiometri ya Euclid (sehemu zake hufundishwa kama jiometri ya 'mwelekeo'), na isiyo sare inahusu jiometri isiyo-Euclidean. Jiometri ina mahusiano gani na mashine ya kujifunza? Vizuri, kama nyanja mbili zinazotegemea hisabati, lazima kuwe na njia ya kawaida ya kupima umbali kati ya pointi za makundi, na hiyo inaweza kufanywa kwa njia ya 'sare' au 'isiyo sare', kulingana na asili ya data. Umbali wa Euclid hupimwa kama urefu wa kipengele cha mstari kati ya pointi mbili. Umbali usio wa Euclid hupimwa kwa njia ya mviringo. Ikiwa data yako, ikionyeshwa, inaonekana haitokani na ndege, unaweza kuhitaji kutumia algoriti maalum kushughulikia.
Infograpiki na Dasani Madipalli
🎓 'Umbali'
Makundi hufafanuliwa na matriki ya umbali wake, mfano umbali kati ya pointi. Umbali huu unaweza kupimwa kwa njia kadhaa. Makundi ya Euclid hufafanuliwa na wastani wa thamani za pointi, na yana 'centroid' au kituo cha katikati. Umbali hupimwa kwa umbali hadi kwenye centroid hiyo. Umbali wa isiyo ya Euclid unahusu 'clustroids', pointi inayokaribia pointi zingine. Clustroids pia zinaweza kufafanuliwa kwa njia mbalimbali.
Uundaji Makundi Yanayozuiliwa huingiza mafunzo ya 'nusu-ongozwa' katika mbinu hii isiyoongozwa. Uhusiano kati ya pointi huwekwa kama 'haipatikani kiunganishi' au 'lazima iunganishwe' hivyo sheria fulani hutumika kwenye dataset.
Mfano: Ikiwa algoriti huru itatumiwa kwenye kundi la data isiyo na lebo au isiyo kamili, makundi itakayozalisha yanaweza kuwa ya ubora mdogo. Katika mfano hapo juu, makundi yanaweza kuunganisha 'vitu vya muziki mviringo' na 'vitu vya muziki vya mraba' na 'vitu vya mviringo wa pembetatu' na 'biskuti'. Ikiwa itapewa vikwazo au sheria za kufuata ("kitu lazima kifanywe kwa plastiki", "kitu kinapaswa kuweza kutoa muziki") hii inaweza kusaidia 'kuzuia' algoriti kuchagua vyema.
🎓 'Msongamano'
Data ambayo ni 'kelele' huchukuliwa kuwa na 'msongamano'. Umbali kati ya pointi katika kila kundi linaweza kuonyesha kuwa na msongamano mkubwa au mdogo, au 'kushikana'. Hivyo data hii inahitaji kuchambuliwa kwa njia inayofaa ya uundaji makundi. Makala hii inaonyesha tofauti kati ya kutumia K-Means dhidi ya HDBSCAN kuchunguza dataset yenye msongamano usio sawa.
Algoriti za uundaji makundi
Kuna zaidi ya algoriti 100 za uundaji makundi, na matumizi yao hutegemea asili ya data iliyopo. Tujadili baadhi ya maarufu:
-
Uundaji makundi wa mfuatano. Ikiwa kitu kinaainishwa kwa ukaribu wake na kitu kilicho karibu badala ya kile kilicho mbali, makundi hudhibitiwa kwa umbali wa wanachama na vitu vingine. Uundaji makundi wa agglomerative wa Scikit-learn ni wa mfuatano.
Infograpiki na Dasani Madipalli
-
Uundaji makundi wa kituo. Algoriti hii maarufu inahitaji kuchagua 'k', au idadi ya makundi ya kuunda, kisha algoriti huamua kituo cha katikati cha kundi na kukusanya data karibu na kituo hicho. K-means clustering ni toleo maarufu la uundaji makundi wa kituo. Kituo kinaamuliwa na wastani wa karibu, hivyo jina. Umbali wa mraba kutoka kwenye kundi hupunguzwa.
Infograpiki na Dasani Madipalli
-
Uundaji makundi wa msingi wa usambazaji. Msingi wake ni utambuzi wa uwezekano kwamba kipengele cha data kinahusishwa na kundi, na kupewa lebo ipasavyo. Mbinu za mchanganyiko wa Gaussian zinahusiana na aina hii.
-
Uundaji makundi kwa msongamano. Pointi za data huthibitishwa katika makundi kulingana na msongamano wake, au kuungana kwazo. Pointi zilizo mbali na kundi huonekana kama ving'ora au kelele. DBSCAN, Mean-shift na OPTICS ni aina hii ya uundaji makundi.
-
Uundaji makundi wa msingi wa gridi. Kwa datasets zenye vipimo vingi, gridi huundwa na data kugawanywa kwa seli za gridi, hivyo kuunda makundi.
Zoema - unda makundi ya data yako
Uundaji makundi kama mbinu huwasaidia sana na uonyesho mzuri, kwa hivyo tuanze kwa kuonyesha data yetu ya muziki. Zoema hili litatusaidia kuamua Mbinu gani ya uundaji makundi tunapaswa kutumia kwa ufanisi zaidi kulingana na asili ya data hii.
-
Fungua faili la notebook.ipynb katika saraka hii.
-
Ingiza kifurushi cha
Seabornkwa ajili ya uonyesho mzuri wa data.!pip install seaborn -
Ongeza data ya nyimbo kutoka nigerian-songs.csv. Pakia dataframe lenye taarifa kuhusu nyimbo. Jiandae kuchunguza data hii kwa kuingiza maktaba na kuonyesha data:
import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv("../data/nigerian-songs.csv") df.head()Angalia mistari michache ya kwanza ya data:
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 Furahia Maisha Yako 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 -
Pata baadhi ya taarifa kuhusu dataframe, kwa kuitisha
info():df.info()Matokeo yanaonekana kama ifuatavyo:
<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 -
Thibitisha mara mbili kama kuna thamani tupu, kwa kuitisha
isnull()na kuthibitisha jumla kuwa 0:df.isnull().sum()Inaonekana nzuri:
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 -
Elezea 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
🤔 Ikiwa tunafanya kazi na usambazaji wa makundi, njia isiyo ya usaidizi ambayo haitaji data yenye lebo, kwanini tunaonyesha data hii na lebo? Katika hatua ya uchunguzi wa data, huwa ni ya msaada, lakini sio lazima kwa algorithms za ugawaji kufanya kazi. Unaweza pia kuondoa vichwa vya safu na kurejelea data kwa nambari ya safu.
Tazama thamani za jumla za data. Kumbuka kwamba umaarufu unaweza kuwa '0', ambayo inaonyesha nyimbo ambazo hazina nafasi. Wacha tujiondoe kwa muda mfupi.
-
Tumia barplot ili kufahamu aina maarufu zaidi:
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')
✅ Ikiwa ungependa kuona maadili zaidi ya juu, badilisha top [:5] kwa thamani kubwa zaidi, au uiondoe ili uone yote.
Kumbuka, wakati aina kuu imeelezwa kama 'Missing', hiyo ina maana kwamba Spotify hairatibu, hivyo wacha tuiondoe.
-
Ondoa data iliyokosekana kwa kuchuja
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')Sasa angalia tena aina za muziki:
-
Kwa mbali, aina kuu tatu ndizo zinazoongoza dataset hii. Tujitunze
afro dancehall,afropop, nanigerian pop, pia chuja dataset ili kuondoa chochote kilicho na thamani ya umaarufu wa 0 (maana yake haikuainishwa na umaarufu katika dataset na inaweza kuchukuliwa kama kelele kwa malengo yetu):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') -
Fanya jaribio la haraka kuona kama data ina uhusiano wa nguvu kwa namna yoyote:
corrmat = df.corr(numeric_only=True) f, ax = plt.subplots(figsize=(12, 9)) sns.heatmap(corrmat, vmax=.8, square=True)Uhusiano pekee wenye nguvu ni kati ya
energynaloudness, ambalo si la kushangaza sana, kwa kuwa muziki wenye sauti kubwa kawaida huwa na nguvu nyingi. Vinginevyo, uhusiano ni dhaifu zaidi. Itakuwa ya kuvutia kuona algorithm ya ugawaji itachunguza data hii vipi.🎓 Kumbuka kuwa uhusiano hauashirii sababu! Tuna ushahidi wa uhusiano lakini hatuna ushahidi wa sababu. Tovuti ya kusisimua ina picha zinazobainisha hili.
Je, kuna muungano wowote katika dataset hii kuhusu umaarufu unaoonekana wa wimbo na danceability? FacetGrid inaonyesha kuwa kuna duara zinazopangwa sawia, bila kujali aina ya muziki. Je, inawezekana ladha za Nigeria zinafanana kwa kiwango fulani cha danceability kwa aina hii ya muziki?
✅ Jaribu pointi tofauti za data (energy, loudness, speechiness) na aina za muziki tofauti au zaidi. Unaweza kugundua nini? Tazama jedwali la df.describe() kuona usambazaji wa jumla wa pointi za data.
Mazoezi - usambazaji wa data
Je, aina hizi tatu tofauti sana katika mtazamo wa danceability yao, kulingana na umaarufu wao?
-
Chunguza usambazaji wa data wa aina zetu tatu kuu kwa umaarufu na danceability kupitia mhimili uliopewa wa x na y.
sns.set_theme(style="ticks") g = sns.jointplot( data=df, x="popularity", y="danceability", hue="artist_top_genre", kind="kde", )Unaweza kugundua duara zinazopangwa sawia karibu na sehemu ya jumla ya muungano, ikionyesha usambazaji wa pointi.
🎓 Kumbuka mfano huu unatumia grafu ya KDE (Kernel Density Estimate) inayowakilisha data kwa kutumia mkoa wa uwezekano unaoendelea. Hii inatuwezesha kufasiri data tunapofanya kazi na usambazaji wengi.
Kwa ujumla, aina tatu zinaelewana kwa kiwango katika umaarufu na danceability. Kuweka makundi katika data hii isiyopangwa vizuri itakuwa changamoto:
-
Unda grafu ya kuchoragatia:
sns.FacetGrid(df, hue="artist_top_genre", height=5) \ .map(plt.scatter, "popularity", "danceability") \ .add_legend()Grafu ya kuchoragatia ya mihimili ile ile inaonyesha muundo kama huo wa muungano
Kwa ujumla, kwa ugawaji, unaweza kutumia grafu za kuchoragatia kuonyesha makundi ya data, hivyo kumudu aina hii ya uonyeshaji ni muhimu sana. Katika somo lijalo, tutachukua data hii iliyochujwa na kutumia ugawaji wa k-means kugundua makundi katika data hii yanayoonekana kuyopanga kwa njia za kuvutia.
🚀Changamoto
Kujitayarisha kwa somo lijalo, tengeneza chati kuhusu algorithms mbalimbali za ugawaji ambazo unaweza kugundua na kutumia katika mazingira ya uzalishaji. Ni aina gani za matatizo ugawaji unajaribu kushughulikia?
Mtihani wa baada ya somo
Mapitio & Kujifunza Binafsi
Kabla ya kutumia algorithms za ugawaji, kama tulivyojifunza, ni wazo zuri kuelewa asili ya dataset yako. Soma zaidi kuhusu mada hii hapa
Makala hii yenye msaada inakuongoza kupitia njia tofauti algorithms za ugawaji zinavyofanya kazi, zikizingatiwa maumbo tofauti ya data.
Kazi ya Nyumbani
Tafuta maonyesho mengine ya ugawaji
Kionyozo: Hati hii imetafsiriwa kwa kutumia huduma ya tafsiri ya AI Co-op Translator. Ingawa tunajitahidi kupata usahihi, tafadhali fahamu kwamba tafsiri za kiotomatiki zinaweza kuwa na makosa au upungufu wa usahihi. Hati ya asili katika lugha yake halisi inapaswa kuchukuliwa kama chanzo cha mamlaka. Kwa taarifa muhimu, tafsiri ya kitaalamu inayofanywa na binadamu inapendekezwa. Hatutojibu kwa kuelewa vibaya au tafsiri potofu zinazotokea kutokana na matumizi ya tafsiri hii.









