iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 11
0

還記得我們所說的,監督式機器學習是需要「正確答案」的,因此反過來說,非監督式機器學習就是不需要給定一個正確答案,那沒有正確答案要預測什麼呢?

非監督式機器學習在做什麼?

當你在各式各樣的場合,例如廣告行銷、推薦系統等等並沒有絕對標準答案的預測目標,這時候需要找到的目標就是相似的對象了,像是廣告的客群可以有類似的屬性,因此可以藉由這個達到更精準的廣告投放等等。

非監督式機器學習的優缺點

  • 優點
    不用任何標籤就可以進行訓練,在準備資料上較容易。
  • 缺點
    預測的結果並沒有辦法準確的評估,雖然可以透過分群(cluster)的一些評估水準來觀察是否算是好的分群,但是沒有標準答案,分得不好也不會察覺。並且大多使用「距離」作為分群的依據,在一些方法上容易因為標準化而導致部分的資訊失真。

非監督式機器學習有哪些呢?

分群最著名的就是K-means演算法,透過樣本點之間的距離來計算相似程度,從而將樣本點分為同一群,此外還有克服特殊圖形的DBscan等等特殊的算法。

非監督式學習怎麼用呢?

首先最重要的部分,由於非監督式機器學習使用距離作為分群,因此標準化是最重要的預處理。

from sklearn.preprocessing import StandardScaler # 標準化套件
sc = StandardScaler() # 創建一個標準化的物件
sc.fit(dummies) # 針對df的資料進行計算
dummies_std = sc.transform(df) # 生成標準化資料

你可能會問,原本的資料不是已經標準化了,再標準化一次不會出錯嗎?
由於標準化是讓平均為0標準差為1,因此之後再執行標準化並不會影響到已經標準化的列。

from sklearn.cluster import KMeans # 匯入kMeans套件
km = KMeans(n_clusters=3) # 產生kmean
y_pred = km.fit_predict(dummies_std)

產生分群結果之後我們可以簡單的將答案視覺化來觀察分群的效果,並使用分群結果進行上色。

import matplotlib.pyplot as plt
plt.rcParams['font.family']='SimHei' # 顯示中文字體

plt.figure(figsize=(10,8))
plt.scatter(df["s3"],df['bmi'],c=y_pred)
plt.xlabel('s3', fontsize=20)
plt.ylabel('bmi', fontsize=20)


以肉眼直觀來看可能會覺得分的不是非常的好,但這是因為在其他資料上也有著不同的影響,我們可以等之後使用特徵降維,將多個數據呈現在二維平面上。


上一篇
DAY[10]-監督式機器學習
下一篇
DAY[12]-機器學習(3)整體學習
系列文
Python機器學習介紹與實戰30

尚未有邦友留言

立即登入留言