Unsupervised Learning in Python
Benjamin Wilson
Director of Research at lateral.io
來自 3 種皮埃蒙紅酒品種的 178 個樣本:Barolo、Grignolino、Barbera
特徵量測化學成分,例如酒精含量
視覺性質,如「顏色強度」
from sklearn.cluster import KMeans
model = KMeans(n_clusters=3)
labels = model.fit_predict(samples)
df = pd.DataFrame({'labels': labels, 'varieties': varieties}) ct = pd.crosstab(df['labels'], df['varieties'])print(ct)
varieties Barbera Barolo Grignolino
labels
0 29 13 20
1 0 46 1
2 19 0 50
紅酒特徵的變異數差很大!
特徵的變異數衡量其數值的分散程度
feature variance
alcohol 0.65
malic_acid 1.24
...
od280 0.50
proline 99166.71

紅酒特徵的變異數差很大!
特徵的變異數衡量其數值的分散程度
feature variance
alcohol 0.65
malic_acid 1.24
...
od280 0.50
proline 99166.71

在 kmeans 中:特徵變異數 = 特徵影響力
StandardScaler 將各特徵轉換為平均 0、變異數 1
這些特徵稱為「標準化」

from sklearn.preprocessing import StandardScalerscaler = StandardScaler()scaler.fit(samples) StandardScaler(copy=True, with_mean=True, with_std=True)samples_scaled = scaler.transform(samples)
StandardScaler 與 KMeans 有相似的方法
StandardScaler 用 fit()/transform()
KMeans 用 fit()/predict()
需做兩步:先 StandardScaler,再 KMeans
用 sklearn pipeline 合併多步驟
資料會依序流經各步驟
from sklearn.preprocessing import StandardScaler from sklearn.cluster import KMeans scaler = StandardScaler() kmeans = KMeans(n_clusters=3)from sklearn.pipeline import make_pipelinepipeline = make_pipeline(scaler, kmeans)pipeline.fit(samples)
Pipeline(steps=...)
labels = pipeline.predict(samples)
使用特徵標準化:
varieties Barbera Barolo Grignolino
labels
0 0 59 3
1 48 0 3
2 0 0 65
未標準化的結果很差:
varieties Barbera Barolo Grignolino
labels
0 29 13 20
1 0 46 1
2 19 0 50
StandardScaler 是一個「前處理」步驟
其他例子有 MaxAbsScaler、Normalizer
Unsupervised Learning in Python