@ -1,116 +1,116 @@
# 聚類簡介
# 叢集介紹
聚類是一種[無監督學習](https://wikipedia.org/wiki/Unsupervised_learning)方法,假設數據集是未標籤的,或者其輸入未與預定義的輸出匹配。它使用各種算法來處理未標籤的數據,並根據數據中識別的模式進行 分組。
叢集是一種[無監督學習](https://wikipedia.org/wiki/Unsupervised_learning),假設資料集是未標記的,或其輸入並未對應到預定義的輸出。它使用各種演算法來分類未標記的資料,並根據其在資料中辨識的模式提供 分組。
[](https://youtu.be/ty2advRiWJM "PSquare 的 No One Like You")
> 🎥 點擊上方圖片觀看影片。在學習聚類機器學習的同時,欣賞一些尼日利亞舞廳音樂——這是 PSquare 在 2014 年推出的一首 高評價歌曲。
> 🎥 點擊上方圖片觀看影片。當你在學習帶有叢集的機器學習時,欣賞一些奈及利亞舞廳曲目——這是 PSquare 於2014年推出的 高評價歌曲。
## [課前測驗 ](https://ff-quizzes.netlify.app/en/ml/ )
### 簡 介
### 介紹
[聚類](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124 )對於數據探索非常有用。讓我們看看它是否能幫助發現尼日利亞觀眾消費音樂方式的趨勢和 模式。
[叢集](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124 )對資料探索非常有用。讓我們看看它能否幫助發現奈及利亞聽眾消費音樂的趨勢與 模式。
✅ 花一分鐘思考聚類的用途。在現實生活中,聚類發生在你有一堆洗好的衣服需要分類到家人衣物的時候 🧦👕👖🩲。在數據科學中,聚類發生在試圖分析用戶偏好或確定任何未標籤數據集的特徵時。某種程度上,聚類幫助我們從混亂中找到秩序,就像整理襪子抽屜一樣 。
✅ 花一分鐘思考叢集的用途。在現實生活中,當你有一堆洗好的衣服,需要分類家人衣物時就會用到叢集🧦👕👖🩲。在資料科學中,叢集用於分析使用者喜好或確定任何未標記資料集的特性。某種程度上,叢集有助於理解混亂,就像整理襪子抽屜 。
[](https://youtu.be/esmzYhuFnds "聚類簡介 ")
[](https://youtu.be/esmzYhuFnds "叢集介紹 ")
> 🎥 點擊上方圖片觀看影片:麻省理工學院的 John Guttag 介紹聚類
> 🎥 點擊上方圖片觀看影片:MIT 的 John Guttag 介紹叢集
在專業環境中,聚類可以用於確定市場細分,例如確定哪些年齡段購買哪些商品。另一個用途是異常檢測,比如從信用卡交易數據集中檢測欺詐行為。或者,你可以使用聚類來識別一批醫學掃描 中的腫瘤。
在專業環境中,叢集可用於如市場區隔,判斷哪些年齡層購買哪些商品。例如,也可用於異常偵測,可能用於從信用卡交易資料集偵測詐欺。你也可能使用叢集來判斷醫療影像 中的腫瘤。
✅ 花一分鐘思考你是否在銀行、電子商務或商業環境中遇到過聚類 。
✅ 花一分鐘思考你是否在銀行、電子商務或商業環境中遇過「叢集」的應用 。
> 🎓 有趣的是,聚類分析起源於 1930 年代的人類學和心理學領域。你能想像它當時是如何被使用的 嗎?
> 🎓 有趣的是,叢集分析起源於1930年代的人類學和心理學領域。你能想像它當時可能怎麼被使用 嗎?
另外,你可以用它來分組搜索結果——例如按購物鏈接、圖片或評論分組。當你有一個大型數據集需要縮減並進行更細緻的分析時,聚類非常有用,因此這種技術可以在構建其他模型之前幫助了解數據 。
或者,你也可以用於將搜尋結果分組,例如以購物連結、圖片或評價分類。當你有大型資料集想要降維並進行更細緻分析時,叢集很有用,因此此技術可用於在構建其他模型之前先學習資料 。
✅ 一旦你的數據被組織成聚類,你可以為其分配一個聚類 ID。這種技術在保護數據集隱私時非常有用; 你可以用聚類 ID 來引用數據點,而不是使用更具識別性的數據。你能想到其他使用聚類 ID 而不是聚類中其他元素來識別它 的原因嗎?
✅ 一旦資料被組成叢集, 你會分配叢集ID, 這技術在保護資料隱私時很實用; 你可以用叢集ID來代替更揭露個人資料的識別資料。你還能想出其他為什麼要用叢集ID而非叢集中其他元素來識別 的原因嗎?
在這個[學習模組]( https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott)中深入了解聚類 技術。
在這個 [Learn 模組 ]( https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott)中,深入了解叢集 技術。
## 開始使用聚類
## 入門叢集
[Scikit-learn 提供了多種 方法 ](https://scikit-learn.org/stable/modules/clustering.html )來執行聚類。你選擇的方法將取決於你的使用案例。根據文檔,每種方法都有其各自的優勢。以下是 Scikit-learn 支持的方法及其適用場景的簡化表格 :
[Scikit-learn 提供了多種 ](https://scikit-learn.org/stable/modules/clustering.html )叢集方法。選擇的類型視使用案例而定。根據文件說明,每種方法有不同優勢。以下為 Scikit-learn 支援的方法及適用案例簡化表 :
| 方法名稱 | 使用場景 |
| :--------------------------- | :--------------------------------------------------------------------- |
| K-Means | 通用,歸納式 |
| Affinity propagation | 多個、不均勻的聚類,歸納式 |
| Mean-shift | 多個、不均勻的聚類,歸納式 |
| Spectral clustering | 少量、均勻的聚類,轉導式 |
| Ward hierarchical clustering | 多個、受限的聚類,轉導式 |
| Agglomerative clustering | 多個、受限的、非歐幾里得距離的聚類,轉導式 |
| DBSCAN | 非平面幾何、不均勻的聚類,轉導式 |
| OPTICS | 非平面幾何、不均勻且密度可變的聚類,轉導式 |
| Gaussian mixtures | 平面幾何,歸納式 |
| BIRCH | 含有異常值的大型數據集,歸納式 |
| 方法名稱 | 使用案例 |
| :-------------------------- | :--------------------------------------------------------------------- |
| K-Means | 通用, 歸納式( inductive) |
| 親和傳播(Affinity propagation) | 眾多、不均等叢集,歸納式 |
| 平均漂移(Mean-shift) | 眾多、不均等叢集,歸納式 |
| 光譜叢集(Spectral clustering) | 少數、均等叢集, 傳遞式( transductive) |
| Ward 階層叢集 | 多數、有限制叢集,傳遞式 |
| 凝聚叢集(Agglomerative clustering) | 多數、有限制、非歐氏距離,傳遞式 |
| DBSCAN | 非平面幾何、不均等叢集,傳遞式 |
| OPTICS | 非平面幾何、不均等且密度可變叢集,傳遞式 |
| 高斯混合(Gaussian mixtures) | 平面幾何,歸納式 |
| BIRCH | 大型資料集有離群值,歸納式 |
> 🎓 我們如何創建聚類與我們如何將數據點分組密切相關。讓我們來解釋一些術語 :
> 🎓 我們如何創建叢集很大程度上取決於如何將資料點歸成群組。讓我們拆解一些詞彙 :
>
> 🎓 ['轉導式' vs. '歸納式' ](https://wikipedia.org/wiki/Transduction_(machine_learning ))
> 🎓 [『傳遞式(transductive)與歸納式(inductive)』 ](https://wikipedia.org/wiki/Transduction_(machine_learning ))
>
> 轉導式推理來自觀察到的訓練案例,這些案例映射到特定的測試案例。歸納式推理來自訓練案例,這些案例映射到通用 規則,然後才應用於測試案例。
> 傳遞推理是由觀察到的訓練案例映射至特定測試案例所得;歸納推理是由訓練案例推導出一般 規則,然後才應用於測試案例。
>
> 一個例子: 假設你有一個部分標籤的數據集。一些項目是“唱片”, 一些是“CD”, 一些是空白的。你的任務是為空白項目提供標籤。如果你選擇歸納式方法, 你會訓練一個模型來尋找“唱片”和“CD”, 並將這些標籤應用於未標籤數據。這種方法可能無法很好地分類實際上是“磁帶”的項目。而轉導式方法則更有效地處理這些未知數據, 因為它努力將相似的項目分組, 然後為整個組分配一個標籤。在這種情況下, 聚類可能反映“圓形音樂物品”和“方形音樂物品” 。
> 例子: 假設你有部分標記的資料集。有些是『黑膠唱片』, 一些是『CD』, 有些是空白。你的任務是為空白標籤提供標籤。如果你採取歸納方法, 你會訓練模型識別『黑膠唱片』和『CD』, 並將這些標籤套用於未標記資料。此方法對其實是『錄音帶』的分類會很吃力。相反地, 傳遞方法更有效處理未知資料, 因為它先將相似項目分組, 再為群組賦標籤; 在此情況下, 叢集可能會是『圓形音樂物品』和『方形音樂物品』 。
>
> 🎓 ['非平面' vs. '平面' 幾何 ](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering )
> 🎓 [『非平面(non-flat)與平面(flat)幾何』 ](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering )
>
> 來自數學術語,非平面與平面幾何指的是通過“平面”([歐幾里得](https://wikipedia.org/wiki/Euclidean_geometry))或“非平面”(非歐幾里得)幾何方法測量點之間的 距離。
> 源自數學術語,非平面與平面幾何指以『平面』([歐氏幾何](https://wikipedia.org/wiki/Euclidean_geometry))或『非平面』(非歐氏)幾何方法測量點與點間 距離。
>
> '平面'在此上下文中指的是歐幾里得幾何(部分內容在學校被教為“平面幾何”),而非平面指的是非歐幾里得幾何。幾何與機器學習有什麼關係?作為兩個都根植於數學的領域,必須有一種通用的方法來測量聚類中點之間的距離,這可以根據數據的性質以“平面”或“非平面”的方式完成。[歐幾里得距離](https://wikipedia.org/wiki/Euclidean_distance)是通過兩點之間的線段長度來測量的。[非歐幾里得距離](https://wikipedia.org/wiki/Non-Euclidean_geometry)則沿曲線測量。如果你的數據在可視化時似乎不在一個平面上,你可能需要使用專門的算法來處理它 。
>此處『平面』指歐氏幾何(部分稱為『平面』幾何),非平面則指非歐氏幾何。幾何和機器學習有何關係?兩者都根源於數學,必須用共同方法量測叢集內點距離,可依資料性質採用平面或非平面度量方式。 [歐氏距離 ](https://wikipedia.org/wiki/Euclidean_distance )是指兩點連線長度。 [非歐氏距離 ](https://wikipedia.org/wiki/Non-Euclidean_geometry )則沿曲線測量。若你視覺化資料發現它似乎不在平面上,可能需要使用特殊演算法處理 。
>

> 資訊圖表由 [Dasani Madipalli ](https://twitter.com/dasani_decoded ) 提供

> 資訊圖作者:[Dasani Madipalli](https://twitter.com/dasani_decoded)
>
> 🎓 ['距離' ](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf )
> 🎓 [『距離』 ](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf )
>
> 聚類由其距離矩陣定義,例如點之間的距離。這種距離可以通過幾種方式測量。歐幾里得聚類由點值的平均值定義,並包含一個“中心點”或中心點。因此,距離是通過到該中心點的距離來測量的。非歐幾里得距離則指“聚心點”,即最接近其他點的點。聚心點可以通過多種方式定義 。
> 叢集由距離矩陣定義, 例如點與點之間的距離。此距離可用幾種方式測量。歐氏叢集由點值平均定義, 含有『質心』或中心點, 所以距離是以該中心點為依據。非歐氏距離則是指『clustroid』, 即最接近其他點的點, 而clustroid的定義又可有多種變化 。
>
> 🎓 ['受限' ](https://wikipedia.org/wiki/Constrained_clustering )
> 🎓 [『有限制(Constrained)』 ](https://wikipedia.org/wiki/Constrained_clustering )
>
> [受限聚類](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf ) 在這種無監督方法中引入了“半監督”學習。點之間的關係被標記為“不能鏈接”或“必須鏈接”,因此對數據集施加了一些 規則。
> [有限制叢集](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf )在此無監督方法中引入『半監督學習』。點間關係會被標記為『不可連結』或『必須連結』,因此對資料集加上有限制 規則。
>
> 一個例子:如果一個算法在一批未標籤或半標籤數據上自由運行,它生成的聚類可能質量較差。在上述例子中,聚類可能會將“圓形音樂物品”、“方形音樂物品”、“三角形物品”和“餅乾”分組。如果給定一些約束或規則(“物品必須由塑料製成”,“物品需要能夠產生音樂”),這可以幫助“限制”算法做出更好的 選擇。
>舉例:若演算法自由運作於一批未標記或半標記資料,生成的叢集品質可能不佳。上例中,叢集可能僅分為『圓形音樂物品』、『方形音樂物品』、『三角形物品』及『餅乾』。若給予一些限制(「必須為塑膠製成」、「必須能發出音樂」),可協助『限制』演算法做出更佳 選擇。
>
> 🎓 '密度'
> 🎓 『密度』
>
> 被認為“嘈雜”的數據被認為是“密集的”。檢查時,其每個聚類中點之間的距離可能被證明是更密集或更稀疏的,因此需要使用適當的聚類方法來分析這些數據。[這篇文章](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html)展示了使用 K-Means 聚類與 HDBSCAN 算法探索具有不均勻聚類密度的嘈雜數據集的區別 。
> 資料若『雜訊多』即被視為『密集』。叢集中點與點之距離,經過檢視後可能發現或多或少密集或擁擠,因此需要使用適合的叢集方法分析此類資料。 [此文 ](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html )展示使用 K-Means 叢集法與 HDBSCAN 演算法探索帶有不均密叢集的雜訊資料集的差異 。
## 聚類 算法
## 叢集演 算法
有超過 100 種聚類算法,其使用取決於手頭數據的性質。讓我們討論一些主要的 算法:
叢集演算法超過百種,使用取決於資料性質。讓我們說明一些主要演 算法:
- ** 層次聚類**。如果一個物體是通過其與附近物體的接近程度而分類的, 而不是與更遠的物體分類, 則聚類是基於其成員與其他物體的距離形成的。Scikit-learn 的凝聚聚類是層次聚類的一種 。
- < strong > 階層式叢集< / strong > 。若一物件的分類依據是其與附近物件的相似度, 而非更遠物件, 叢集即根據其成員間距離形成。Scikit-learn 的凝聚叢集即為階層式 。

> 資訊圖表由 [Dasani Madipalli ](https://twitter.com/dasani_decoded ) 提供

> 資訊圖作者:[Dasani Madipalli](https://twitter.com/dasani_decoded)
- ** 中心點聚類**。這種流行的算法需要選擇“k”, 即要形成的聚類數量, 然後算法確定聚類的中心點並圍繞該點收集數據。[K-means 聚類](https://wikipedia.org/wiki/K-means_clustering) 是一種流行的中心點聚類方法。中心點由最近的平均值確定,因此得名。從聚類 的平方距離被最小化。
- < strong > 質心叢集</ strong > 。此流行演算法需選擇「k」即叢集數量, 接著演算法判斷叢集中心點, 將資料聚集於該點周圍。 [K-means叢集 ](https://wikipedia.org/wiki/K-means_clustering )為質心叢集的常見方法。中心由最近均值決定,因此得名。叢集 的平方距離被最小化。

> 資訊圖表由 [Dasani Madipalli ](https://twitter.com/dasani_decoded ) 提供

> 資訊圖作者:[Dasani Madipalli](https://twitter.com/dasani_decoded)
- ** 基於分佈的聚類**。基於統計建模,基於分佈的聚類集中於確定數據點屬於某個聚類的概率,並據此分配。高斯混合方法屬於這種類型 。
- < strong > 基於分布的叢集< / strong > 。基於統計建模,分布式叢集著重判定資料點屬於叢集的概率,並依此指派。高斯混合方法即屬此類 。
- ** 基於密度的聚類**。數據點根據其密度或它們彼此之間的分組被分配到聚類中。遠離群體的數據點被認為是異常值或噪聲。DBSCAN、Mean-shift 和 OPTICS 屬於這種類型的聚 類。
- < strong > 基於密度的叢集< / strong > 。根據資料點間密度或群聚程度指派叢集, 遠離群體的點被視為離群或噪聲。DBSCAN、平均漂移和 OPTICS 屬於此 類。
- ** 基於網格的聚類**。對於多維數據集,創建一個網格,並將數據分配到網格的單元中,從而創建聚類 。
- < strong > 基於格點的叢集< / strong > 。對多維資料集建立格子,將資料分配至格點內,進而形成叢集 。
## 練習 - 聚類你的數據
## 練習 - 對你的資料進行叢集
聚類作為一種技術在適當的可視化幫助下效果更佳,因此讓我們從可視化我們的音樂數據開始。這個練習將幫助我們決定針對這些數據的性質最有效使用哪種聚類 方法。
叢集技術大大受惠於良好視覺化,讓我們從視覺化音樂資料開始。此練習將助我們決定對此資料性質應最有效使用哪種叢集 方法。
1. 打開此文件夾中 的 [_notebook.ipynb_ ](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb )。
1. 開啟此資料夾內 的 [_notebook.ipynb_ ](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb ) 檔案 。
1. 導入 `Seaborn` 套件以進行良好的數據可視 化。
1. 匯入 `Seaborn` 套件以進行良好資料視覺 化。
```python
!pip install seaborn
```
1. 從 [_nigerian-songs.csv_ ](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv ) 附加歌曲數據。加載一個包含歌曲數據的數據框。通過導入庫並輸出數據來準備探索這些數據 :
1. 附加 [_nigerian-songs.csv_ ](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv ) 的歌曲資料。載入包含歌曲資料的 dataframe。準備引入函式庫並匯出資料以探索它 :
```python
import matplotlib.pyplot as plt
@ -120,23 +120,23 @@
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Ø | 獨立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 | 奈及利亞流行音樂 | 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) | 非洲流行音樂 | 2018 | 152049 | 25 | 0.702 | 0.116 | 0.833 | 0.91 | 0.348 | -6.044 | 0.0447 | 105.115 | 4 |
| 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 |
1. 獲取數據框的基本 資訊,呼叫 `info()` :
1. 取得一些關於資料框的 資訊,呼叫 `info()` :
```python
df.info()
```
輸出如下所示 :
輸出看起來像這樣 :
```output
< class ' pandas . core . frame . DataFrame ' >
@ -164,7 +164,7 @@
memory usage: 66.4+ KB
```
1. 通過呼叫 `isnull()` 並驗證總和是否為 0, 仔細檢查是否有空值 :
1. 再次檢查是否有空值,呼叫 `isnull()` 並確認總和是 0 :
```python
df.isnull().sum()
@ -192,7 +192,7 @@
dtype: int64
```
1. 描述數據 :
1. 描述資料 :
```python
df.describe()
@ -209,11 +209,11 @@
| 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",這表示歌曲沒有排名。我們稍後會移除這些數據 。
觀察資料的一般數值。注意人氣( popularity) 可以是 '0',表示歌曲沒有排名。稍後我們將移除這些 。
1. 使用條形 圖找出最受歡迎的音樂 類型:
1. 使用長 條圖找出最受歡迎的類型:
```python
import seaborn as sns
@ -225,13 +225,13 @@
plt.title('Top genres',color = 'blue')
```


✅ 如果你想查看更多的前幾名數據,可以將 `[:5]` 改為更大的值,或者 移除它以查看全部。
✅ 如果你想看更多頂尖值,將前五筆的 `[:5]` 改成更大數字,或 移除它以查看全部。
注意,當最受歡迎的類型被描述為 "Missing" 時,這表示 Spotify 沒有對其進行分類,因此我們需要 將其移除。
注意,當最熱門類型顯示為「Missing」時, 表示 Spotify 沒有分類這類型,所以我們 將其移除。
1. 通過篩選移除缺失數據:
1. 透過篩選排除缺失資料
```python
df = df[df['artist_top_genre'] != 'Missing']
@ -242,11 +242,11 @@
plt.title('Top genres',color = 'blue')
```
現在重新檢查音樂 類型:
現在再檢查這些 類型:


1. 顯然,前三大音樂類型在這個數據集中占據主導地位。我們專注於 `afro dancehall` 、`afropop` 和 `nigerian pop` ,並進一步篩選數據,移除任何受歡迎度為 0 的數據(這表示數據集中未被分類為受歡迎的歌曲,對我們的目的來說可以視為噪聲 ) :
1. 前三大類型明顯主導此資料集。我們將專注於 `afro dancehall` 、`afropop` 與 `nigerian pop` ,並進一步篩選資料,移除人氣值為 0 的資料(表示資料集中未分類的人氣,可以視為噪音 ) :
```python
df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')]
@ -258,7 +258,7 @@
plt.title('Top genres',color = 'blue')
```
1. 快速測試數據是否有特別強的 相關性:
1. 快速測試資料是否存在明顯強 相關性:
```python
corrmat = df.corr(numeric_only=True)
@ -266,21 +266,21 @@
sns.heatmap(corrmat, vmax=.8, square=True)
```


唯一的強相關性是 `energy` 和 `loudness` 之間,這並不令人驚訝,因為響亮的音樂通常充滿活力。除此之外,相關性相對較弱。看看聚類算法如何處理這些數據 會很有趣。
唯一強烈相關的是 `energy` 和 `loudness` ,這不意外,因為響亮的音樂通常很有能量。其他相關性較弱。看看聚類演算法對此資料會做出什麼樣的判斷 會很有趣。
> 🎓 請注意,相關性並不意味著因果關係!我們有相關性的證據,但沒有因果關係的證據。一個[有趣的網站](https://tylervigen.com/spurious-correlations) 提供了一些強調這一點的視覺化內容 。
> 🎓 注意,相關性不代表因果關係!我們只有相關證明,沒有因果證明。一個 [有趣的網站 ](https://tylervigen.com/spurious-correlations ) 有一些視覺化例子強調這點 。
在這個數據集中,歌曲的受歡迎度和舞蹈性是否存在某種趨同?使用 FacetGrid 可以看到無論音樂類型如何,都有一些同心圓的分佈。是否可能奈及利亞的品味在這些類型的舞蹈性上達到了一定的趨同水平 ?
這個資料集中, 歌曲的人氣感受與舞蹈感是否有任何收斂現象? FacetGrid 顯示無論類型如何都有一圈圈的同心圓。難道奈及利亞口味對這類型的舞蹈感有某個共同比例 ?
✅ 嘗試不同的數據點(如 energy、loudness、speechiness) 以及更多或不同的音樂類型。你能發現什麼? 查看 `df.describe()` 表格,了解數據點的一般分佈 。
✅ 嘗試不同的數據點(能量、音量、說話性)和更多或不同音樂類型。你會發現什麼?看看 `df.describe()` 表格了解資料的整體分布 。
### 練習 - 數據分佈
### 練習 - 數據分布
這三種音樂類型在受歡迎度和舞蹈性上的感知是否 有顯著差異?
這三種類型在舞蹈感的認知上是否根據人氣 有顯著差異?
1. 檢查我們的前三大音樂類型在受歡迎度和舞蹈性上的數據分佈,沿著給定的 x 和 y 軸 。
1. 觀察我們前三大類型在人氣和舞蹈感的資料分布,以特定 x 軸和 y 軸繪圖 。
```python
sns.set_theme(style="ticks")
@ -292,15 +292,15 @@
)
```
你可以發現圍繞一個一般趨同點的同心圓,顯示數據點的分佈 。
你可以看出圍繞一個總體偏好的同心圓點,顯示資料點分布 。
> 🎓 請注意,此示例使用的是 KDE( 核密度估計) 圖, 該圖使用連續的概率密度曲線來表示數據。這在處理多個分佈時非常有用 。
> 🎓 本範例使用 KDE( 核密度估算) 圖, 通過連續的機率密度曲線來表示資料。這讓我們在處理多種分布時能更好詮釋資料 。
總的來說,這三種音樂類型在受歡迎度和舞蹈性上大致對齊。在這些大致對齊的數據中確定聚類將 是一個挑戰:
三種類型在人氣和舞蹈感上大致呈鬆散對齊。判斷這鬆散對齊資料中的群聚會 是一個挑戰:


1. 創建一個散點 圖:
1. 繪製散佈 圖:
```python
sns.FacetGrid(df, hue="artist_top_genre", height=5) \
@ -308,31 +308,33 @@
.add_legend()
```
同一軸上的散點圖顯示了類似的趨同 模式
相同維度的散點圖顯示相似的收斂 模式


總的來說,對於聚類,你可以使用散點圖來顯示數據的聚類,因此掌握這種類型的可視化非常有用。在下一課中,我們將使用 k-means 聚類來探索這些數據中有趣的重疊群組 。
一般而言,用於聚類分析時,你可以使用散點圖來顯示資料群聚,因此掌握這類可視化非常重要。下一課我們將使用此過濾後的資料,透過 k-means 聚類找出資料中有趣的重疊群聚 。
---
## 🚀挑戰
為下一課做準備,製作一個關於你可能在生產環境中發現和使用的各種聚類算法的圖表。聚類試圖解決哪些 問題?
為下一課做好準備,畫出你可能會發現並在生產環境中使用的各種聚類演算法的圖表。聚類嘗試解決什麼類型的 問題?
## [課後 測驗 ](https://ff-quizzes.netlify.app/en/ml/ )
## [課後 小考 ](https://ff-quizzes.netlify.app/en/ml/ )
## 回顧 與自學
## 複習 與自學
在應用聚類算法之前,正如我們所學,了解數據集的性質是個好主意。閱讀更多相關內容[這裡]( https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html)
在應用聚類演算法前,我們如同學習到的,理解資料集本質是很重要的。更多資訊請參考 [這裡 ]( https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html )。
[這篇有幫助的文章 ](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/ ) 介紹了不同聚類算法在不同數據形狀 下的行為。
[這篇有幫助的文章 ](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/ ) 引導你瞭解不同聚類演算法在不同資料形態 下的行為。
## 作業
[研究其他聚類 的可 視化方法 ](assignment.md )
[研究其他聚類 視覺 化](assignment.md )
---
**免責聲明**:
本文件使用 AI 翻譯服務 [Co-op Translator ](https://github.com/Azure/co-op-translator ) 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。
<!-- CO - OP TRANSLATOR DISCLAIMER START -->
**免責聲明**:
此文件已使用 AI 翻譯服務 [Co-op Translator ](https://github.com/Azure/co-op-translator ) 進行翻譯。雖然我們努力追求準確性,但請注意自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應視為權威來源。對於關鍵資訊,建議採用專業人工翻譯。我們不對因使用此翻譯所產生的任何誤解或誤譯承擔責任。
<!-- CO - OP TRANSLATOR DISCLAIMER END -->