---
# System prepended metadata

title: Day 54-56
tags: [cupoy, ML100]

---

# Day 54-56
###### tags: `cupoy`, `ML100`
:::info

+ 
+ 2022-05-26 20:00
:::
[TOC]

## Day 54 非監督式機器學習簡介
https://lemon-dolomite-062.notion.site/Day-54-c00a1e459f2b45c3be26e49fe7b1013d


### 補充：關聯規則
![](https://i.imgur.com/KdDn5ha.png)
![](https://i.imgur.com/K6Oa7kj.png)


## Day 55 K-means 聚類算法
https://lemon-dolomite-062.notion.site/Day-48-Kaggle-a1a7944ecf254c568a142051fc57339a
## 監督式學習 v.s 分群

![](https://i.imgur.com/gRgzCC0.png)

### K-means 分群概念

![](https://i.imgur.com/DXffZMe.png)


+ 把所有資料點分成 k 個 clusters，使得相同 cluster 中的所有資料點彼此儘量相似，而不同 cluster 的資料點儘量不同。
+ 距離測量（e.g. 歐氏距離）用於計算資料點的相似度和相異度。每個 cluster 有一個中心點。中心點可理解為最能代表 cluster 的點。

## K-means 分群算法流程
+ 假設下圖是我們的 training set，我們目標是將資料分成 2 群
![](https://i.imgur.com/6nXqDUb.png)
+ 隨機選取 2 個點，稱爲 cluster centroid.（群心、中心點）
![](https://i.imgur.com/TqQkLZ6.png)
+ 對每一個樣本點根據它距離哪一群的中心點較近，標記為落在該群之一的點 (*cluster assignment)
![](https://i.imgur.com/cDJofLv.png)

+ 然後把群心移到同一群樣本點的中心點 (*update centroid)
    反覆進行上述的 *cluster assignment 及 *update centroid, 直到樣本點不再被 assign 到與上一次不同的群，便是算法成功收斂完畢。

![](https://i.imgur.com/HJizs1E.png)

+ K-means 目標是使總體群內平方誤差最小
 ![](https://i.imgur.com/Zreel5z.png)

+ 初始值設定 Random initialization：一開始隨機選擇的群中心不同將會得到不同的分群結果！可能導致 local optima（區域最佳解），而非 global optima（全域最佳解）。
![](https://i.imgur.com/6UBpkhM.png)

K 應該為多少?
https://youtu.be/4b5d3muPQmA

Example: https://colab.research.google.com/drive/1-EgotDjlbgXpPY0o1ywRcK46CBB8AP3m#scrollTo=sNUkhfd4DUTT
習題: https://colab.research.google.com/drive/1WPUNPQYnNjfuk3grS8x7BkT1AVTEwlPO#scrollTo=FqU5tKuXFf3C

## Day56 K-mean 觀察 : 使用輪廓分析

### 重點

+ 如何評估非監督式學習的分群結果好壞(or 如何決定k-means的K)?
    因為非監督式學習沒有目標值,所以無法使用目標值的預估與實際差距來評估模型的優劣。但是可以使用輪廓分析來評估。

+ 輪廓分析(Silhouette analysis)

    同一群的資料點應該很近,不同群的資料點應該很遠, 所以設計一種當"同群資料點越近/ 不同資料點越遠"時越大的分數,當資料在兩群交界附近, 希望分數接近0。

    + 輪廓分析公式
        $$S=\frac{b-a}{max(a,b))}$$
        + 凝聚度（a）是指與相同群內的其他點的平均距離
        + 分離度（b）是指與不同群的其他點的平均距離
        + S 是指以一個點作為計算的值
        + 輪廓係數法是將所有的點都計算 S 後再取平均。平均值越大，表示效果越好，適合作為 K

    + 輪廓係數解讀
    ![](https://i.imgur.com/GjOSaD4.png)

        依照不同類別將同類別的輪廓分數排序後顯示, 分數越大代表分群結果越好。黃綠兩組的輪廓值大多在平均以下, 且比例上接近零的點也比較多,顯示這兩組沒有分得那麼開
        平均值(紅色虛線):計算分群的輪廓分數總平均,分的群數分數越多應該分數越小


         + 輪廓分析套件        [sklearn.metrics.silhouette_score](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.silhouette_score.html)
         

 + 其他評估k-means分群的方法
    手肘法（elbow method):基於 SSE（sum of the squared errors，誤差平方和）作為指標，去計算每一個群中的每一個點，到群中心的距離。
    
    [Clustering performance evaluation](https://scikit-learn.org/stable/modules/clustering.html#clustering-performance-evaluation)

### 作業

https://colab.research.google.com/drive/1E43x-igu5thW_iyi_hdAT6eUaopDkY3v#scrollTo=XkKN2s8cFQeM

https://colab.research.google.com/drive/1LftejktvUkP40sMZyNpfvKBXrs56IJCy#scrollTo=fzXUNHpdFeKq
